libzeep-5.1.7/0000775000175000017500000000000014176701531013025 5ustar maartenmaartenlibzeep-5.1.7/.gitignore0000664000175000017500000000030514176701531015013 0ustar maartenmaartenlib/ lib-http/src/mrsrc.h lib-xml/test/XML-Test-Suite/ tests/ .vs/ .vscode build/ Testing/Temporary doc/bin doc/html doc/autodoc.xml msvc/ doc/Jamfile.v2 CMakeSettings.json include/zeep/config.hpp libzeep-5.1.7/.gitmodules0000664000175000017500000000000014176701531015170 0ustar maartenmaartenlibzeep-5.1.7/.travis.yml0000664000175000017500000000150414176701531015136 0ustar maartenmaartenlanguage: cpp os: - linux - osx dist: focal osx_image: xcode12 compiler: - gcc - clang arch: - amd64 - ppc64le - s390x addons: apt: packages: - libboost-all-dev - language-pack-en - language-pack-da - language-pack-nl - libboost-tools-dev - xsltproc - doxygen - docbook-xsl - default-jdk - fop before_install: - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update ; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install make ; fi script: - ./configure - if [ "$TRAVIS_OS_NAME" = "osx" ]; then gmake; else make; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then gmake test; else make test; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then sudo gmake install; else sudo make install; fi jobs: allow_failures: - os: osx libzeep-5.1.7/CMakeLists.txt0000664000175000017500000003515714176701531015600 0ustar maartenmaartencmake_minimum_required(VERSION 3.16) project(libzeep VERSION 5.1.7 LANGUAGES CXX) list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) include(GNUInstallDirs) include(CheckFunctionExists) include(CheckIncludeFiles) include(FindFilesystem) include(CheckLibraryExists) include(CMakePackageConfigHelpers) include(Dart) include(GenerateExportHeader) set(CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Filesystem REQUIRED) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers") elseif(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") endif() # Build shared libraries by default (not my cup of tea, but hey) option(BUILD_SHARED_LIBS "Build a shared library instead of a static one" OFF) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) if(MSVC) # make msvc standards compliant... add_compile_options(/permissive-) macro(get_WIN32_WINNT version) if (WIN32 AND CMAKE_SYSTEM_VERSION) set(ver ${CMAKE_SYSTEM_VERSION}) string(REPLACE "." "" ver ${ver}) string(REGEX REPLACE "([0-9])" "0\\1" ver ${ver}) set(${version} "0x${ver}") endif() endmacro() get_WIN32_WINNT(ver) add_definitions(-D_WIN32_WINNT=${ver}) # On Windows, do not install in the system location by default if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) message("The library and auxiliary files will be installed in $ENV{LOCALAPPDATA}/zeep") set(CMAKE_INSTALL_PREFIX "$ENV{LOCALAPPDATA}/zeep" CACHE PATH "..." FORCE) endif() endif() # Optionally use mrc to create resources if(WIN32 AND BUILD_SHARED_LIBS) message("Not using resources when building shared libraries for Windows") else() find_package(Mrc) if(MRC_FOUND) option(USE_RSRC "Use mrc to create resources" ON) else() message(STATUS "Not using resources since mrc was not found") endif() if(USE_RSRC) message("Using resources compiled with ${MRC_EXECUTABLE}") set(WEBAPP_USES_RESOURCES 1) mrc_write_header(${CMAKE_BINARY_DIR}/mrsrc.hpp) endif() endif() set(CMAKE_THREAD_PREFER_PTHREAD) set(THREADS_PREFER_PTHREAD_FLAG) find_package(Threads REQUIRED) set(Boost_DETAILED_FAILURE_MSG ON) if(NOT BUILD_SHARED_LIBS) set(Boost_USE_STATIC_LIBS ON) endif() find_package(Boost 1.70.0 REQUIRED COMPONENTS program_options system date_time regex) if(UNIX) find_file(HAVE_SYS_WAIT_H "sys/wait.h") if(HAVE_SYS_WAIT_H) set(HTTP_SERVER_HAS_PREFORK 1) endif() endif() list(APPEND ZEEP_HEADERS ${CMAKE_SOURCE_DIR}/include/zeep/crypto.hpp ${CMAKE_SOURCE_DIR}/include/zeep/streambuf.hpp ${CMAKE_SOURCE_DIR}/include/zeep/value-serializer.hpp ${CMAKE_SOURCE_DIR}/include/zeep/config.hpp ${CMAKE_SOURCE_DIR}/include/zeep/xml/document.hpp ${CMAKE_SOURCE_DIR}/include/zeep/xml/parser.hpp ${CMAKE_SOURCE_DIR}/include/zeep/xml/xpath.hpp ${CMAKE_SOURCE_DIR}/include/zeep/xml/node.hpp ${CMAKE_SOURCE_DIR}/include/zeep/xml/character-classification.hpp ${CMAKE_SOURCE_DIR}/include/zeep/xml/serialize.hpp ${CMAKE_SOURCE_DIR}/include/zeep/xml/doctype.hpp ${CMAKE_SOURCE_DIR}/include/zeep/type-traits.hpp ${CMAKE_SOURCE_DIR}/include/zeep/json/to_element.hpp ${CMAKE_SOURCE_DIR}/include/zeep/json/element.hpp ${CMAKE_SOURCE_DIR}/include/zeep/json/factory.hpp ${CMAKE_SOURCE_DIR}/include/zeep/json/serializer.hpp ${CMAKE_SOURCE_DIR}/include/zeep/json/parser.hpp ${CMAKE_SOURCE_DIR}/include/zeep/json/type_traits.hpp ${CMAKE_SOURCE_DIR}/include/zeep/json/from_element.hpp ${CMAKE_SOURCE_DIR}/include/zeep/json/element_fwd.hpp ${CMAKE_SOURCE_DIR}/include/zeep/json/iterator.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/controller.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/message-parser.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/tag-processor.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/connection.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/server.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/daemon.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/error-handler.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/reply.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/template-processor.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/header.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/request.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/rest-controller.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/soap-controller.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/html-controller.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/security.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/uri.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/el-processing.hpp ${CMAKE_SOURCE_DIR}/include/zeep/http/login-controller.hpp ${CMAKE_SOURCE_DIR}/include/zeep/unicode-support.hpp ${CMAKE_SOURCE_DIR}/include/zeep/nvp.hpp ${CMAKE_SOURCE_DIR}/include/zeep/exception.hpp ) set(ZEEP_SRC ${CMAKE_SOURCE_DIR}/lib-http/src/connection.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/controller.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/controller-rsrc.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/crypto.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/daemon.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/el-processing.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/error-handler.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/format.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/glob.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/html-controller.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/login-controller.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/message-parser.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/reply.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/request.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/rest-controller.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/security.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/server.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/uri.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/soap-controller.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/tag-processor-v2.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/tag-processor.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/template-processor.cpp ${CMAKE_SOURCE_DIR}/lib-http/src/signals.cpp ${CMAKE_SOURCE_DIR}/lib-json/src/element.cpp ${CMAKE_SOURCE_DIR}/lib-json/src/json-parser.cpp ${CMAKE_SOURCE_DIR}/lib-xml/src/character-classification.cpp ${CMAKE_SOURCE_DIR}/lib-xml/src/doctype.cpp ${CMAKE_SOURCE_DIR}/lib-xml/src/document.cpp ${CMAKE_SOURCE_DIR}/lib-xml/src/node.cpp ${CMAKE_SOURCE_DIR}/lib-xml/src/xml-parser.cpp ${CMAKE_SOURCE_DIR}/lib-xml/src/xpath.cpp ) if(HTTP_SERVER_HAS_PREFORK) list(APPEND ZEEP_HEADERS ${CMAKE_SOURCE_DIR}/include/zeep/http/preforked-server.hpp) list(APPEND ZEEP_SRC ${CMAKE_SOURCE_DIR}/lib-http/src/preforked-server.cpp) endif() add_library(zeep ${ZEEP_SRC} ${ZEEP_HEADERS}) set_target_properties(zeep PROPERTIES POSITION_INDEPENDENT_CODE ON) target_include_directories(zeep PUBLIC "$" "$" ${Boost_INCLUDE_DIR} ) target_link_libraries(zeep PUBLIC Boost::regex Boost::date_time Threads::Threads ${STDCPPFS_LIBRARY}) if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") target_link_options(zeep PRIVATE -undefined dynamic_lookup) endif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} ) set(LIBRARY_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} ) generate_export_header(zeep EXPORT_FILE_NAME zeep/zeep_export.hpp) # Install rules install(TARGETS zeep EXPORT zeepTargets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(EXPORT zeepTargets FILE "zeepTargets.cmake" NAMESPACE zeep:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zeep ) install( DIRECTORY include/zeep DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT Devel PATTERN "config.hpp.in" EXCLUDE ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/zeep/zeep_export.hpp" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/zeep COMPONENT Devel ) configure_package_config_file(Config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/zeep/zeepConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zeep PATH_VARS INCLUDE_INSTALL_DIR LIBRARY_INSTALL_DIR ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/zeep/zeepConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/zeep/zeepConfigVersion.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zeep COMPONENT Devel ) set(zeep_MAJOR_VERSION 5) set_target_properties(zeep PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION 5.1 INTERFACE_zeep_MAJOR_VERSION 5) set_property(TARGET zeep APPEND PROPERTY COMPATIBLE_INTERFACE_STRING zeep_MAJOR_VERSION ) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/zeep/zeepConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion ) # Config file set(LIBZEEP_VERSION ${PROJECT_VERSION}) set(LIBZEEP_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) set(LIBZEEP_VERSION_MINOR ${PROJECT_VERSION_MINOR}) set(LIBZEEP_VERSION_PATCH ${PROJECT_VERSION_PATCH}) configure_file("${CMAKE_SOURCE_DIR}/include/zeep/config.hpp.in" "${CMAKE_SOURCE_DIR}/include/zeep/config.hpp" @ONLY) # pkgconfig support set(prefix ${CMAKE_INSTALL_PREFIX}) set(exec_prefix ${CMAKE_INSTALL_PREFIX}) set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) set(includedir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libzeep.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libzeep.pc.in @ONLY) file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libzeep.pc INPUT ${CMAKE_CURRENT_BINARY_DIR}/libzeep.pc.in) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libzeep.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) # Documentation option(ZEEP_BUILD_DOC "Build documentation" OFF) if(ZEEP_BUILD_DOC) find_program(DOXYGEN doxygen) find_program(QUICKBOOK quickbook) find_program(XSLTPROC xsltproc) find_program(FOP fop) find_program(BJAM bjam) if(NOT DOXYGEN) list(APPEND MISSING_DOC_TOOL_LIST doxygen) endif() if(NOT QUICKBOOK) list(APPEND MISSING_DOC_TOOL_LIST quickbook) endif() if(NOT XSLTPROC) list(APPEND MISSING_DOC_TOOL_LIST xsltproc) endif() if(NOT FOP) list(APPEND MISSING_DOC_TOOL_LIST fop) endif() if(NOT BJAM) list(APPEND MISSING_DOC_TOOL_LIST bjam) endif() if(DEFINED MISSING_DOC_TOOL_LIST) list(JOIN MISSING_DOC_TOOL_LIST ", " MISSING_DOC_TOOLS) message(FATAL_ERROR "Cannot create documentation since the following applications could not be found: ${MISSING_DOC_TOOLS}") endif() make_directory(doc) if(UNIX) set(QUICKBOOK_SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/quickbook.sh") configure_file(${CMAKE_SOURCE_DIR}/doc/tools/quickbook.sh.in ${CMAKE_CURRENT_BINARY_DIR}/tmp/quickbook.sh @ONLY) file(COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/quickbook.sh DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/tmp/) else() set(QUICKBOOK_SCRIPT ${QUICKBOOK}) endif() configure_file(${CMAKE_SOURCE_DIR}/doc/Jamfile.v2.in ${CMAKE_SOURCE_DIR}/doc/Jamfile.v2 @ONLY) add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/doc/html/index.html ${CMAKE_SOURCE_DIR}/doc/html ${CMAKE_SOURCE_DIR}/doc/bin ${CMAKE_SOURCE_DIR}/doc/autodoc.xml COMMAND ${BJAM} ${CMAKE_SOURCE_DIR}/doc DEPENDS ${CMAKE_SOURCE_DIR}/doc/Jamfile.v2) add_custom_target(doc ALL DEPENDS ${CMAKE_SOURCE_DIR}/doc/html/index.html) install(DIRECTORY ${CMAKE_SOURCE_DIR}/doc/html DESTINATION ${CMAKE_INSTALL_DOCDIR}/${PACKAGE_NAME}) endif() # Test applications option(ZEEP_BUILD_TESTS "Build test executables" OFF) if(ZEEP_BUILD_TESTS) enable_testing() # data files for the parser test add_library(client_test OBJECT ${CMAKE_SOURCE_DIR}/lib-http/test/client-test-code.cpp) target_include_directories(client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR} # for config.h ${CMAKE_SOURCE_DIR}/include ${Boost_INCLUDE_DIR} ) # data files for the parser test set(XML_CONF_TAR ${CMAKE_SOURCE_DIR}/lib-xml/test/XML-Test-Suite.tbz) set(XML_CONF_FILE ${CMAKE_SOURCE_DIR}/lib-xml/test/XML-Test-Suite/xmlconf/xmlconf.xml) if (NOT EXISTS ${XML_CONF_FILE}) if(${CMAKE_VERSION} VERSION_LESS "3.18.0") find_program(TAR tar) if(TAR) add_custom_command(OUTPUT ${XML_CONF_FILE} COMMAND ${TAR} xf ${XML_CONF_TAR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/lib-xml/test/) else() message(FATAL_ERROR "Please extract the archive ${XML_CONF_TAR} manually or update your cmake version to at least 3.18") endif() else() file(ARCHIVE_EXTRACT INPUT ${XML_CONF_TAR} DESTINATION ${CMAKE_SOURCE_DIR}/lib-xml/test/ VERBOSE) endif() endif() add_custom_target(XML_CONF ALL DEPENDS ${XML_CONF_FILE}) # unit parser serializer xpath json crypto http processor webapp soap rest security uri list(APPEND zeep_tests xml/unit xml/parser xml/serializer xml/xpath json/json http/crypto http/http http/processor http/webapp http/soap http/rest http/security http/uri) if(USE_RSRC) list(APPEND zeep_tests http/rsrc_webapp) endif() foreach(TEST IN LISTS zeep_tests) string(REGEX MATCH "^[^/]+" ZEEP_TEST_DIR ${TEST}) string(REGEX MATCH "[^/]+$" ZEEP_TEST ${TEST}) set(ZEEP_TEST "${ZEEP_TEST}-test") set(ZEEP_TEST_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/lib-${ZEEP_TEST_DIR}/test/${ZEEP_TEST}.cpp") add_executable(${ZEEP_TEST} ${ZEEP_TEST_SOURCE} $ ${ZEEP_TEST_RESOURCE}) if("${TEST}" STREQUAL "http/processor") target_compile_definitions(${ZEEP_TEST} PUBLIC DOCROOT=".") endif() if(USE_RSRC AND ("${TEST}" STREQUAL "http/processor" OR "${TEST}" STREQUAL "http/rsrc_webapp")) mrc_target_resources(${ZEEP_TEST} ${CMAKE_SOURCE_DIR}/lib-http/test/fragment-file.xhtml) endif() target_include_directories(${ZEEP_TEST} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR} # for config.h ${CMAKE_SOURCE_DIR}/include ) target_link_libraries(${ZEEP_TEST} PRIVATE zeep ${STDCPPFS_LIBRARY} Boost::program_options) if(MSVC) # Specify unwind semantics so that MSVC knowns how to handle exceptions target_compile_options(${ZEEP_TEST} PRIVATE /EHsc) endif() add_custom_target("run-${ZEEP_TEST}" DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Run${ZEEP_TEST}.touch ${ZEEP_TEST}) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Run${ZEEP_TEST}.touch COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${ZEEP_TEST} ) if("${TEST}" STREQUAL "xml/parser") # Some tests should be skipped list(APPEND ZEEP_TEST_ARGS ibm-valid-P28-ibm28v02.xml ibm-valid-P29-ibm29v01.xml ibm-valid-P29-ibm29v02.xml ibm-1-1-valid-P03-ibm03v09.xml rmt-e2e-34 rmt-e2e-55 rmt-054 rmt-ns10-006 rmt-e3e-13) list(TRANSFORM ZEEP_TEST_ARGS PREPEND "--questionable=") list(PREPEND ZEEP_TEST_ARGS ${XML_CONF_FILE} "--print-ids") add_dependencies(${ZEEP_TEST} XML_CONF) else() set(ZEEP_TEST_ARGS "") endif() add_test(NAME ${ZEEP_TEST} COMMAND $ ${ZEEP_TEST_ARGS} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/lib-${ZEEP_TEST_DIR}/test) endforeach() endif() libzeep-5.1.7/Config.cmake.in0000664000175000017500000000055614176701531015647 0ustar maartenmaarten@PACKAGE_INIT@ include(CMakeFindDependencyMacro) find_dependency(Boost 1.70.0 REQUIRED COMPONENTS system date_time regex) find_dependency(Threads) INCLUDE("${CMAKE_CURRENT_LIST_DIR}/zeepTargets.cmake") set_and_check(ZEEP_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") set_and_check(ZEEP_LIBRARY_DIR "@PACKAGE_LIBRARY_INSTALL_DIR@") check_required_components(zeep) libzeep-5.1.7/LICENSE_1_0.txt0000664000175000017500000000247214176701531015314 0ustar maartenmaartenBoost Software License - Version 1.0 - August 17th, 2003 Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. 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, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. libzeep-5.1.7/README.md0000664000175000017500000000727314176701531014315 0ustar maartenmaarten[![Build Status](https://travis-ci.org/mhekkel/libzeep.svg?branch=master)](https://travis-ci.org/mhekkel/libzeep) [![DOI](https://zenodo.org/badge/44161414.svg)](https://zenodo.org/badge/latestdoi/44161414) About libzeep ============= Libzeep was originally developed to make it easy to create SOAP servers. And since working with SOAP means working with XML and no decent C++ XML library existed on my radar I created a full XML library as well. Unfortunately (well, considering the work I did), REST proved to be more popular than SOAP, and so I added a better JSON implementation to version 4 of libzeep as well as a way to create REST servers more easily. But then I had to use Spring for some time and was impressed by the simplicity of building interactive web applications and thought I should bring that simplicity to the C++ world. After all, my applications need raw speed and no, Java is not fast. The current incarnation of libzeep, version 5.0, is a completely refactored set of libraries. One for manipulating XML, one for handling JSON and one for building web applications. The XML part of libzeep consists of a validating parser, a DOM(-like) node implementation, an XPath search engine and a XML writer/formatter. The validation works based on DOCTYPE definitions. Please note that libzeep aims to provide a fully compliant XML processor as specified by the W3 organisation (see: [www.w3.org/TR/xml](https://www.w3.org/TR/xml) ). This means it is as strict as the standard requires and it stops processing a file when a validation of the well-formedness is encountered, or when a document appears to be invalid when it is in validating mode. Error reporting is done in this case. The JSON library in itself is fairly simple. There are much better alternatives if you're looking for just JSON. But this implementation is required by the web application part. And then we have a web application library. This one makes it very easy to build a HTTP server that serves HTML but also speaks REST and SOAP. The current implementation consists of a HTTP server class to which you can add controllers. Each controller has a path prefix and handles requests for some entries in this uri path. The base class controller is simple and in fact is just a base class. The HTML controller can be used as a base class so you can add methods that will be called for certain URI paths. In combination with the available tag processors you can then create and return dynamic XHTML pages. The REST and SOAP controllers likewise can be used as base classes to export methods that take simple or complex named parameters and return JSON and SOAP enveloped data structures respectively. Full documentation can be found at: [www.hekkelman.com/libzeep-doc/](https://www.hekkelman.com/libzeep-doc/) Building libzeep ---------------- To build libzeep you have to have [cmake](https://cmake.org/) installed. It is also recommended to install [mrc](https://github.com/mhekkel/mrc) in order to have resources support in libzeep. The commands to build libzeep from the command line are e.g.: ``` git clone https://github.com/mhekkel/libzeep cd libzeep mkdir build cd build cmake .. -DZEEP_BUILD_TESTS=ON cmake --build . ctest cmake --install . ``` On Windows, assuming you have [boost](https://boost.org) installed in C:\Boost, the steps would probably look something like (using powershell): ``` git clone https://github.com/mhekkel/libzeep cd libzeep mkdir build cd build cmake .. -DZEEP_BUILD_TESTS=ON -DBOOST_ROOT=C:\Boost cmake --build . --config Release ctest -C Release cmake --install . --config Release ``` The windows version will by default install in your local AppData folder. Use the --prefix option to specify another location. libzeep-5.1.7/changelog0000664000175000017500000001452314176701531014704 0ustar maartenmaartenVersion 5.1.7 - Fix dependency on std::filesystem library Version 5.1.6 - Fix the visibility of types in zeep::json::detail::iterator_impl - Reintroduced resolving of bind addresses, using "localhost" is easier than only numerical addresses. - Return correct status code in case of catching an exception in rest controllers. - Fix dependency in .cmake config file for Threads - Generate config.hpp file. Version 5.1.5 - update zeepConfig.cmake to include required link file - fix infinite loop in processing incorrect :inline constructs Version 5.1.4 - Update cmakefile to work more reliably Version 5.1.3 - Update SONAME to 5.1 - Create reproducible builds of documentation (and thus whole package) Version 5.1.2 - Fix glob code to match empty path specifications for controllers - Change CMakeLists file to generate only shared or static libs, but not both - Generate pkgconfig file again Version 5.1.1 - Removed uriparser again. URI implementation is now regex based. - Replaced GNU configure with cmake Version 5.1.0 - Added base32 encoding/decoding - Various REST controller fixes, mainly in accepting parameters - The library is now always compiled with PIC - Requred boost version is now 71 - Ignore SIGCHLD in foreground mode, signals are now handled by cross platform implementation - reintroduced a Windows version - Fixed a couple of security issues, all caused by incorrectly parsing uri's. Switched to using liburiparser for now. Version 5.0.2 - Add support for building shared libraries - Decoupled example code from rest, should now be build after installation, or use the STAGE=1 option to make. - rest controller can now return a reply object, adding flexibility Version 5.0.1 - Update makefile to include changes made for the Debian package - Fix writing HTML, proper empty elements - Added some workarounds to build on macOS - Fixed endianness issue in sha implementation Version 5.0.0 - Total rewrite of about everything - Controllers are now the main handlers of requests, three major variants for HTML, REST and SOAP. - Implemented some cryptographic routines in order to drop dependency on libcrypto++ - Redesigned authentication, dropped HTTP digest and opted for JWT, added security_context class for managing all of this - Code now requires a c++17 compiler - Lots of test code added - Added some real world examples - Tested with boost 1.65.1 up to 1.73 - Refactored request, it is now a class and credentials are always stored if a valid access-token was detected. - A bunch of fixes to make web application work behind a reverse proxy. Version 4.0.0 - Major rewrite, may break code. - Added a JSON parser and compatible internal object, is analogous to the version of nlohmann. Replaces the old element class in webapp. - Removed parameter_map, get request parameters from request itself. - Reorganized code, separate folder for lib and examples. - Refactored webapp and move the tag processing into a separate class. Added a second tag processor that mimics thymeleaf. Version 3.0.2 - Change in zeep/xml/serialize.hpp for gcc 4.7 compiler Version 3.0.1 - added cast to uint32 in webapp-el to allow compilation on s390 Version 3.0 - Support for non-intrusive serialization. The call to serialize is now done by the templated struct zeep::xml::struct_serializer. You can create a specialization for this struct to do something else than calling MyClass::serialize. - xml::document now has serialize and deserialize members. - A streaming input added, process_document_elements calls the callback for all elements that match a given xpath. - ISO8859-1 support (finally) - some xpath additions (matches e.g.) - changed signature of various find routines to work with const char* - changed authentication mechanism in webapp to allow multiple realms - some small changes in writing out XML documents/xml::writer - added line number to validation error messages - process value tag of mrs:option tag - el processing returns original string if it does not contain an expression - in expression language, support var1[var2] constructs - fix in writing doctype declaration - insert/erase implementations of zeep::xml::node... - fixed bug in el implementation (dividing numbers) - extended log format of HTTP server to allow better awstat logs (using the extra fields for SOAP calls). Also writes the X-Forwarded-For client if any. - Patches provided by Patrick Rotsaert: serializer for xsd:time and optional data types based on boost::optional. - Split out log_request as a virtual method in http::server - Added quick and dirty test for requests from mobile clients - Added virtual destructors to all base classes. - OPTIONS and HEAD support in web server Version 2.9.0 - Added some calls to xml::writer to write e.g. xml-decl and doctypes Version 2.8.2 - Fix in unicode support code - Preliminary support for handling authentication Version 2.8.1 - removed boost::ptr_vector/ptr_list. - work around a crashing bug in el::object[string] when compiling with icpc Version 2.8.0 - write_content added. - nullptr instead of nil, added a stub for old compilers. - fix in el::object (mixing up uint64 and size_t) Version 2.6.3 - Fix for stack overflow in delete large XML documents Version 2.6.2 - Apparently the word size has changed on amd64/GNUC targets. I've switched to a more robust template selection algorithm for WSDL generation. Version 2.6.1 - Fix in keep-alive (clear reply object after each served reply) - Implemented missing at() virtual method for el::vector - Writing comments now validates output - check mounted paths instead of only the root for handlers - optimization flags in makefile Version 2.6.0 - Changed parameter_map (for webapp) into a multimap Version 2.5.2 - Throw exception when attempting to write null character. Version 2.5.1 - Removed the use of split_iterator from webapp since it generated crashes when built as a shared library... Version 2.5.0 - added webapp, a base class used to create web applications, it uses XHTML templates to fill in. It uses a script language to enable interaction with the C++ code. Version 2.1.0 - support for HTTP/1.1 - added multiplication in xpath expression language... oops - revised interface for container::iterator, now it is possible to use more STL and boost functions on a container directly, like: xml::container cnt = ...; foreach (node* n, cnt) { cout << n->name() << endl; } libzeep-5.1.7/cmake/0000775000175000017500000000000014176701531014105 5ustar maartenmaartenlibzeep-5.1.7/cmake/FindFilesystem.cmake0000664000175000017500000000442614176701531020042 0ustar maartenmaarten# Simplistic reimplementation of https://github.com/vector-of-bool/CMakeCM/blob/master/modules/FindFilesystem.cmake if(TARGET std::filesystem) return() endif() cmake_minimum_required(VERSION 3.10) include(CMakePushCheckState) include(CheckIncludeFileCXX) include(CheckCXXSourceCompiles) cmake_push_check_state() set(CMAKE_CXX_STANDARD 17) check_include_file_cxx("filesystem" _CXX_FILESYSTEM_HAVE_HEADER) mark_as_advanced(_CXX_FILESYSTEM_HAVE_HEADER) set(code [[ #include #include int main() { auto cwd = std::filesystem::current_path(); return EXIT_SUCCESS; } ]]) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS_EQUAL 8.4.0) # >> https://stackoverflow.com/questions/63902528/program-crashes-when-filesystempath-is-destroyed set(CXX_FILESYSTEM_NO_LINK_NEEDED 0) else() # Check a simple filesystem program without any linker flags check_cxx_source_compiles("${code}" CXX_FILESYSTEM_NO_LINK_NEEDED) endif() if(CXX_FILESYSTEM_NO_LINK_NEEDED) set(_found 1) else() set(prev_libraries ${CMAKE_REQUIRED_LIBRARIES}) # Add the libstdc++ flag set(CMAKE_REQUIRED_LIBRARIES ${prev_libraries} -lstdc++fs) check_cxx_source_compiles("${code}" CXX_FILESYSTEM_STDCPPFS_NEEDED) set(_found ${CXX_FILESYSTEM_STDCPPFS_NEEDED}) if(NOT CXX_FILESYSTEM_STDCPPFS_NEEDED) # Try the libc++ flag set(CMAKE_REQUIRED_LIBRARIES ${prev_libraries} -lc++fs) check_cxx_source_compiles("${code}" CXX_FILESYSTEM_CPPFS_NEEDED) set(_found ${CXX_FILESYSTEM_CPPFS_NEEDED}) endif() endif() if(_found) add_library(std::filesystem INTERFACE IMPORTED) set_property(TARGET std::filesystem APPEND PROPERTY INTERFACE_COMPILE_FEATURES cxx_std_17) if(CXX_FILESYSTEM_NO_LINK_NEEDED) # Nothing to add... elseif(CXX_FILESYSTEM_STDCPPFS_NEEDED) set_target_properties(std::filesystem PROPERTIES IMPORTED_LIBNAME stdc++fs) set(STDCPPFS_LIBRARY stdc++fs) elseif(CXX_FILESYSTEM_CPPFS_NEEDED) set_target_properties(std::filesystem PROPERTIES IMPORTED_LIBNAME c++fs) set(STDCPPFS_LIBRARY c++fs) endif() endif() cmake_pop_check_state() set(Filesystem_FOUND ${_found} CACHE BOOL "TRUE if we can run a program using std::filesystem" FORCE) if(Filesystem_FIND_REQUIRED AND NOT Filesystem_FOUND) message(FATAL_ERROR "Cannot run simple program using std::filesystem") endif() libzeep-5.1.7/config/0000775000175000017500000000000014176701531014272 5ustar maartenmaartenlibzeep-5.1.7/config/config.guess0000664000175000017500000013671414176701531016623 0ustar maartenmaarten#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2020 Free Software Foundation, Inc. timestamp='2020-04-26' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$driver" break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl fi ;; esac # Note: order is significant - the case branches are not exclusive. case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ "/sbin/$sysctl" 2>/dev/null || \ "/usr/sbin/$sysctl" 2>/dev/null || \ echo unknown)` case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine="${arch}${endian}"-unknown ;; *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "$machine-${os}${release}${abi-}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; *:OS108:*:*) echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Twizzler:*:*) echo "$UNAME_MACHINE"-unknown-twizzler exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ [ "$TARGET_BINARY_INTERFACE"x = x ] then echo m88k-dg-dgux"$UNAME_RELEASE" else echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` case "$UNAME_MACHINE" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "$sc_cpu_version" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "$sc_kernel_bits" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "$HP_ARCH" = "" ]; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ "$HP_ARCH" = hppa2.0w ] then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi else echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf fi exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) case "$UNAME_MACHINE" in x86) echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; *:Minix:*:*) echo "$UNAME_MACHINE"-unknown-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. # shellcheck disable=SC2154 if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; *:Unleashed:*:*) echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" exit ;; esac # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libzeep-5.1.7/config/config.sub0000664000175000017500000007560414176701531016266 0ustar maartenmaarten#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2020 Free Software Foundation, Inc. timestamp='2020-05-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \ | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 os=$maybe_os ;; android-linux) basic_machine=$field1-unknown os=linux-android ;; *) basic_machine=$field1-$field2 os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 os= ;; *) basic_machine=$field1 os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc os=bsd ;; a29khif) basic_machine=a29k-amd os=udi ;; adobe68k) basic_machine=m68010-adobe os=scout ;; alliant) basic_machine=fx80-alliant os= ;; altos | altos3068) basic_machine=m68k-altos os= ;; am29k) basic_machine=a29k-none os=bsd ;; amdahl) basic_machine=580-amdahl os=sysv ;; amiga) basic_machine=m68k-unknown os= ;; amigaos | amigados) basic_machine=m68k-unknown os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=sysv4 ;; apollo68) basic_machine=m68k-apollo os=sysv ;; apollo68bsd) basic_machine=m68k-apollo os=bsd ;; aros) basic_machine=i386-pc os=aros ;; aux) basic_machine=m68k-apple os=aux ;; balance) basic_machine=ns32k-sequent os=dynix ;; blackfin) basic_machine=bfin-unknown os=linux ;; cegcc) basic_machine=arm-unknown os=cegcc ;; convex-c1) basic_machine=c1-convex os=bsd ;; convex-c2) basic_machine=c2-convex os=bsd ;; convex-c32) basic_machine=c32-convex os=bsd ;; convex-c34) basic_machine=c34-convex os=bsd ;; convex-c38) basic_machine=c38-convex os=bsd ;; cray) basic_machine=j90-cray os=unicos ;; crds | unos) basic_machine=m68k-crds os= ;; da30) basic_machine=m68k-da30 os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec os= ;; delta88) basic_machine=m88k-motorola os=sysv3 ;; dicos) basic_machine=i686-pc os=dicos ;; djgpp) basic_machine=i586-pc os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=ose ;; gmicro) basic_machine=tron-gmicro os=sysv ;; go32) basic_machine=i386-pc os=go32 ;; h8300hms) basic_machine=h8300-hitachi os=hms ;; h8300xray) basic_machine=h8300-hitachi os=xray ;; h8500hms) basic_machine=h8500-hitachi os=hms ;; harris) basic_machine=m88k-harris os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp os=hpux ;; hp300bsd) basic_machine=m68k-hp os=bsd ;; hppaosf) basic_machine=hppa1.1-hp os=osf ;; hppro) basic_machine=hppa1.1-hp os=proelf ;; i386mach) basic_machine=i386-mach os=mach ;; isi68 | isi) basic_machine=m68k-isi os=sysv ;; m68knommu) basic_machine=m68k-unknown os=linux ;; magnum | m3230) basic_machine=mips-mips os=sysv ;; merlin) basic_machine=ns32k-utek os=sysv ;; mingw64) basic_machine=x86_64-pc os=mingw64 ;; mingw32) basic_machine=i686-pc os=mingw32 ;; mingw32ce) basic_machine=arm-unknown os=mingw32ce ;; monitor) basic_machine=m68k-rom68k os=coff ;; morphos) basic_machine=powerpc-unknown os=morphos ;; moxiebox) basic_machine=moxie-unknown os=moxiebox ;; msdos) basic_machine=i386-pc os=msdos ;; msys) basic_machine=i686-pc os=msys ;; mvs) basic_machine=i370-ibm os=mvs ;; nacl) basic_machine=le32-unknown os=nacl ;; ncr3000) basic_machine=i486-ncr os=sysv4 ;; netbsd386) basic_machine=i386-pc os=netbsd ;; netwinder) basic_machine=armv4l-rebel os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=newsos ;; news1000) basic_machine=m68030-sony os=newsos ;; necv70) basic_machine=v70-nec os=sysv ;; nh3000) basic_machine=m68k-harris os=cxux ;; nh[45]000) basic_machine=m88k-harris os=cxux ;; nindy960) basic_machine=i960-intel os=nindy ;; mon960) basic_machine=i960-intel os=mon960 ;; nonstopux) basic_machine=mips-compaq os=nonstopux ;; os400) basic_machine=powerpc-ibm os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=ose ;; os68k) basic_machine=m68k-none os=os68k ;; paragon) basic_machine=i860-intel os=osf ;; parisc) basic_machine=hppa-unknown os=linux ;; pw32) basic_machine=i586-unknown os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=rdos ;; rdos32) basic_machine=i386-pc os=rdos ;; rom68k) basic_machine=m68k-rom68k os=coff ;; sa29200) basic_machine=a29k-amd os=udi ;; sei) basic_machine=mips-sei os=seiux ;; sequent) basic_machine=i386-sequent os= ;; sps7) basic_machine=m68k-bull os=sysv2 ;; st2000) basic_machine=m68k-tandem os= ;; stratus) basic_machine=i860-stratus os=sysv4 ;; sun2) basic_machine=m68000-sun os= ;; sun2os3) basic_machine=m68000-sun os=sunos3 ;; sun2os4) basic_machine=m68000-sun os=sunos4 ;; sun3) basic_machine=m68k-sun os= ;; sun3os3) basic_machine=m68k-sun os=sunos3 ;; sun3os4) basic_machine=m68k-sun os=sunos4 ;; sun4) basic_machine=sparc-sun os= ;; sun4os3) basic_machine=sparc-sun os=sunos3 ;; sun4os4) basic_machine=sparc-sun os=sunos4 ;; sun4sol2) basic_machine=sparc-sun os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun os= ;; sv1) basic_machine=sv1-cray os=unicos ;; symmetry) basic_machine=i386-sequent os=dynix ;; t3e) basic_machine=alphaev5-cray os=unicos ;; t90) basic_machine=t90-cray os=unicos ;; toad1) basic_machine=pdp10-xkl os=tops20 ;; tpf) basic_machine=s390x-ibm os=tpf ;; udi29k) basic_machine=a29k-amd os=udi ;; ultra3) basic_machine=a29k-nyu os=sym1 ;; v810 | necv810) basic_machine=v810-nec os=none ;; vaxv) basic_machine=vax-dec os=sysv ;; vms) basic_machine=vax-dec os=vms ;; vsta) basic_machine=i386-pc os=vsta ;; vxworks960) basic_machine=i960-wrs os=vxworks ;; vxworks68) basic_machine=m68k-wrs os=vxworks ;; vxworks29k) basic_machine=a29k-wrs os=vxworks ;; xbox) basic_machine=i686-pc os=mingw32 ;; ymp) basic_machine=ymp-cray os=unicos ;; *) basic_machine=$1 os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi os=${os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray os=${os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $os in irix*) ;; *) os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony os=newsos ;; next | m*-next) cpu=m68k vendor=next case $os in openstep*) ;; nextstep*) ;; ns2*) os=nextstep2 ;; *) os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde os=${os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x$os != x ] then case $os in # First match some system type aliases that might get confused # with valid system types. # solaris* is a basic system type, with this one exception. auroraux) os=auroraux ;; bluegene*) os=cnk ;; solaris1 | solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; solaris) os=solaris2 ;; unixware*) os=sysv4.2uw ;; gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # es1800 is here to avoid being matched by es* (a different OS) es1800*) os=ose ;; # Some version numbers need modification chorusos*) os=chorusos ;; isc) os=isc2.2 ;; sco6) os=sco5v6 ;; sco5) os=sco3.2v5 ;; sco4) os=sco3.2v4 ;; sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` ;; sco3.2v[4-9]* | sco5v6*) # Don't forget version if it is 3.2v4 or newer. ;; scout) # Don't match below ;; sco*) os=sco3.2v2 ;; psos*) os=psos ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. # sysv* is not here because it comes later, after sysvr4. gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ | sym* | kopensolaris* | plan9* \ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ | aos* | aros* | cloudabi* | sortix* | twizzler* \ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ | knetbsd* | mirbsd* | netbsd* \ | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \ | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \ | chorusrdb* | cegcc* | glidix* \ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \ | linux-newlib* | linux-musl* | linux-uclibc* \ | uxpv* | beos* | mpeix* | udk* | moxiebox* \ | interix* | uwin* | mks* | rhapsody* | darwin* \ | openstep* | oskit* | conix* | pw32* | nonstopux* \ | storm-chaos* | tops10* | tenex* | tops20* | its* \ | os2* | vos* | palmos* | uclinux* | nucleus* \ | morphos* | superux* | rtmk* | windiss* \ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ | skyos* | haiku* | rdos* | toppers* | drops* | es* \ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ | nsk* | powerunix* | genode*) # Remember, each alternative MUST END IN *, to match a version number. ;; qnx*) case $cpu in x86 | i*86) ;; *) os=nto-$os ;; esac ;; hiux*) os=hiuxwe2 ;; nto-qnx*) ;; nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; sim | xray | os68k* | v88r* \ | windows* | osx | abug | netware* | os9* \ | macos* | mpw* | magic* | mmixware* | mon960* | lnews*) ;; linux-dietlibc) os=linux-dietlibc ;; linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; lynx*178) os=lynxos178 ;; lynx*5) os=lynxos5 ;; lynx*) os=lynxos ;; mac*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; opened*) os=openedition ;; os400*) os=os400 ;; sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; wince*) os=wince ;; utek*) os=bsd ;; dynix*) os=bsd ;; acis*) os=aos ;; atheos*) os=atheos ;; syllable*) os=syllable ;; 386bsd) os=bsd ;; ctix* | uts*) os=sysv ;; nova*) os=rtmk-nova ;; ns2) os=nextstep2 ;; # Preserve the version number of sinix5. sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; sinix*) os=sysv4 ;; tpf*) os=tpf ;; triton*) os=sysv3 ;; oss*) os=sysv3 ;; svr4*) os=sysv4 ;; svr3) os=sysv3 ;; sysvr4) os=sysv4 ;; # This must come after sysvr4. sysv*) ;; ose*) os=ose ;; *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) os=mint ;; zvmoe) os=zvmoe ;; dicos*) os=dicos ;; pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $cpu in arm*) os=eabi ;; *) os=elf ;; esac ;; nacl*) ;; ios) ;; none) ;; *-eabi) ;; *) echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $cpu-$vendor in score-*) os=elf ;; spu-*) os=elf ;; *-acorn) os=riscix1.2 ;; arm*-rebel) os=linux ;; arm*-semi) os=aout ;; c4x-* | tic4x-*) os=coff ;; c8051-*) os=elf ;; clipper-intergraph) os=clix ;; hexagon-*) os=elf ;; tic54x-*) os=coff ;; tic55x-*) os=coff ;; tic6x-*) os=coff ;; # This must come before the *-dec entry. pdp10-*) os=tops20 ;; pdp11-*) os=none ;; *-dec | vax-*) os=ultrix4.2 ;; m68*-apollo) os=domain ;; i386-sun) os=sunos4.0.2 ;; m68000-sun) os=sunos3 ;; m68*-cisco) os=aout ;; mep-*) os=elf ;; mips*-cisco) os=elf ;; mips*-*) os=elf ;; or32-*) os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=sysv3 ;; sparc-* | *-sun) os=sunos4.1.1 ;; pru-*) os=elf ;; *-be) os=beos ;; *-ibm) os=aix ;; *-knuth) os=mmixware ;; *-wec) os=proelf ;; *-winbond) os=proelf ;; *-oki) os=proelf ;; *-hp) os=hpux ;; *-hitachi) os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=sysv ;; *-cbm) os=amigaos ;; *-dg) os=dgux ;; *-dolphin) os=sysv3 ;; m68k-ccur) os=rtu ;; m88k-omron*) os=luna ;; *-next) os=nextstep ;; *-sequent) os=ptx ;; *-crds) os=unos ;; *-ns) os=genix ;; i370-*) os=mvs ;; *-gould) os=sysv ;; *-highlevel) os=bsd ;; *-encore) os=bsd ;; *-sgi) os=irix ;; *-siemens) os=sysv4 ;; *-masscomp) os=rtu ;; f30[01]-fujitsu | f700-fujitsu) os=uxpv ;; *-rom68k) os=coff ;; *-*bug) os=coff ;; *-apple) os=macos ;; *-atari*) os=mint ;; *-wrs) os=vxworks ;; *) os=none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $os in riscix*) vendor=acorn ;; sunos*) vendor=sun ;; cnk*|-aix*) vendor=ibm ;; beos*) vendor=be ;; hpux*) vendor=hp ;; mpeix*) vendor=hp ;; hiux*) vendor=hitachi ;; unos*) vendor=crds ;; dgux*) vendor=dg ;; luna*) vendor=omron ;; genix*) vendor=ns ;; clix*) vendor=intergraph ;; mvs* | opened*) vendor=ibm ;; os400*) vendor=ibm ;; ptx*) vendor=sequent ;; tpf*) vendor=ibm ;; vxsim* | vxworks* | windiss*) vendor=wrs ;; aux*) vendor=apple ;; hms*) vendor=hitachi ;; mpw* | macos*) vendor=apple ;; *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) vendor=atari ;; vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libzeep-5.1.7/config/install-sh0000775000175000017500000003253714176701531016310 0ustar maartenmaarten#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libzeep-5.1.7/config/ltmain.sh0000664000175000017500000117716714176701531016136 0ustar maartenmaarten#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.6 Debian-2.4.6-14" package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2015-10-07.11; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd _G_rc_run_hooks=false case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do if eval $_G_hook '"$@"'; then # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift _G_rc_run_hooks=: fi done $_G_rc_run_hooks && func_run_hooks_result=$_G_hook_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, you may remove/edit # any options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for # 'eval'. In this case you also must return $EXIT_SUCCESS to let the # hook's caller know that it should pay attention to # '_result'. Returning $EXIT_FAILURE signalizes that # arguments are left untouched by the hook and therefore caller will ignore the # result variable. # # Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # No change in '$@' (ignored completely by this hook). There is # # no need to do the equivalent (but slower) action: # # func_quote_for_eval ${1+"$@"} # # my_options_prep_result=$func_quote_for_eval_result # false # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # args_changed=false # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: # args_changed=: # ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # args_changed=: # ;; # *) # Make sure the first unrecognised option "$_G_opt" # # is added back to "$@", we could need that later # # if $args_changed is true. # set dummy "$_G_opt" ${1+"$@"}; shift; break ;; # esac # done # # if $args_changed; then # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # fi # # $args_changed # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # false # } # func_add_hook func_validate_options my_option_validation # # You'll also need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options_finish [ARG]... # ---------------------------- # Finishing the option parse loop (call 'func_options' hooks ATM). func_options_finish () { $debug_cmd _G_func_options_finish_exit=false if func_run_hooks func_options ${1+"$@"}; then func_options_finish_result=$func_run_hooks_result _G_func_options_finish_exit=: fi $_G_func_options_finish_exit } # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd _G_rc_options=false for my_func in options_prep parse_options validate_options options_finish do if eval func_$my_func '${1+"$@"}'; then eval _G_res_var='$'"func_${my_func}_result" eval set dummy "$_G_res_var" ; shift _G_rc_options=: fi done # Save modified positional parameters for caller. As a top-level # options-parser function we always need to set the 'func_options_result' # variable (regardless the $_G_rc_options value). if $_G_rc_options; then func_options_result=$_G_res_var else func_quote_for_eval ${1+"$@"} func_options_result=$func_quote_for_eval_result fi $_G_rc_options } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propagate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning $EXIT_SUCCESS (otherwise $EXIT_FAILURE is returned). func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= _G_rc_options_prep=false if func_run_hooks func_options_prep ${1+"$@"}; then _G_rc_options_prep=: # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result fi $_G_rc_options_prep } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= _G_rc_parse_options=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. if func_run_hooks func_parse_options ${1+"$@"}; then eval set dummy "$func_run_hooks_result"; shift _G_rc_parse_options=: fi # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) if test $# = 0 && func_missing_arg $_G_opt; then _G_rc_parse_options=: break fi case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) _G_rc_parse_options=: ; break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift _G_match_parse_options=false break ;; esac $_G_match_parse_options && _G_rc_parse_options=: done if $_G_rc_parse_options; then # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result fi $_G_rc_parse_options } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd _G_rc_validate_options=false # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" if func_run_hooks func_validate_options ${1+"$@"}; then # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result _G_rc_validate_options=: fi # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE $_G_rc_validate_options } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname $scriptversion Debian-2.4.6-14 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= _G_rc_lt_options_prep=: # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; *) _G_rc_lt_options_prep=false ;; esac if $_G_rc_lt_options_prep; then # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result fi $_G_rc_lt_options_prep } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd _G_rc_lt_parse_options=false # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"} ; shift _G_match_lt_parse_options=false break ;; esac $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done if $_G_rc_lt_parse_options; then # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result fi $_G_rc_lt_parse_options } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer # -fuse-ld=* Linker select flags for GCC # -static-* direct GCC to link specific libraries statically # -fcilkplus Cilk Plus language extension features for C/C++ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: libzeep-5.1.7/config/m4/0000775000175000017500000000000014176701531014612 5ustar maartenmaartenlibzeep-5.1.7/config/m4/ax_filesystem.m40000664000175000017500000000372214176701531017734 0ustar maartenmaarten# SPDX-License-Identifier: BSD-2-Clause # # Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # Description: m4 macro to detect std::filesystem and optionally the linker flags to use it AC_DEFUN([AX_FILESYSTEM], [ AC_CHECK_HEADER([filesystem], [], [AC_MSG_ERROR([The file is missing, perhaps you should install a more recent libstdc++ implementation.])]) dnl check if we need stdc++fs as library AC_TRY_LINK( [#include ], [(void)std::filesystem::current_path();], [], [ LIBS="$LIBS -lstdc++fs" AC_TRY_LINK( [#include ], [(void)std::filesystem::current_path();], [], [ AC_MSG_ERROR([Could not link filesystem]) ] ) ] ) ]) libzeep-5.1.7/config/m4/ax_zeep_xml.m40000664000175000017500000002500414176701531017370 0ustar maartenmaarten# # SYNOPSIS # # AX_ZEEP_XML # # DESCRIPTION # # Test for xml library from the libzeep libraries. The macro requires # a preceding call to AX_ZEEP_BASE. # # This macro calls: # # AC_SUBST(ZEEP_XML_LIB) # # And sets: # # HAVE_ZEEP_XML # # LICENSE # # Copyright (c) 2020 Maarten L. Hekkelman (maarten@hekkelman.com) # # 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 any # warranty. AC_DEFUN([AX_ZEEP_BASE], [ AC_ARG_WITH([zeep], [AS_HELP_STRING([--with-zeep@<:@=ARG@:>@], [use libzeep library from a standard location (ARG=yes), from the specified location (ARG=), or disable it (ARG=no) @<:@ARG=yes@:>@ ])], [ AS_CASE([$withval], [no],[want_zeep="no";_AX_ZEEP_path=""], [yes],[want_zeep="yes";_AX_ZEEP_path=""], [want_zeep="yes";_AX_ZEEP_path="$withval"]) ], [want_zeep="yes"]) ]) AC_DEFUN([AX_ZEEP_XML], [ AC_ARG_WITH([zeep-xml], AS_HELP_STRING([--with-zeep-xml@<:@=special-lib@:>@], [use the xml library from libzeep - it is possible to specify a certain library for the linker e.g. --with-zeep-xml=zeep-xml-gcc-mt-d ]), [ if test "$withval" = "no"; then want_zeep="no" elif test "$withval" = "yes"; then want_zeep="yes" ax_zeep_user_xml_lib="" else want_zeep="yes" ax_zeep_user_xml_lib="$withval" fi ], [want_zeep="yes"] ) if test "x$want_zeep" = "xyes"; then AC_REQUIRE([AC_PROG_CC]) CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS -I ${_AX_ZEEP_path}/include" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS -L ${_AX_ZEEP_path}/lib" export LDFLAGS AC_CACHE_CHECK(whether the zeep::xml library is available, ax_cv_zeep_xml, [AC_LANG_PUSH([C++]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], [[zeep::xml::element n("test"); return 0;]])], ax_cv_zeep_xml=yes, ax_cv_zeep_xml=no) AC_LANG_POP([C++]) ]) if test "x$ax_cv_zeep_xml" = "xyes"; then AC_DEFINE(HAVE_ZEEP_XML,,[define if the zeep::xml library is available]) ZEEPLIBDIR="${_AX_ZEEP_path}/lib" if test "x$ax_zeep_user_xml_lib" = "x"; then for libextension in `ls $ZEEPLIBDIR/libzeep-xml*.so* $ZEEPLIBDIR/libzeep-xml*.dylib* $ZEEPLIBDIR/libzeep-xml*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(zeep-xml.*\)\.so.*$;\1;' -e 's;^lib\(zeep-xml.*\)\.dylib.*;\1;' -e 's;^lib\(zeep-xml.*\)\.a.*$;\1;'` ; do ax_lib=${libextension} AC_CHECK_LIB($ax_lib, exit, [ZEEP_XML_LIB="-l$ax_lib"; AC_SUBST(ZEEP_XML_LIB) link_zeep_xml="yes"; break], [link_zeep_xml="no"]) done if test "x$link_zeep_xml" != "xyes"; then for libextension in `ls $ZEEPLIBDIR/zeep-xml*.dll* $ZEEPLIBDIR/zeep-xml*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(zeep-xml.*\)\.dll.*$;\1;' -e 's;^\(zeep-xml.*\)\.a.*$;\1;'` ; do ax_lib=${libextension} AC_CHECK_LIB($ax_lib, exit, [ZEEP_XML_LIB="-l$ax_lib"; AC_SUBST(ZEEP_XML_LIB) link_zeep_xml="yes"; break], [link_zeep_xml="no"]) done fi else for ax_lib in $ax_zeep_user_xml_lib zeep-xml; do AC_CHECK_LIB($ax_lib, main, [ZEEP_XML_LIB="-l$ax_lib"; AC_SUBST(ZEEP_XML_LIB) link_zeep_xml="yes"; break], [link_zeep_xml="no"]) done fi if test "x$ax_lib" = "x"; then AC_MSG_ERROR(Could not find a version of the zeep::xml library!) fi if test "x$link_zeep_xml" != "xyes"; then AC_MSG_ERROR(Could not link against $ax_lib !) fi fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" LIBS="$LIBS $ZEEP_XML_LIB" fi ]) AC_DEFUN([AX_ZEEP_JSON], [ AC_ARG_WITH([zeep-json], AS_HELP_STRING([--with-zeep-json@<:@=special-lib@:>@], [use the json library from libzeep - it is possible to specify a certain library for the linker e.g. --with-zeep-json=zeep-json-gcc-mt-d ]), [ if test "$withval" = "no"; then want_zeep="no" elif test "$withval" = "yes"; then want_zeep="yes" ax_zeep_user_json_lib="" else want_zeep="yes" ax_zeep_user_json_lib="$withval" fi ], [want_zeep="yes"] ) if test "x$want_zeep" = "xyes"; then AC_REQUIRE([AC_PROG_CC]) CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS -I ${_AX_ZEEP_path}/include" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS -L ${_AX_ZEEP_path}/lib" export LDFLAGS AC_CACHE_CHECK(whether the zeep::json library is available, ax_cv_zeep_json, [AC_LANG_PUSH([C++]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], [[zeep::json::element n; return 0;]])], ax_cv_zeep_json=yes, ax_cv_zeep_json=no) AC_LANG_POP([C++]) ]) if test "x$ax_cv_zeep_json" = "xyes"; then AC_DEFINE(HAVE_ZEEP_JSON,,[define if the zeep::json library is available]) ZEEPLIBDIR="${_AX_ZEEP_path}/lib" if test "x$ax_zeep_user_json_lib" = "x"; then for libextension in `ls $ZEEPLIBDIR/libzeep-json*.so* $ZEEPLIBDIR/libzeep-json*.dylib* $ZEEPLIBDIR/libzeep-json*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(zeep-json.*\)\.so.*$;\1;' -e 's;^lib\(zeep-json.*\)\.dylib.*;\1;' -e 's;^lib\(zeep-json.*\)\.a.*$;\1;'` ; do ax_lib=${libextension} AC_CHECK_LIB($ax_lib, exit, [ZEEP_JSON_LIB="-l$ax_lib"; AC_SUBST(ZEEP_JSON_LIB) link_zeep_json="yes"; break], [link_zeep_json="no"]) done if test "x$link_zeep_json" != "xyes"; then for libextension in `ls $ZEEPLIBDIR/zeep-json*.dll* $ZEEPLIBDIR/zeep-json*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(zeep-json.*\)\.dll.*$;\1;' -e 's;^\(zeep-json.*\)\.a.*$;\1;'` ; do ax_lib=${libextension} AC_CHECK_LIB($ax_lib, exit, [ZEEP_JSON_LIB="-l$ax_lib"; AC_SUBST(ZEEP_JSON_LIB) link_zeep_json="yes"; break], [link_zeep_json="no"]) done fi else for ax_lib in $ax_zeep_user_json_lib zeep-json; do AC_CHECK_LIB($ax_lib, main, [ZEEP_JSON_LIB="-l$ax_lib"; AC_SUBST(ZEEP_JSON_LIB) link_zeep_json="yes"; break], [link_zeep_json="no"]) done fi if test "x$ax_lib" = "x"; then AC_MSG_ERROR(Could not find a version of the zeep::json library!) fi if test "x$link_zeep_json" != "xyes"; then AC_MSG_ERROR(Could not link against $ax_lib !) fi fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" LIBS="$ZEEP_JSON_LIB $LIBS" fi ]) AC_DEFUN([AX_ZEEP_HTTP], [ AC_ARG_WITH([zeep-http], AS_HELP_STRING([--with-zeep-http@<:@=special-lib@:>@], [use the http library from libzeep - it is possible to specify a certain library for the linker e.g. --with-zeep-http=zeep-http-gcc-mt-d ]), [ if test "$withval" = "no"; then want_zeep="no" elif test "$withval" = "yes"; then want_zeep="yes" ax_zeep_user_http_lib="" else want_zeep="yes" ax_zeep_user_http_lib="$withval" fi ], [want_zeep="yes"] ) if test "x$want_zeep" = "xyes"; then AC_REQUIRE([AC_PROG_CC]) CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS -I ${_AX_ZEEP_path}/include" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS -L ${_AX_ZEEP_path}/lib" export LDFLAGS AC_CACHE_CHECK(whether the zeep::http library is available, ax_cv_zeep_http, [AC_LANG_PUSH([C++]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], [[zeep::encode_base64(""); return 0;]])], ax_cv_zeep_http=yes, ax_cv_zeep_http=no) AC_LANG_POP([C++]) ]) if test "x$ax_cv_zeep_http" = "xyes"; then AC_DEFINE(HAVE_ZEEP_HTTP,,[define if the zeep::http library is available]) ZEEPLIBDIR="${_AX_ZEEP_path}/lib" if test "x$ax_zeep_user_http_lib" = "x"; then for libextension in `ls $ZEEPLIBDIR/libzeep-http*.so* $ZEEPLIBDIR/libzeep-http*.dylib* $ZEEPLIBDIR/libzeep-http*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(zeep-http.*\)\.so.*$;\1;' -e 's;^lib\(zeep-http.*\)\.dylib.*;\1;' -e 's;^lib\(zeep-http.*\)\.a.*$;\1;'` ; do ax_lib=${libextension} AC_CHECK_LIB($ax_lib, exit, [ZEEP_HTTP_LIB="-l$ax_lib"; AC_SUBST(ZEEP_HTTP_LIB) link_zeep_http="yes"; break], [link_zeep_http="no"]) done if test "x$link_zeep_http" != "xyes"; then for libextension in `ls $ZEEPLIBDIR/zeep-http*.dll* $ZEEPLIBDIR/zeep-http*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(zeep-http.*\)\.dll.*$;\1;' -e 's;^\(zeep-http.*\)\.a.*$;\1;'` ; do ax_lib=${libextension} AC_CHECK_LIB($ax_lib, exit, [ZEEP_HTTP_LIB="-l$ax_lib"; AC_SUBST(ZEEP_HTTP_LIB) link_zeep_http="yes"; break], [link_zeep_http="no"]) done fi else for ax_lib in $ax_zeep_user_http_lib zeep-http; do AC_CHECK_LIB($ax_lib, main, [ZEEP_HTTP_LIB="-l$ax_lib"; AC_SUBST(ZEEP_HTTP_LIB) link_zeep_http="yes"; break], [link_zeep_http="no"]) done fi if test "x$ax_lib" = "x"; then AC_MSG_ERROR(Could not find a version of the zeep::http library!) fi if test "x$link_zeep_http" != "xyes"; then AC_MSG_ERROR(Could not link against $ax_lib !) fi fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" LIBS="$ZEEP_HTTP_LIB $LIBS" fi ]) libzeep-5.1.7/config/m4/libtool.m40000664000175000017500000112676314176701531016540 0ustar maartenmaarten# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 58 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cr libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cr libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cr} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&AS_MESSAGE_LOG_FD if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&AS_MESSAGE_LOG_FD && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # flang / f18. f95 an alias for gfortran or flang on Debian flang* | f18* | f95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS libzeep-5.1.7/config/m4/ltoptions.m40000664000175000017500000003426214176701531017116 0ustar maartenmaarten# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) libzeep-5.1.7/config/m4/ltsugar.m40000664000175000017500000001044014176701531016534 0ustar maartenmaarten# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) libzeep-5.1.7/config/m4/ltversion.m40000664000175000017500000000127314176701531017104 0ustar maartenmaarten# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4179 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6]) m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) libzeep-5.1.7/config/m4/lt~obsolete.m40000664000175000017500000001377414176701531017442 0ustar maartenmaarten# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software # Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) libzeep-5.1.7/doc/0000775000175000017500000000000014176701531013572 5ustar maartenmaartenlibzeep-5.1.7/doc/Jamfile.v2.in0000664000175000017500000000402214176701531016015 0ustar maartenmaartenusing boostbook : /usr/share/xml/docbook/stylesheet/docbook-xsl/ : /usr/share/xml/docbook/schema/dtd/4.2/ : /usr/share/boostbook ; using xsltproc : @XSLTPROC@ ; using doxygen : @DOXYGEN@ ; using fop : @FOP@ ; using quickbook : @QUICKBOOK_SCRIPT@ ; doxygen autodoc : [ glob @CMAKE_SOURCE_DIR@/include/zeep/*.hpp ] [ glob @CMAKE_SOURCE_DIR@/include/zeep/xml/*.hpp ] [ glob @CMAKE_SOURCE_DIR@/include/zeep/json/*.hpp ] [ glob @CMAKE_SOURCE_DIR@/include/zeep/http/*.hpp ] [ glob @CMAKE_SOURCE_DIR@/include/zeep/rest/*.hpp ] [ glob @CMAKE_SOURCE_DIR@/include/zeep/soap/*.hpp ] : "PREDEFINED=\"HTTP_SERVER_HAS_PREFORK\"" HIDE_UNDOC_MEMBERS=YES EXTRACT_PRIVATE=NO ENABLE_PREPROCESSING=YES MACRO_EXPANSION=YES EXPAND_ONLY_PREDEF=YES SEARCH_INCLUDES=YES INCLUDE_PATH=$(BOOST_ROOT) FULL_PATH_NAMES=YES STRIP_FROM_PATH=@CMAKE_SOURCE_DIR@/include SORT_MEMBER_DOCS=NO ; xml libzeep-doc : @CMAKE_SOURCE_DIR@/doc/libzeep-doc.qbk ; boostbook standalone : libzeep-doc autodoc : boost.image.src=images/logo.png boost.image.alt="\"libzeep\"" boost.image.w=100 boost.image.h=50 nav.layout=none css images boost.root="https://www.hekkelman.com/libzeep-doc/include/" html.stylesheet=css/zeep.css img.src.path=images/ boost.graphics.root=images/ boost.mobile=1 ; install css : [ glob @CMAKE_SOURCE_DIR@/doc/css/*.css ] : html/css ; install images : [ glob @CMAKE_SOURCE_DIR@/doc/images/*.png ] [ glob @CMAKE_SOURCE_DIR@/doc/images/callouts/*.png ] : html/images ; explicit css ; explicit images ; libzeep-5.1.7/doc/Jamroot.jam0000664000175000017500000000000114176701531015665 0ustar maartenmaarten libzeep-5.1.7/doc/css/0000775000175000017500000000000014176701531014362 5ustar maartenmaartenlibzeep-5.1.7/doc/css/zeep.css0000664000175000017500000002674514176701531016055 0ustar maartenmaarten/* CSS file for libzeep documentation Starts with the contents of boostbook.css */ /*============================================================================= Copyright (c) 2004 Joel de Guzman http://spirit.sourceforge.net/ Distributed under the Boost Software License, Version 1.0. (See accompany- ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) =============================================================================*/ /*============================================================================= Body defaults =============================================================================*/ body { margin: 1em; font-family: sans-serif; } /* Keep the content width reasonable */ body > * { max-width: 1200px; margin: 0 auto; } /*============================================================================= Paragraphs =============================================================================*/ p { text-align: left; font-size: 10pt; line-height: 1.15; } /*============================================================================= Program listings =============================================================================*/ /* Code on paragraphs */ p tt.computeroutput { font-size: 9pt; } pre.synopsis { font-size: 9pt; margin: 1pc 4% 0pc 4%; padding: 0.5pc 0.5pc 0.5pc 0.5pc; } .programlisting, .screen { font-size: 9pt; display: block; margin: 1pc 4% 0pc 4%; padding: 0.5pc 0.5pc 0.5pc 0.5pc; } /* Program listings in tables don't get borders */ td .programlisting, td .screen { margin: 0pc 0pc 0pc 0pc; padding: 0pc 0pc 0pc 0pc; } /*============================================================================= Headings =============================================================================*/ h1, h2, h3, h4, h5, h6 { text-align: left; margin: 1em 0em 0.5em 0em; font-weight: bold; } h1 { font-size: 140%; } h2 { font-weight: bold; font-size: 140%; } h3 { font-weight: bold; font-size: 130%; } h4 { font-weight: bold; font-size: 120%; } h5 { font-weight: normal; font-style: italic; font-size: 110%; } h6 { font-weight: normal; font-style: italic; font-size: 100%; } /* Top page titles */ title, h1.title, h2.title h3.title, h4.title, h5.title, h6.title, .refentrytitle { font-weight: bold; margin-bottom: 1pc; } h1.title { font-size: 140% } h2.title { font-size: 140% } h3.title { font-size: 130% } h4.title { font-size: 120% } h5.title { font-size: 110% } h6.title { font-size: 100% } .section h1 { margin: 0em 0em 0.5em 0em; font-size: 140%; } .section h2 { font-size: 140% } .section h3 { font-size: 130% } .section h4 { font-size: 120% } .section h5 { font-size: 110% } .section h6 { font-size: 100% } /* Code on titles */ h1 tt.computeroutput { font-size: 140% } h2 tt.computeroutput { font-size: 140% } h3 tt.computeroutput { font-size: 130% } h4 tt.computeroutput { font-size: 130% } h5 tt.computeroutput { font-size: 130% } h6 tt.computeroutput { font-size: 130% } /*============================================================================= Author =============================================================================*/ h3.author { font-size: 100% } /*============================================================================= Lists =============================================================================*/ li { font-size: 10pt; line-height: 1.3; } /* Unordered lists */ ul { text-align: left; } /* Ordered lists */ ol { text-align: left; } /*============================================================================= Links =============================================================================*/ a { text-decoration: none; /* no underline */ } a:hover { text-decoration: underline; } /*============================================================================= Spirit style navigation =============================================================================*/ .spirit-nav { text-align: right; } .spirit-nav a { color: white; padding-left: 0.5em; } .spirit-nav img { border-width: 0px; } /*============================================================================= Copyright footer =============================================================================*/ .copyright-footer { text-align: right; font-size: 70%; } .copyright-footer p { text-align: right; font-size: 80%; } /*============================================================================= Table of contents =============================================================================*/ .toc { margin: 1pc 4% 0pc 4%; padding: 0.1pc 1pc 0.1pc 1pc; font-size: 80%; line-height: 1.15; } .boost-toc { float: right; padding: 0.5pc; } /* Code on toc */ .toc .computeroutput { font-size: 120% } /* No margin on nested menus */ .toc dl dl { margin: 0; } /*============================================================================= Tables =============================================================================*/ .table-title, div.table p.title { margin-left: 4%; padding-right: 0.5em; padding-left: 0.5em; } .informaltable table, .table table { width: 92%; margin-left: 4%; margin-right: 4%; } div.informaltable table, div.table table { padding: 4px; } /* Table Cells */ div.informaltable table tr td, div.table table tr td { padding: 0.5em; text-align: left; font-size: 9pt; } div.informaltable table tr th, div.table table tr th { padding: 0.5em 0.5em 0.5em 0.5em; border: 1pt solid white; font-size: 80%; } table.simplelist { width: auto !important; margin: 0em !important; padding: 0em !important; border: none !important; } table.simplelist td { margin: 0em !important; padding: 0em !important; text-align: left !important; font-size: 9pt !important; border: none !important; } /*============================================================================= Blurbs =============================================================================*/ div.note, div.tip, div.important, div.caution, div.warning, p.blurb { font-size: 9pt; /* A little bit smaller than the main text */ line-height: 1.2; display: block; margin: 1pc 4% 0pc 4%; padding: 0.5pc 0.5pc 0.5pc 0.5pc; } p.blurb img { padding: 1pt; } /*============================================================================= Variable Lists =============================================================================*/ div.variablelist { margin: 1em 0; } /* Make the terms in definition lists bold */ div.variablelist dl dt, span.term { font-weight: bold; font-size: 10pt; } div.variablelist table tbody tr td { text-align: left; vertical-align: top; padding: 0em 2em 0em 0em; font-size: 10pt; margin: 0em 0em 0.5em 0em; line-height: 1; } div.variablelist dl dt { margin-bottom: 0.2em; } div.variablelist dl dd { margin: 0em 0em 0.5em 2em; font-size: 10pt; } div.variablelist table tbody tr td p, div.variablelist dl dd p { margin: 0em 0em 0.5em 0em; line-height: 1; } /*============================================================================= Misc =============================================================================*/ /* Title of books and articles in bibliographies */ span.title { font-style: italic; } span.underline { text-decoration: underline; } span.strikethrough { text-decoration: line-through; } /* Copyright, Legal Notice */ div div.legalnotice p { text-align: left } /*============================================================================= Colors =============================================================================*/ @media screen { body { background-color: #FFFFFF; color: #000000; } /* Syntax Highlighting */ .keyword { color: #0000AA; } .identifier { color: #000000; } .special { color: #707070; } .preprocessor { color: #402080; } .char { color: teal; } .comment { color: #800000; } .string { color: teal; } .number { color: teal; } .white_bkd { background-color: #FFFFFF; } .dk_grey_bkd { background-color: #999999; } /* Links */ a, a .keyword, a .identifier, a .special, a .preprocessor a .char, a .comment, a .string, a .number { color: #005a9c; } a:visited, a:visited .keyword, a:visited .identifier, a:visited .special, a:visited .preprocessor a:visited .char, a:visited .comment, a:visited .string, a:visited .number { color: #9c5a9c; } h1 a, h2 a, h3 a, h4 a, h5 a, h6 a, h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover, h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited { text-decoration: none; /* no underline */ color: #000000; } /* Copyright, Legal Notice */ .copyright { color: #666666; font-size: small; } div div.legalnotice p { color: #666666; } /* Program listing */ pre.synopsis { border: 1px solid #DCDCDC; } .programlisting, .screen { border: 1px solid #DCDCDC; } td .programlisting, td .screen { border: 0px solid #DCDCDC; } /* Blurbs */ div.note, div.tip, div.important, div.caution, div.warning, p.blurb { border: 1px solid #DCDCDC; } /* Table of contents */ .toc { border: 1px solid #DCDCDC; } /* Tables */ div.informaltable table tr td, div.table table tr td { border: 1px solid #DCDCDC; } div.informaltable table tr th, div.table table tr th { background-color: #F0F0F0; border: 1px solid #DCDCDC; } .copyright-footer { color: #8F8F8F; } /* Misc */ span.highlight { color: #00A000; } } @media print { /* Links */ a { color: black; } a:visited { color: black; } .spirit-nav { display: none; } /* Program listing */ pre.synopsis { border: 1px solid gray; } .programlisting, .screen { border: 1px solid gray; } td .programlisting, td .screen { border: 0px solid #DCDCDC; } /* Table of contents */ .toc { border: 1px solid gray; } .informaltable table, .table table { border: 1px solid gray; border-collapse: collapse; } /* Tables */ div.informaltable table tr td, div.table table tr td { border: 1px solid gray; } div.informaltable table tr th, div.table table tr th { border: 1px solid gray; } table.simplelist tr td { border: none !important; } /* Misc */ span.highlight { font-weight: bold; } } /*============================================================================= Images =============================================================================*/ span.inlinemediaobject img { vertical-align: middle; } /*============================================================================== Super and Subscript: style so that line spacing isn't effected, see http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=1&postId=5341 ==============================================================================*/ sup, sub { height: 0; line-height: 1; vertical-align: baseline; position: relative; } /* For internet explorer: */ * html sup, * html sub { vertical-align: bottom; } sup { bottom: 1ex; } sub { top: .5ex; } /*============================================================================== Indexes: pretty much the same as the TOC. ==============================================================================*/ .index { font-size: 80%; padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; } .index ul { padding-left: 3em; } .index p { padding: 2px; margin: 2px; } .index-entry-level-0 { font-weight: bold; } .index em { font-weight: bold; } /* My changes */ pre { font-family: monospace; border: solid 1px gray; padding: 6px; background-color: #eee; } span.comment { color: gray; } libzeep-5.1.7/doc/images/0000775000175000017500000000000014176701531015037 5ustar maartenmaartenlibzeep-5.1.7/doc/images/alert.png0000664000175000017500000000113314176701531016652 0ustar maartenmaarten‰PNG  IHDRaÇ„sBITÛáOàŸPLTE೚{âââ™™™PL9][U@5YH5*ÌÌÌÿÌ»–A>9ya·“÷Æ50fff¬¬¬PD¬Š1-%"”{dPfffK<LLKÌ™=;9{{{ $åååÉ¡ˆmå¸iTЦ70PNH;/O?\L:1!3.6+)"ÿÿÿ RÒJ5tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|µÐ pHYs ð ðB¬4˜%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬ÏáIDATxœmÐÛ‚ `4Êbµ$ˆ§¦ ¢sÓéýŸ­µ¬Ø>wø…qŒÖb/´w½;é߇NÀøçCéd~`·‰üZ%G}?‚3ø§¾‹&Ò »šjÄœ«{êä)êÔIÕKNä$‚¦ø»Ãç#‡"Õ@Õ!X ùÉ·E÷%p”!IEND®B`‚libzeep-5.1.7/doc/images/blank.png0000664000175000017500000000056614176701531016643 0ustar maartenmaarten‰PNG  IHDR€€L\öœgAMA± üa-IDATxœíÑA À0À¿çMF4 z×;3'ÎÓ¿kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À€5kÖ¬X°` À`fýHfIEND®B`‚libzeep-5.1.7/doc/images/callouts/0000775000175000017500000000000014176701531016665 5ustar maartenmaartenlibzeep-5.1.7/doc/images/callouts/1.png0000664000175000017500000000060714176701531017536 0ustar maartenmaarten‰PNG  IHDR vâ 9NIDATxœ1nÂ@Eÿì® –0¦Hƒ¬ˆÒ Mr.£D9D ÎRPåéB±…[$Â"EFÂZ Ö;ibDFÚfvÞÓŸ¡,Ëîv»Ýƒ÷^âFI)óápøID®é)kícoN§}KPUÕ·Öú…™§D‘ð= ÚDfÆz½†”½^ï33Š¢¸_­Vc­5‰hˆu]c6›a2™À9":à¶m£,KÄq,.—ËK£ÑøTH)ADp]º®Ãó<Ìçs€çy`ŒÕ–]×ýß÷?n·Û\JIRJ✓”’ªª")%EAEQ眢(*—Ëå×Õjå<ŠDDUžçEEÿ-‘”²Êóüûãò?ýÎÌòÂF,RâIEND®B`‚libzeep-5.1.7/doc/images/callouts/11.png0000664000175000017500000000063214176701531017615 0ustar maartenmaarten‰PNG  IHDR vâ 9aIDATxœ…’±ŠÛ@†ÿ‘ÙKr‘ƈàR›»§HŸG yˆ~犫òé"Ìvc8^C°ÁfÍzg'ENÇé|äþî˜of`h¹\~pÎÝ…b¼“8Ž÷Óéôù¶¦¬µ÷I’< ‡Ãþ{‚ËåòGkýUD[‰"¢h0ô'“IŸˆ "8ˆã£Ñ¨ÃDôq·ÛÍ´Öh%Qk'"03ªªÂ|>‡÷þ†ó<Çx<.”R3­õgQêåŠÆl6œN'¤izÃD„,Ë 0ÆÌ´Ö芢À~¿‡R I’Üp»i–eðÞÛíö[GEš¦Aš¦ˆ¢×½fðÞã|>{?£—‚š¦Ažço2\¯Wcüñx|ìõz_:f†ˆ ,Ë7ùusY–¿QUÕ§õzm™Y˜YœsÂÌBè°sN꺾.‹ï«Õªx~$ ÖÚK]×ÿ}"fÖÚÏ“Ÿòä¿ö­Î\TIEND®B`‚libzeep-5.1.7/doc/images/callouts/12.png0000664000175000017500000000075014176701531017617 0ustar maartenmaarten‰PNG  IHDR vâ 9¯IDATxœ…’=ËÚ`†ï'yˆL"X š1‹ƒí¦¸ ïÞŸRú#:ø;¤ÃK‡®.ºèÖ ÏAP#Ñ4Hüx>:E—¾g‡CÂ0üt½^?K)u|Pº®'Ífó!„ß{4Ïó/†aü,•JæG‚óù¼eŒ}WJ½ß%”¢‹EÓó<“¥öû=t]‡ã8Øív˜Íf°, õz½¾ÝnûŒ1Ü%ÚÝNA`0€sŽ4M1™L ¥D†X­V¨Õj.¥´Ïûª”¢ô9bEX.—8°, —ËÝn•JãñY–Á¶mp£(ê3Æð"p]I’€R Ã0`šÿÎÇ1Ò4E§Ó!¶mƒsî®×ëÚ³@Ó4dY˲ iÚžN§h·Û¨V«Î9N§0}H)‘eÇl6ŒF#´Z-”ËeÀívCEüp8¼ …o/+! ”‚ïûB`8b>Ÿ#Žc4 ôz=Äqü€}ß_‘ ÞlÛþåyžy—èºþ˜&¥|¤K’䪔’yžŸ‹ÅŸH!ó<ÿý À_Ǫçdå{WIEND®B`‚libzeep-5.1.7/doc/images/callouts/13.png0000664000175000017500000000077514176701531017627 0ustar maartenmaarten‰PNG  IHDR vâ 9ÄIDATxœ…Ò?ÏšPðçALàÂÐÅ qdqiGWÓ½›_£é‡èà§p°M|§®nv+1w€Å£2ø‡(A¸÷v©o^—¾g<Éùs’‡Að¡,ËBª§^¯÷‡R?zZžçŸt]ÿiš¦ñPÅ1öMJùò@4BˆÒl6n·kB ¥Äù|†ªª°mÇãa²,t:Îáp3Æð@”‡Nç¾ïc:¢®k$I‚år !‚ Àn·C«Õr5M3ƾH)5íí‰qc»Ýâz½Â²,Üïwôû}˜¦‰Åb ”€Çñ˜1†'Àu]œN'hš]×a6› f³ÇÁ`0!”RÔuíî÷ûïÊ[@Q¤i ˲ ( 8çh·ÛFH’B@]×Ȳ¬ðû B MSضªª0ŸÏ‘e²,¥Š¢ ª*Äq\_.——F£ñõéÎ9¤”ð<ªªÂqL&PJ1Ayö€-øM}]Ü$ƒ.B05FAcˆ&÷ÞÓ¥ÊçÒïŒÎ^¯ß•eùA)¥áÒ4íÐëõ~1ÆÄ½§EñÑ0ŒF£öp½^ÿAð•ˆ^îˆÎãõz½ÖívkŒ1ŽÇ#4MC³ÙÒ4€÷·Ûmî¿ëŒ1H)áû>¦Ó)„`Œ1†4M1™L°ÛíÐn·]]×ÇA|&"]}bLj¢çó–e’$Á|>‡išð<¶m€Çñ8<®ëâp8@×u†$I°\.1 $ Çc ¶mCáî÷ûoü5À9G–e°, RJÌf3TU…ÅbËå‚<ÏBäy.,Ÿ¥²,ƒã8Ð4 Ãá­V Q¡Óé€sŽªªDZ8N/¦i~yzAJ "‚çyàœ£ß*äyŽÑhÎùÓ°çy¿áûþ§ív[H)IJIeY’”’”R¤”zôʲ¤0 «Õjõ}³Ù¸ ‘*Šâ†áC$¥TEQü|lþWëBþ?OhN÷IEND®B`‚libzeep-5.1.7/doc/images/callouts/15.png0000664000175000017500000000077314176701531017627 0ustar maartenmaarten‰PNG  IHDR vâ 9ÂIDATxœ…Ò»ŽÚPàÿàÃMÂx-…™ˆ7¤áPªÑ÷}¬V+œÏg躥\×E0M¶mÃ4M°|ßï;ŽƒÀ²,H)‘Ëå°^¯ÑëõÐjµ0™L0ŸÏQ©TP.—¡”²6›Í× “É Cèº "´ÛmH)¡iÿž¤”ÂårQ~f^iš" C†"Âx<Æn·Ãv»ÅétB£ÑÀívƒïû*‚ç|>ÿùá"3£Ùl"›Í¢Óé`4ºÝ.žžž†›ÍæÓéôãb±ˆˆˆ‰ˆ“$a"â4M™ˆ8ŽcŽã˜“$áåry›Ífß<ϳ^‚ÄÌiEñr¹üoˆˆ(¢èÇËæ¿õßå´ ttIEND®B`‚libzeep-5.1.7/doc/images/callouts/2.png0000664000175000017500000000067614176701531017545 0ustar maartenmaarten‰PNG  IHDR vâ 9…IDATxœ…ÁŠA†ÿj‡QAôâTÔã\DIŸ!xÍ£„Ϥ”( ¢ 33Öë5N§Œ1˜Ïç0Æ€ˆ@DB Ñh ÕjuÇ™I)?2³ã¬„BÝ ‚‰0b@*hUÝ^ì±–Îá|E«Õªr>ŸclŸ‘¦)æó9ƒâ8†ok!"„aQ–e­5 Œ1¸\.Rƒ²,ÞO#F3^V«Öë5¢(Bžç–éœCUUÀ¯‡@)k-ªªBY–PJý¾ßïȲÌåyþÒét¾>Óéab»Ý" CL&“§p’$% !°\.±X,Ðjµ „3¿‰ýÉ̵µöz8>ü¼÷µµöçkþK¯»5ÀzhIEND®B`‚libzeep-5.1.7/doc/images/callouts/7.png0000664000175000017500000000061514176701531017543 0ustar maartenmaarten‰PNG  IHDR vâ 9TIDATxœ¿jA‡³»øDQr‚èÕלERø¾@^Á7yˆ>H «”ö’.͂ڊáÄEAöôîvRÝ¡Ac¦›á÷}Ì M&“»ãñxo­•¸QRÊoß÷?ˆ(NgÊóËå^K¥Rá– Ã/­õ33R‰""Q, ®ëÆã1Öë5€™Ñn·Q«Õ²~·Û¹‹Å¢¯µF*©ˆ@DB`µZa4ÁZ{6¯T*h4M¥T_kýÈÌJ¥!|ßÇr¹Äf³A¯×ƒã8g'Êå24ƒ èk­!N‡ÃÃáNõzýâR‰ã8Mf~9L§ST«Õ«pZqc¿ßÇÞ3µóù­V Bˆ«pE‚ Þn·ƒ|>ÿ”%“$3Ãó¼Þç}fO”R¢ÛíBJ f¾¸öo3[cL8›Íþ¼;IkŒy;…àös­¯vÏžOIEND®B`‚libzeep-5.1.7/doc/images/callouts/8.png0000664000175000017500000000066214176701531017546 0ustar maartenmaarten‰PNG  IHDR vâ 9yIDATxœ…бŽÚ@à–Å ÙhŠ(·¡I‚)…$ÊC\Ác¸HqU?BD“‚•M)J‘µÈï¦2áÂénÊý?Í ‡Y]×­µ=¼S½^ïÏjµúIDܽIcÌ'Ïó¾F#ÿ=àz½þÖZuÎ=wˆ$"1ýåré·m‹4MQ–%”R˜Íf "€seY~8N[­5:Dtºs»Ýyžƒ™‘$ ˜D"‚ab>Ÿ/¤”[­õg眔Ð4 öû=¢(‚Y–ÁZûb"B°(Šb«µ†¼o†aˆ8Ž“ÉòŸÿ€0ó"Ïó§Û,Ë0±ÙlP×5â83¿Š03ªªb?n7¸\.ð}D„ªª„á¦iPŸÏççÁ`ðåÆ+¥$ Ò4E†X¯×ð<ïͰRê× ˜N§ˆ¢ÖZ!Ðï÷áœ{1öÿaÎ9kŒ¹LJqï«m[kŒù~€¿`“ĪU ÄIEND®B`‚libzeep-5.1.7/doc/images/callouts/9.png0000664000175000017500000000064414176701531017547 0ustar maartenmaarten‰PNG  IHDR vâ 9kIDATxœ…OjÂ@…ß/£  U .™M»s•Ct!ž£ô]x ‘.ºê\7%0ˆn…¡4(&¦«µ‚o9Ì÷Í{CëõúA)õ˜ç¹‰;1M3äœQZœ1)å“eYïŽãÔî â8þB¼j­? #"öíZ¿ß¯eY†Õj‡`Œ•°ÖQ¹»Ýn*„@!aç–Ë%¢(GŒF#† "4 Q/‚Rb¥|߇çyð<¾ïC)u1ˆP¯×Ñív{Œ±©âÙÀU’$A†Øï÷7ÿ¡´ÛížÖú­œÀç³Ù RJض]Ö¿Nš¦8N)€¯R°Ùlà8&“ ‹\×…eYÿà$IAz8>ªÕêKùD§ÓóùÍfœó»ð`0ø)´Z-ŒÇcäyŽJ¥Ó4¡µ¾¨} ÓZçRÊx»ÝÞÜ[$˲\JùyÀýå» äguIEND®B`‚libzeep-5.1.7/doc/images/caution.png0000664000175000017500000000234214176701531017210 0ustar maartenmaarten‰PNG  IHDRשÍÊPLTE!!11BBZZcckkss{{„„„„sŒŒŒŒsŒŒŒ””””s””{œœœœsœœ{œœ”œœœ¥¥¥¥c¥¥œ¥¥¥µµµµZµµcµµµ½½½½cÎÎÎÎÎÖÖÖÖÎÖÖÖÞÞÞÞ1ÞÞ9ÞÞBçççç1çç9çççïïïïï÷÷÷÷÷÷÷÷1÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_§ä\bKGDˆHñIDATxÚu’ÛŽ‚@ †ñÀ®bÌ®ÊIc¹APÛ`bxÿ³sBEíU§_çïOh¿<Îô`Ó'€á1û§wpŽÜä õW–Èt:%suá&³w,ÀHêéȯøf Øþ“Èü‚—²59 ævÀ:€Ç\^ F;`çªHãJ'Ê8‰ƒ71€›íZJ²Æ+ïçb²2B‘¢8·ÀŸ›¤Q§$×wŠéRKÕ ´v)ÎnR˜Áp¯t¤ß} Ì²ŽÅîéŸVb¢Tšz·Dç ±·vã@Ïí=”rPºþ—§¥duõ—Ÿvz{Nël;—a*CtEXtSoftware@(#)ImageMagick 4.2.8 99/08/01 cristy@mystic.es.dupont.com‘º!¸*tEXtSignaturec70387830aa4ecd5a4a32a852283b3d6øP¶tEXtPage24x24+0+0r[ 1IEND®B`‚libzeep-5.1.7/doc/images/draft.png0000664000175000017500000004205614176701531016654 0ustar maartenmaarten‰PNG  IHDRŒ¶K°ZJgAMA± üa IDATxœíÝÛvÛ¸–…a<ËNºG¿ÿ3öèŠmQ<¢/Ö·¶’€ øW®TB1rÌ©,ÚZ«ˆÏ4MY–m}[2[ߟ躮m۾﷾‘-å[ßïu]w¹\¦išçY)U–åÖw´ *i@\–„VJãx¹\[OSI"rÐbùâ€õ´¦q ‰ ½È󼪪ªªÂßÕ†¨¤Qø&¡•Rã8*¥´Ö‡ª§ iÀö¾Oh!ãÞÖÚãÔÓ„4`c·$´RJk-õ´Rê 9MH¶tcB/•Ó„4`3÷&´8NNÒ€mô}ÿ@B‹ƒä4! ØÀc5ôµ#ä4! mM }mÙç$Õœ&¤Aõ}ß¶íú„Vè÷fïn@8z1 Ã0 KZ§„„ã<¡•Ryžc’Úsœ„Vì8ðÚ BàØÿýßÿÍóìöšLhÅp7À­þù‡„v…8Ã<´[ wÜ`Ú9*i€$´„4`-ÚB° í! xb^Ñ8x5´oTÒ€GÐÒ€»‘ÐaÒ€û0 sÒ€;ø«¡ëº&¡ß!¤·b”;0†»7¡†üÌkBC}Ž÷ðb$ô÷xkßñ”ÐeY’Ð?âÝ|‰„Þoàs$ôæxŸ ¡cÀÛx„Žïà?ÐñàÍü Þ/À¿üù󇄎 {w”¢†Žï€:R¼qptþüÇÑí5Ih'xïàÐHè˜1' ÇÅæ¡•RÓ4EAB;Ä[ ÇòÏ?ÿøHh¥”ÖúõõÕÓʼn€ñ1}ÍZûòòBN»BHÀQø˜‡þˆœvˆ€Cð4ý)rÚBÒ2¡9í„¶Ön}|ÏCCkýëׯzA=í •4Äew ­®êi¯}dêxõ4! ùóçÏîZHNWUŸ·C„4Äb/óÐ_a~Ú9B¢°÷„ä´[„4l/„ä´C„4l,¥„ä´+„4l)½„ÁrúÏŸ? ç4ë¤`3©&ô‚õÓ+mÿ-€cŠóä ·8z%*iØ@ò5ô5©§»®›çÙë ¥WOÇõ€#xyy9NB«€ûœ¤7?Ý÷Ò6ϳóí3cNh¦Lkظw¤ßNH•1&Ïó¦i´Ö®.yB Öe=€9iØÀ4Mã8¶m»ršv/ ½ ßû.ûø¦@b²,Ëó¼®ë5ẻ„VÔÓw¢’€Í¬©§÷˜Ð êéíï[ Éx¸žŽm=ô½¨§oD% »·ž–º®kß çõôvù R"õôeñ2ʽ÷„Vìï}B¶·äô÷ë²v=ý©%§½þö»~šánˆÅ4MÃ0\.—OǽÓKèkmÛú÷¶Öþþý{_ãÞ„4Dä«ùédæ¡¿ §ÕÞæ§ü8Z¹9ɧýÞGHh¥TÓ4ô{¿C% μ¾¾Ê$ëʤ¹®§’Ð êék„4¸!§OºÊTÉé®ë²,;NB rzAH€×çC»Êéyž§iʲ,ÉN±ï‘Ó‚€µ®Z¸Êik­«Ã²v‡œV„4¬ô1¡ÅÑæ’} §7„}•ÐJ©yžeѳïŒIýÞ„4<蛄äôz’Ó¾gå£ÍiBñcB rz½¦iªª:æþÞÌIÀÝnLèóÓë…™Ÿ~~~.ËÒëKÜ…JîóòòrWB+êiÂÌO¿¾¾ö}ïõ%îBHÀž¼$§× 3?UNÒp«•íEäôz2? ,’œfNnâªXk]–%óÓkg~šJ~æ°õ×ZK=½Òqæ§ iøÁbß›çyÇqË|ØArš€ïøØæBkçyžç‡Ý—Û‰#ô‘1' _ò‘Ь™v«mÛ®ëæyöú*[ÍOSIÀçHè]³ÙVýÞ„4|‚„Þ‘óÓZëMršánx„Þ£$×eQIÀ ¡w*É~o*iø·{Oθ Rbõ4•4ü‹óõЊ„.±uYTÒ £ÜiI¦ž¦’_;–Ð[I¦ž¦’ptÔЩJ ž¦’phž:Ïszs ô{SI8.jè#Øu=M% à HèƒØõü4•4€#b=ôÑì´ž¦’p8¬‡> ÎOÒŽ…QîÃÚcNÒ„„>¸Ýå4! à(Hh¨½å4! àXEÓ4UUí"§ iéó´ëgžçMÓÐ{T×õ.rš8£Ü$ô®Õuÿ¸7! eþF¹IèÄ??MHH£ÜøQäóÓ„4€4ù;}’„NLÌóÓl Ažvý¤†NØåréº.¶}C©¤¤ÆÓ®Ÿ$tÚ⬧ iI¡S ‹0§ ié S +Å–Ó„4€D°NDµ~šÆ1)`”nEÒGF% `÷Hh8ɸ7! `ßHhxCNÒvŒ„†W›ÏOÒöŠ„FÛîïMã€]bO1„´U•4€ýñ±§ë¡ñ­æ§ i;ÃÉØÄ&9MHØ ŸÓ„4€Ý`O1l.XNË?uBÀ>°/7" §ó<·ÖZks¯®°Ú Q©ëZ)å©ß»(ŠªªŠ¢ÐZSIˆ yª§¯Z1Ü r$4¢å|?²w ­ØÌ@ÌHhÄÏÕ>'ZQIˆ ]p2îýiB+B@œHhìÈÊœþ*¡! B$ôÓ49÷ð£‡sú›„VJ± @\Hè5Æq†a†q›¦ÙúvŽåuYß'´"¤D…„^Cºm[¥Ô<ÏJ)r:°»rúÇ„V wˆ ½ÆuB+¥æyîºnùOsã¸÷- ­¨¤D‚„^ã]B ÉiE=œÔÓ}ßu ê ­i1 ¡×ø4¡Å<Ïrž9˜ä´RêcNߞЊ°9zoZLÓDNoâÓœ¾+¡! `[þº®kZLÓĸ÷&Þåô½ ­i¢†^ãÆ„Œ{oeÉi­õ½ ­Ø»ÀVHè5îJèE–eeY’Óáõ}/‡—ߕЊ° ¯£Üyžøác -Èé­XkïMhÅ:iá‘ÐkHBŸÏçÇþ¸ô‘±~:¼ZQIÌGBk­‹¢8NB¯XcLUUÔÓñ£’ ½Æ8Ž}ß?\C_“>2êéøÒ!¡×úr¹<6júãÞ»@H„^ÃÕ(÷;Ó4MÓôÕÖ•ˆ! À;O }¨N1%ožçEQ$ÿî! À/5tÓ4ÉÌÊ^îoäy^UUUUί ‡èîà£Ükx­¡Iè] ’à £ÜkPCCÒèÐi£’°™ä÷÷–õÐ>jhú ¨¤l,Õzzåvþ˜e”û8¨¤l,ÉùiNÒ¶—XN“Ðp……drš„†CÌIˆÈ<ÏmÛîw~š„†[„4€¸ì7§eµ ‡îcLÓ4»÷^NŸ$¡á! :»ËiO»~ZkIèƒ#¤ÄhÉéø÷9ñ·ëgQ$ôÁ1' ^ñÏOÓ)¯iQ “ÓÆ˜ß¿ß›Ó$4|c¸@ÔÂÌOÏó|ï¸7 i±‹°lésžÐY–‘ÐXÒvÀÏyY^χæl+\cNÀnë#{~~βìÓÿëu”»,˺®Ý^»F% `7‚{¿¾¾~ú9ÀSB[ke”›„Æ;TÒvFêé¾ï½>¾>ÖÓžv,QtŠákTÒvFêé²,ÔÓÓ4-ÿé)¡éÃ7¨¤ìRÈùi¥546AHØ«09­µ®ªªë::Å! `ÇÂÌOû@BãÌIرe~ÚëúiçHhÜ(ßú`Éi¥”ïqoWHhÜŽJÀî…Y?í »Äþn±‹œ&¡q¯xÿ5À]"ÏiˆñŸ2<&Úœ&¡ñ˜¸þÀJæ4 ‡Åò\‰*§Ih¬±ý¿`pnÉém×O“ÐX‰uÒÒ´ùúiëQIHÖ†õ4 'i)ÛdßP®Ò8§Ih8Äœ4€ô…œŸÎ󜄆+TÒ!غ¬¾ï§iòú8BÀQ„Ééyž_^^Èi8AH80ýÞä4\ÑÖڭç¹m[ßóÓÆ˜_¿~eYæï%<*i‡Ã¸7ö‚pDä4vánÇ5ÏóåréûžqoĉJÀqcêº.Ë’zq"¤Ú’Óô{#B wãÞˆ•40îHÒ 9(Ò@\Æqô}¾BN#6ÌIy}}íû¾,K9îP)åû4|f~Zkýû÷oæ§ñ=Bˆ…$ôòŸyžgYVU•1†¨Œ>2D‚¢ð.¡¯UU•繜 áu™®‘Óˆ! lVJYkµÖEQäy^UQ ãÞØ! lìû„’ÓBf¬}¶A=mÒÀ–nIèOÑ\ 9 ÒÀfNh¡µ6Æ”eYE–eÖþ0î­ÒÀ6V&ô5kmÓ4Y–IaMZû@Nc„4°‡ ½0ÆÈª-9+‚1pç÷Fx„4š„^H]×u–eEQ( k§ÈiFHA½½½u]æµd5càn‘Ó‰ ™Ð²jË£µ–šæ2WÈiCH„LèOITSX;AN# Baó„^ ë<Ïe/)²7¼¥½£ßÒ€w›'ô;²s™Öyž+ ëGQOÃ7Bð+¶„Ka-;—åyΖà!§á! xgB¿ó®°&ªï,§ŸŸŸeäÇAH¾ì"¡¯I[ÙÒ\†Û‘Óð„¼Çñíímš¦­oänƘ,˪ªÊ²Œæ²Û‘Óð¼°ÖÊÎb; 9­µDµ4„+šËn@NÃ9BðeÇ———½ÿˆÉ.(Ò_FsÙÈi¸EH¾LÓÔ¶m×u ›Œ{7M#ƒá üü!§á! xÔuÝÛÛÛcVk]E<o­•„–½Pèÿ9 WiÀ£išÎçó0 üYkm]×yž_.k­×Çý½¤§¬®kc ÍeŸ"§á! øÕ¶­¤ì½ÐZ›çùét2Æ ÃÐ÷ý4MñüÀZkeÜ[¢ZŽÅÄ5rëÒ€_ÖÚ?þ<¶K"°ª*­µµ¶ëºaÆq”ýœßêÃd \ZÁi.»&9= ƒ×ÅxZë_¿~‘ÓI"¤¿¬µRL?|…_¿~-uª„ôc¥¹WR÷Ks™ÖšÀXPOc BðnÇ?þ<üÇó<zzºÞ·Y¢ºëºiš",[—ƒ¶h.aêir:I„4àÓmÛ>–XRž–eiŒY~Qʲ¶m§iŠm\nFXË8'CÓx ! „Ð÷ýÛÛÛÃ?n‹ia­¦i†®ë¢jÿ^Èзl ~ðð`~ ¤¬µooo}ß?|…ªªžžž¾ú¿òèïº.¶ÅZêoa-càÒwØæ2r÷"¤¬µ}ߟÏç‡âŒ1MÓTUõÍKÌó<üõèúu}zÇ1ÇÀeÆi yž_^^Æq|¸ˆ,˲išï³ÍZ+diu„«w]·æ eY>???–²Ëø<Ïã8>|^ÉsIšÀ¥¡=áÂ:Ìü´"§÷‰‚’yâ———5•“Öút:•eùp5,·!MàÑFµÈó<ùæ2êi|…B“C¦W®*ËRN±|ø ÒD6Žã<ÏçóYýÝj4NÒ\&ýeI6—ÑïOÒÀú¾yyY™4·/ÇúÑ4M²a™4;¹¦×;—©äÆÀÉi|DHbzå¾`EQ4Mãêi+…µ4Ë”yÌcÌua½õí8Ãü4Þ!¤m¬\‹¥”ÒZ?==•eéê–„µvÇqû¾÷+i­¥ \Þ„4ÒšœÆ5BØÆ<ϯ¯¯+›¶Œ1¿ÿöN²FKvA‰v'ðE–eRXgY–@T‡Éé<Ïe-Ÿ¿—Àz|Œ6“çù0 +g¦û¾—ÎgWw%äÙ]×µ¬Ô’>p·/áÌ©_.—º®%°w}Жœ ._{Êé,Ë\54À+*i`3ã8¾¼¼¬ü,ŠâééÉw&MÓ4ϳÌXKõsíºÜߺ¬,ˤ›2:~„4°‰½óù¼2Hš¦Y /dëïišú¾—IëÈóÏS×µ´˜©¸?U|ÅǸ7 ½/ w›‘ÕׇÇ0 r:…“»úŠþ«( ‰ 9b+Úú²þ{9½CVmí+ª—qoWG™‘лC% lìíímÍ.¡J)kíóó³„P0RU/Mà‘?Id·2iÏó|_Qíªž&¡÷ˆ¶$‡^œÏç•u’œº~×LY]}¹\duuœGa.äÞ–-Á#¿ÛkësÚs:HèÝa¸Ø’ ÆfY¶2¤eqsø>)y9i/ŠBšÀ£ýè/7v¹\´Ö}ßËY[Zëøske¿75ô~QI“búõõuåuò<ÿýû·“[zØ<ÏÖZ9bKÒ:æRUâ¹,K™ÑünÕ£õ4 ½k„4°½q___§iÚE›÷¤›Lvïû^ÅÝ®e­½ŽêÈXß›Ó$ôÞÒ@.—‹EµÆú£±Ü’#¶Ú¶uÕœì•4ÛKs™“®{OnÏiÙ±DÖ‹‡¹78Çœ495yeûn×uEQnóþ†l -3îRXÇÕó<Ë(ýRX—eáøë²Hè4PI±p²KŠéðmÞß“çŒë7o CŽÅ”íP"ܹìûzš„N•4kmUUÃ0¬©5µÖq- 'gUåy.Û–E¾ºZú¤g^VmEÕ\öM¿·lµFB§Jˆ…ì%VkÄ63ýÑõ[ñw–)¥¬µÒUUIUÉ ¬§1MÓÐÉ ’b!Ûú–#¡b~F/GlÉøü0 2„Iò}¤µ–#Fdƺ®kYà¾õ}½¯§åN•4‘išÚ¶íºne\Õu}:\Ý•o2î-Û–y=AÙ!éÏó\šã¶ýx!õô4MeY’Љ!¤¸8Y‹eŒyzzŠ¡Ô»4W÷}ßu]ÌUµÉiY¬%…õ¶Íz²•ºô¸mxpŽán .eY.3µ“À‹§Ëé2×+{‹n}/?“7VJ—éê­VmI/zàE|S¸HM¦õªQ.kíù|–µ×ïÍ·qåøË}¶P7NÇQñ”íP¨há! ÄEk]–¥œ(µæ"J)©ðöxÃ0ÈÄêçàäM–¨^šËŒ1yžïî3¢Âœ4éº\.+¯SÅóóó.b× ý)kmñ—ŒgìâØPIÑYæWaã8v]W×µ»[óbY3½õ¸$ËH{_-{ƒo}_Ø*i F®Šé²,Ÿžžb®áÒ«¡?%­²D*Ë2ÆÀq#*i FNÚÇ”R}ß—e)ûqFHjèäZýÝdt iYµEs~D% DÊZûòò²~¸ªª¦i"̃ƒÔП’¡oÙœÂß ’âUUÕú †!Âiiç5´ìã±—‰íyžå”Y¯UU…5>E% Äkš¦××ו;eÊùZQÍL/bº,˺®§i’^-ÙËÅÉňgç2Ćâe­íûþõõue¾fYöüüÉÓ_zW\Z*Q9ë³ë:Y²ìêU|³ÖcŠ¢Èó¼,ËxÚ¶i jÃ0œÏçqW>²›¦YŽKÚï„^XkåÐ*‰êø7¿&çvÈ)a‘|´ÂVi vooo]×­¼Hžç§ÓiÛí}$tQß·ÅÉ6æmÛÊ4°«—@6,«ëšM¹Œï=;i[Ù%Ç!»º¥«¡?þ69LŽØ’ F\݃Wò©BN‰ÞÑ0Ü"¤Ø9Ù[vGÉó|“âeµ•« Þ˜Ð׿_k}:Æq”C»­µ‘#J+Yžç$ô‘Ò@ìŒ1MÓ¬ï…–ÃšŠ¢üÐw¾úÞ„ò·Îÿ’PRª:¹+·äˆŽ¢(X—up|ûݼW†œŒ÷†Ohçë¡Hèw²,“ÓG꺮ªJEvúE–eMÓÐP4Ž{ÑuÝúµXZë§§§`»„FRCO¦iêº.†ªZNHhB؇yžßÞÞÖ7^ÕuÝ4M€ÂÑߎ%>ÒK¦¨¥èßpuµÌC“ÐXÒÀ>H„´m»ò:Zëççç¢(œÜÕWö•Ð ‰j™«–mËBƒ“Ðøˆvcžç?þ¬\I¥µ–‰XI°Ó„¾&CôRX‡'¡ñ)þ5{"F®¹‚TŠþ Dç ­µœÐJ©,Ëdû—§§§Û‰Ðø •4°'ã8¾¼¼¬_‹u:ä8W7&¨¡ß‘C$e w>NB㬓öÄSUÕårYsIyžÝî F ýñ”RyžËª­yže ÜÕöm$4¾GH{bŒq’¬}ßEá0¤Ó«¡ß‘C$1ÏÏÏKgÙÊmËHhüˆv¦ªª¾ï×/†ÁUNoµ/wxRXËBó¢(–F¸Ô²ëglGD…vÆZ+Gn¬qÕZËŽë7_jè5¹mB/䓳Ÿ‹¢†AÎļ=­—„æ$J|/ÒŸ_‘qW'½K—Ëeåètò£Üß“ïEUUOOO§Ó©,Ë[Þ‡e_n?¢»ØYFõöö¶ò:Y–É!ÓEþÁú#YT-Uõ8ŽŸ¾«ìú‰»0Ü ìÖZŽIž¦iMI-ÝOí>FB”e™,°VJɦåïfHhÜ‹JØ«¶m×ïjŒyzzº7§Iè[,çvÌó,ÓÿMÓ0»PI»d­-ŠBÖ­¹ŽT{wx“Ð7Zή–ÕÕUUI©½õ}aOi`—¤e)˲õ;K·m+Ê·üfú^˸µ6Õ¿#üá_ °WZëõ‡NÊ¿1t}ì)VE ½6‚­ïûÃ?`ßœ:ÙuÝ¿ÇÓ®ŸMÓ^ÀWøÙ@ÔìÚúv¢“e™ì~µ’Lš~óHh`ÌI#"²¬ÈZ;ϳœA$[k-7ò…ÖZ~›¿SwA~X¹%§¼ÛÒüñÿú˜‡.Š‚„~DHcKKOÓ$t(¥–Ó%9ä u5«gŒ‘Þæ¥yJ]EøÑHSÒú}³»®Ë󼪪w¿NBb4¶!¬”êºN¶Ôx¬,–zZ‚JjJõ·ê8¬µ///+w϶ÖÖu]×õõÇØ•4‚’†A6yX¢Zbõp•¹êyž‡aM¸deꡤZkó<—ш‡/¢µîûþº’&¡ÍQI#™õìºNBÚk½[–å2x{„ÂzÇ———•?ÎÖÚ²,ŸžžŒ1$4B!H±+}ä à IDAT)øÂgñWòUµµör¹œÏç•ol–eOOOr5Ø! ï$˜Û¶Ýd•LZ7M³œ|ª¾ï___×’y}ˆ! ¿º®ëºneOÓzÒ\&ÛOn{'þXkÏçó-Û’„DBk¤\X`CÖZ9XW èÍg…­µrʯ¬Ýʲló[òAÖbI/^ d×Ox•4Ü“Ï}߯_¼ëƒÌRWU•^NÏóüúúºù¸… †Ö£’†cÖÚ¶mû¾§ž{Gz˧iJ/?Œ1UUÅÒ$4à??pFúÂ^__å”û­oç;óç/¡åŒ&é:^ÿ¬—1ð¾ïû¾†Á_xü×ý×~Ïœ–·è|>;ùyÿõë×~Ç€}a¸ŸõÐnÏZ›eYY–eYfYæêâ˘¹Ll;ÔýôUd˜w§¤ ]¸jëû^zÖ_ À÷ø1Ã{RC;O£º®O§Óétr˜Ð×ʲ¬ëÚÓ ´4¬ù¸r0r䆓Kãèä:~DHã?xÚSìt:UUU–¥úÛæƒÌsÿþýÛG‘7Ž£“é­H1ídÄ~š&W#ç¾GHãß|ÔÐZë_¿~•eéiÊw¤“ùùùÙÇGä^I7€“¿‚4د¿€ïÒøçb²½³4ž¿Ìóüׯ_n_ÔZÛuÝ®“ÉZ+õë/%ëßÖ_À÷i(åa”[¶w>Na 褞v˜ÓRšï:¤—}cÖ_J>²Ó€o„4ÜrËÜp]×Û®Yʲ¬i‡”…L»ñ6Æ8yOd8ÙnýÕ|…>:ç5tžçMÓlžÐêïAû½%™v]L«¿ÓN.u¹\8uˆ!}hÎkh Å<Ï#YD++³î¼!士«mÂá§ -‘‹âIŠM8ï‹-¡…/áêjËš®.¸‰¢(œäô<ÏÃ0ìýÝbÑÃ!9OhÙ+#¶„eY:áa¸jSJMÓ”ÀD+ºç)ð4gB ‡ËÀäèL'—ÚŠœ8éªÍ[N])EúH…?Î÷åŽs”ûš´JeYæd`VNÉ\mYk˲tòÏàr¹Ò€'‘>UáIòb_qX;¦±îH¶fsuµ½oóD+ê+Ü:H§ØWœœŒ¹\'œ–åì믣µ– SxO€ØìàÙ 'žÐJ)cŒ“L’¥Ò{Ÿ–V®ÛÇœŸm @ÒAB«¿›b®¿á”¢¨ª*'k±¤˜¦Ípn7OX<Œ„^8¹g é4†våÈ ';æyÇ1·ˆÇβ¸ ýÎúédkmÝÝB™v56Ð÷}2ï ‰]>gq#úÙÍÛÉu’ô–]hœTÀòñeïÛ¦QÙ壷8Ôžb7r2-Àf&ïdYæä³‹µör¹0â 8´×§-¾ç£†Ž|O±­ÏWiŠN)ŠŠ¢p¸½y×u)½9À¶öýÀŧåþ†1feNËf&)ÓÖZÙ‘ÍÉ¥dÍôúKP„tzHè­‰‰ç”Zýms5<0 C×uë¯@Ò‰!¡o±&bÝæY<´Öu]»ÚÛdÚ¼'Òyò‚„¾ÑÊ|Õ¹ºŸH¸j}WJÑã ¸’ÔÃ÷ÈHèÍó¼&?d¸;±2ZdYæd÷1¥”µ¶m[ŽÜÖKêù{X¬¶ºÝ<ÏkþR2ÜÞÛ"òˆ£m[ú.rÊäš+aüÖá§:È€•Ò|AÛ¶mÛ:¼`ò -eôš–3£R}„1¦( WŸEº®c-°FÊ›„‘ÐY?úº~òøIÛ ««õ}O›7𰔟ȩ:ŸÏ$ô¬µ+‡^Ýîq-Y0íêÃ0 ɬüIù¡œ$æ¡¶ò´ckmòoÑ¢,KWíc²fúsù€Gyè¤QoÓZWUuœ¢°( WÙišX3 <&ñGsJHè5¦iZ3!m­Í²,áÒïh­‹¢0Ƹ:rƒAoà1é?Ó@B¯1MÓúW‡#À» #g¦‡apr)àPÒ@'€„^cÙelM%W…«}­÷Âaû˜ÖzGΙþ3zïèå^IkÝuÝʾncŒ«cwÄá‘Zë¶mÙØ¸×!ÓûÅ®ŸëÏç•ûicš¦qu?;"3Ó? Ã@1 Üå(Oê=b”{½¾ï׃LE³ïÉaû˜µ¶ïûõ×å(ëÝiÛö|>; †&ô4MÃ0¬ßîª,ËŽu kmÓ4®þú+{ì:Êóz_¤†v˜Ð ŸýaÖGB]×Gk»&«Îž_éäcpzdï…QîTχþF×uçóyåEòlB;Yí##Nniïò첫Oi­ëº^ÿ©EkÝ4,¿vrc@Úø9Ù˜ìúé¶b³ÖÎó|¨JEþÊ®Î->N‡:KãFòÙeå$¡ù܈'Ñ–Ú¶u»ëç¢ë:©Tò4´Ö¾½½­¯¡­µRCú±ÉZ+¿.Çu\ ÿ\~q9Ôrù#ËûeŒ‘)€Ç> ‘ÐÀéÍt]çv=ô5kírñ䟉ó<¿¾¾®_Õc­Íóüã‘”ËÈÄ<ÏÒ’¶¼–µÖZ+gÊr?Y–É/j­1׺ò…ü¯ÝŶ,`wOx !½ y çyîoc‡ƒä´$´«·±,˲,Õß`VJõ}/Ù,9½‘ïêæå×åëŸ$¯3[¾)ò@~1þj[ί¼w;tx؃#WXÏZ;Žãår†Áß«¤ý|t›ÐUU5M#ß—e—é•QE~î$›•RÒå·Œ'ÇœÙÖÚ?þÜ5nq:RýøFHo)LN«DŸ’nZ)U×õ8ŽŸÖÁ¾-¹Ä³DµÔôKGØr˜Õù|¾åÑ!=áG>¡X‰áî-É㸮k¥”לNoÜÛyB+¥œ·Ùßny]c—O RÊËæá²1çõYÞêíÿŠÅ ’ÞžÔÓmÛz=x ¥qo ­e`|écÝÐä?·*²/—Ë÷‹ûSú÷lˆŽóÓ·;TB¿³t«ÉwPzÈó<—5cRd‡ ìaÎçó7óIΰá1Ü…0ãÞ ô{ÏóüòòrØ3”–ºYFÅ—þs¥”´‹/­gÛþ2»(Š<Ï?ýF¤ñYˆ•tD¨§¿wäúGï&ªË²”Ö3Y- ¸¶´×½¾¾¾Û@f¿ÿº€8QIG„zú$ô÷®X°Õß"ûz}—1ÆI뙿1fš¦å:$4à•tt‚ÕÓ;ZsðQî•®#YN ’ïþ²!šz4°‡axyy‘¯IhÀB:FŒ{_³Ö¾¼¼PC;±ÌRË0¸L]KëÙEö4MmÛö}¿—KÀîÒ‘bŸAB‡!%µDuQêoëø­grH xBHÇ‹zš„iYß%©,G>ËØø²ÉÇÀ–c¼—­È¸EHGíÈ9MBoèzT\)u]dËðø»“E"Ù²H!»cæô§8ÀŸwI,E¶tJßOX‚»®Ë’š„ŽÇ»õ]Ã0\Ÿ¶ ÀBz•ÓŒrGN¦¨eÜ…2ðÞ‡ƒä4 ¿ØfF€´ñAx7–œ–2žXkÏçó0 ›œ©LBGNvA!¡`¨¤÷$áó§7IhY<ϳ Û^·G-[RËt/+jh` „ôÎ$9[–É!Q2Ÿj­•ÕD×냗ÿœçÙþ%÷6Ž£ü§×ûŒ54!½?‰å´ï^nIb§UJÉ×êæâx‰d‰m9Rbš&In òq½ž ¹¹}íô¤„uÒ{•Æúiߣܲ+u]×ú¯õ×\JmùÙ‘´–…IJ)ù:±‚»iØ!½c{?/Ë_BË*Þ²,ó<Ïó@ÃEò£$sØó<Ã ß )ÁÃ܃sÔÐÀ¶é}ÛoNûKè,˪ª’z«ñçë‰m­õ0 ó{š¦Aˆ !y¦w]×÷½×z`Mާ„.ËRÚÄÒHèw$°µÖ2¾´ž-­¸ý[“Ð@léÔÄYO“ÐN\ï€f­íû^Šì¥ø^ó>Ð@„é…©§o¦“Ð>\·žÉ`ø²&ûjˆÛ‚&Hö •¯ýå´µör¹(¥¾²“О,ËÌäT´¥È¾^ßµÔÙêÛ"›„¢E%¬êizïf²…¶úÐ.NB1#¤S¶mN“БŸñ%ª¥]|Ù „bFH'n«>2:N×­gêïa$4-B:}áëiz"Ü‹À;4Ž¥/pYQçó™„Žï$?*é£VOk­ŸÌHB8&*é£VO;ÿØGB8,Bú@Âä´[$4€##¤e_9MB88Búpö’Ó$4ÒGN“РéÊ9§Ih„ôqÅ™Ó$4,éC‹-§Ih¸FHÝ’Ór¾á†wBBÀ;fëÀö$§ëº–“‰7ABÀGl Š ³oè§HhøÃÝø—­æ§Ihø ! ??MBÀ7˜“þÜrPÄõËáNÿo2–ùé²,}¿–1&Ïs¾B%­–¸•ÿœ¦ÉZ«µž¦iùõ71Zë,Ëä÷cŒ1J)­µ1FþàÞ#'ظ÷4Mó:Ü“qžgcL×uÓ4 à ±ÔÊ_UÀ˯ú®G¼­µ]×-ñ\E–eyž/Õ¶‡¿/Áêé¶måå²,ó÷*°G‡X‚%ð8ŽÖÚ¾ï§iZŠfÁ)oìRU—eiŒ‘¯½¾®[aÖei­eœœ€k‰‡´$±Íã8JNoò¢EQcªªZFÈÃßɽ‚­Ÿnš†œ€k)‡´”ËmÛÎó<Ž£ŠfÀ9Ë2©e{ëÛù9 ›H3¤¥t–ê9Ú¿ µ6Ïó¢(dê:òšœ€ð é®ë†aèºNES:Oê麮#ož ™ÓEQìbŒ¼J'¤eÝÔù|–%U[ßÎÝ´ÖEQ”eYE´Ÿ-Èi)‘‡à0 }ßã¸ì@²;Òy> CY–yžWUaxàuYŠõÓŽm÷O@i {{{KcH@VZã8 CÓ4²AÊÖ7õÈifßÃÝã8ö}¿ì†±õí8–e™ €G˜Raƽ­µ§Ó‰qo‡µã–„sXÓ†´Ö§Ó)ÏóØzÊÈiðm>™©=ŸÏÃ0ìwúvó<¿½½ÉyŽUUm};ÿloƽÖΞz²}ØårñÝ]Æ—‚uš¦ÓéOCYÈùiò!§ÊžyÖÚa.—‹lv4ó<_.—išd™V$ eÁršó²Ðnžwó<Ë.%ÇLhõ·¤†AÚ뺎d–š~oðd»yžÛ¶•|Úú^¶'{’Ïó|:Œ11 }/9-£þ^è|>7M£Èiǰƒînú+Ƙ¦iâiü–~ïËåâ»åžýÈDì!=MSÛ¶;Ýé3­uÓ4²¢zë{QŠœ§¢éiš^^^ˆçïÉPsUUeYn}/J\?-çe‘Ó¾‘L[k­µ1,¤3?­µ¦ß@ò"}ºÅ“ÐËHÃÇþ¬xÖ++¥Æq”Ié«Ú–ä´¾I¿7<,ÆGÛ0 oooÁZbXâV´Ð-k‘µÖÒS-_ÈŸšç9ªœV7ý¨ªjó®oÖeÀzÑ=×.—˲½TÆeYJ¨dYf­•„»oõ·n–Qe­õ<ÏÛã8Ê>hó’Hèät×uÆ­u ç”0î àÈœ=Hè`|ç´\<ÏóBZýݵF¾fÜÀ¡¸9Ž‚„LZÜýe‰µöõõ5Ì)×7*Š¢ª*ß“åmÛö}Õ_À‘9xʓЛXêéa|ì&ÍÞr>·ó‹?&@=͸7€¨¬} ‘Ð*ËRV¢{ªü¤‰¬ªªxeÜÀ¡¬z‘Лóº.ËZÛ÷½|ˆç1rÀq<^!‘Бùé,Ë|lÃ>MÓù|Ž'¡óÓâÁ*„ŽJY–ó<ûônÛ6†íB¯1? ੤IèÕuí/G‡að}²õ¤žö½‰©lAïõ°8øÊÝõg[Eët:i­}œÃ1Žã0 yžÇÓA&–zºë:×·Ö6M£µŽmÀÀAÜ÷Ìõw¶ íDÓ4žÞF¯g{¬QEY–žêé¦iʲd¬ÀVîxúxå–c—HhW꺞çÙÇè´œ‘abyª§ëº&¡lëÖóÐ{¡µ–²ÒyNOÓ4M“1&¶Aoå:§e”›„°¹›žAþZ–¹½ìÁ-'R8ï÷–=Èb8ÅòSsš„‰ŸK"¯ Ûž4HNû8!C–MGÛêìd~šQnñøáI䯗›„öJk-oï<Ïn¿}Ó4㸔­±YYO“Тò]%í¯—›„@rÚy1-˱Ü^Ó­‡ëi@l¾ i½Ü$t0Zë_¿~9Ïé¾ïËik- BŸ‡´×^n:°º®ÝöcÏóyvË<4bi&²²,Ýî™åã3œs·ä454€˜½iæ¡Ó“eYQn½çyîº.òbZÝÓÔÐbö!ͯÐâ—w]çi£G¹¦µ–³xãÑ4Í4MÏÞèû>˲ÜøTQr«{ù`ààŒ]?}ßûèÇÃdÅ‘ÃLóéodYFBØ óßÿýßþ®.E9­µ1¦( WÃnërÀ5£”úŸÿù/@NÇÆSU•ÃoÇ^ÖbÀîükØ“œ>”,ËN§“«oÇŽz¼`_þ=7 §½ÎãvZë,˶7;? Þí8æ;§‡a §#!ë†\JL;¹àÚû._êéãp¸lšJ|ød)Ž×œžç™z:Czz¼À¹Ï×Ë2î}²%œ«µX|7À¹/7µ §À“繓ïBß÷,Ä·¾ÛyŠùéä¹ÚØDkm­å[ ný°=$óÓiÓZçyîd-=ÞàÜÏ{8SO§-ÏscÌú÷ßþåä®ê–VÔÓ©+ËÒÉ‘Ó4ñM‡n}4ÓG–0Ièõoþ<ÏK ÝQ?‘Ó©’ö±õ×™ç™bºo“œN’1&˲•E°µvžgŠipèî™Hr:=ÖÚ¢(VNKË*,Å®&àÎ#Ïer:1ZkcŒ«ÕÒNn   iź¬eY¶þ Ÿ¦‰ánpåñNÖe¥DN˜^¾_àЪiHƽ“¡µ–Aï•×áÌJphíC™œNÆúJšÇÀ-ûL‘ÓiXßö%³Ñ|§À!­ÈéT¬,¦e©´«›¸ iENïŸ1ÆÉÞ|Àg!­Èéý[¹©§«õÖá2¤9½gë»»i·‡´"§wËZ+ ±Ö\„%XàûVìG¶[+Ka†»À-/!­ØlŸÖ¿Ÿ$48ä+¤õô­¯ƒ ipÈcH+êé]‘Ó ×¼™Nfµ ¿!­è#ÛkíÊ3¬ä”B\ñÒŠœÞ ©ƒW^ÄÃ7\ Ò*TN³'åã8®œw BZé#»\.”q‘Ùèõ•´“‹D¸Vô‘ELÞ½•ÉóÜÉîßú‘ʸw„\}¬Y¿±(àÚÔ9͸÷½ú¾Ÿ¦iÍ´Öyž»º€Ú$¤ýÞ‘Y¿øJ.’ç9ÒàÐfƒ“Œ{Ç£ïû•ÒÖZúºÀ¹-gÃô{“Óß›çyå@·ú;Ö]…“[ˆÛ|ô{“Óß›ç¹ïû•‘½Æ˜_·¶ïÅ¥žÞ$ôú7Gk]–%ÒàÖö!­ü×Óäô§¤ðÇq}ËÝàC!­Èé-h­»®Çqý¥ØÆ|ˆèÁJNÖ÷ýúÙh¥TQ´v€…´"§’µÑëûº•Ryž³ øWH+r:”qÛ¶]cLUUë¯ø(ºVä´ã8^.'—b—1ð'ÆVä´O²|ÜI¿˜Rªª*ZÆÀ“x¯ä´ÖZkm×uN6©ëš–1ð'ÞVä´Zëóùìä¯,SRF€?±?aÉi·Îçóʳ4EQÔuíäR€OÅÒŠœv§m[W eY]×lÖ ^í ¤9íÂ0 Ã08Y-Çicèë¯öÒŠœ^g†¾ï]utk­›¦a6|ÛÓs–œ~ŒüÕº®suÁ¦ihê€öÒŠœ~ˆÛ„.Ë’„€0vÒŠœ¾Óår9ŸÏ®Ûzz#ÍIDAT®¦µ.Š‚º Œý…´"§oæ6¡•RUU±S7³ËVäô ú¾w›ÐeY’ÐÒ^CZ‘Ó߆Áá<´RÊSÝÒ¾Ÿ¹äô§†a¸\.®\)¥Œ1eY–eÉÂhiß!­Èé–„v¸˜1¦iÛ}H+ÿ9ÝuÝ^rÚSB???“Ð^ !­<ç´µvõ´§„>N$4l"‘V‡÷–„†ÁaBk­åÄhB6‘NH«ç´óN1‘çyQì/[I*¤Õ!sÚÇ(·ú{\4 J-¤ÕÁrz†¶mÝ&´µVº‹¢puMÀ iu˜œ–zš&·5´Öút:‘а¹4CZ §=r+¥žžžØþb ?â£ò¿ÿû¿þ.®µ®ªª®ëð›e’ÐpÉVÒ"ÉõÓþºiš²,Ý^ð°ÄCZ÷nÛ6XNûK說Ø¢’~H+ÿ9--ÖrÚwB³à ¢rˆVIä´¿„–®hç€Ø$Þ8öŽ×>29q¹i}d¾kh"t”JZì´ž&¡à˜ŽÒj‡9MBÀa.¤Õ®rš„€#;Öœôµøç§—Ó'Þ˜ ¡`ŽXI‹ÈëiO§O*öã¸!­"ÎiF¹êÈÃÝ‹ØÆ½åˆCWÒ"ªzš„,i¥¢Éiæ¡×éÙ<§™‡¼ÃœôØj~Z"|š&° ’þ›ÔÓRC“Ѐwé÷ç4£Ü€¯0Üý¹0ãÞÓ4‘Ѐ¯Ò_òÓY–Ykéå|…þŽ×œ–w^kíö²$4$ƒþלvŽ„€”Ð8ö¯}dn‘ÐBúg»ÈiÒCHß$òœ&¡ I„ô­¢ÍiREHß!œ&¡ a„ô}¢ÊiÒFHß-’œ&¡ y„ô#6ÏiŽ€~І9MBÀAÒÛ$§Ih8Bz•À9MBÀ¡ÒkËé²,Ih8BÚ9]–eUU$4 §`9ãï¼,F¹à˜¨¤ñTO“ÐpX„´KÎsš„€##¤s˜ÓtŠÀÁÒî9Éi:Å„´+sš„(BÚŸ‡sš„BÚ£rš„,i¿îÊipöîÆœ&¡ïÒ!ü˜Ó$4à#B:orZ:Ïó÷ˆ!Χ9½$´Ö:ü-bFHõ.§IhÀ7éЖœ&¡ßã¨Êm¼¾¾’Ѐïý?`uüÐð«ÎIEND®B`‚libzeep-5.1.7/doc/images/home.png0000664000175000017500000000054614176701531016502 0ustar maartenmaarten‰PNG  IHDR€~+ÿsBITÛáOà$PLTE‹‰ˆC@>ÅÄÃ`^\&# ™™™ÓÓÒ¶µ´QOMfffÿÿÿ¢ü° tRNSÿÿÿÿÿÿÿÿÿÿÿßÎÎ pHYs  ÒÝ~ü%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬ÏtEXtCreation Time10/03/04ǯŒ nIDATxœcØ %Õ@bØcnb`­†2Â!ÌM a(2A‚ a ,ÞÀ 0L€2p .`œ01a·ónîÝÒð1ºÐ™lÆ 0&ÄX³Æ‰>•/qÚ#IEND®B`‚libzeep-5.1.7/doc/images/important.png0000664000175000017500000000132214176701531017560 0ustar maartenmaarten‰PNG  IHDRשÍÊäPLTE)))999BB1ZZ)ccBBBRRRkkBccRssRccckkk{{{ŒŒŒŒ9½½­­!­­9œœZŒŒ{œœcœœ{µµJµµR½½Z¥¥c­­k­­{ÞÞÖÖÞÞ!ÞÞ1ÞÞ9ççïïïïÿÿÿÿÿÿçç)çç1ïï1ÿÿ!ÆÆZÖÖRÎÎsÖÖcÖÖkïïBççcçç{„„„ŒŒŒ”””¥¥„­­Œ¥¥”¥¥œ½½„½½œ¥¥¥­­¥­­­µµµ½½½ÆÆÆÎÎÎÖÖÖÞÞÞçççïïï÷÷÷ÿÿÿ­ÒÃÞbKGDCgÐ bIDATxÚm’ SÂ0 Ç3Eñ1•¡ÀÔÉKÜPT”•‰F'µûþßÇ®Qïö¿ë]’_iÈK±B¥&ºF‚(å6àßñrúðcºŒ/‘Ñ´…\NÞÃh£°›* â2pã¹=…:©ôJí÷v•?°•¾ÿ 6Ôï| @}÷`ÿ^Û>ƒ¯µs P¿ÕvB¡É¨é@Ãd6"èo;g•`PsÎ+ÁÝÞÖs%˜Çǯ%@ÈS{4ñܾ•Už-µs"þ1чßÄ?øjª<`g ­ñeZÔ* Ô+½ƒÃ¦Ú2Ã_Yvì*ÿÁ¤è•lv¬~Œg Z¶[s“ôY[Ãa; =ùí/öoJĘ!¤f€þcl¯RmÌRCtEXtSoftware@(#)ImageMagick 4.2.8 99/08/01 cristy@mystic.es.dupont.com‘º!¸*tEXtSignaturec3ecc1fc5135d1e959695e569d213122riðIEND®B`‚libzeep-5.1.7/doc/images/logo.png0000664000175000017500000000552014176701531016507 0ustar maartenmaarten‰PNG  IHDRd2ª5~¾bKGDÿÿÿ ½§“ pHYs  šœtIMEä -4¡Ab#iTXtCommentCreated with GIMPd.e ´IDATxÚí[aLSW~j‹ˆRŠ(«*Bqâ J·‘9‡]Â’-G5¢(.§â5’%²°°Èü±e X5d§‰c2'›lÊÀ˜øCâ¦È3 ›” ¬Ž ­…ò|?¾ô„~·PDææÇ}’“´ç9Ï=÷œ÷¼÷=÷œs$ ÿL‘»@6ˆ Ù ²AdÈ™d¹xñ"ôz=bccÑÔÔ$÷Üß…¢¢"ðJÇŽãÿâÙgŸüŠ+D¾V«õÒ>ýôÓ”1~øô…B1jž/Þƒ€€y”? <–9~ü¸å'NœX®¾¾ž‘‘‘4 ¼zõª„×étÀäädy˜?Tà êf³¿ýöÛˆ†õèU*•<Ê'"¨7È”)SÆãiò#k" 2|Ik´áÏCdƒüÍR[[ …Bá•Μ93¢‡Áív£²²Ï<ó Ôj54 ^|ñEœùDðgÏž•ðjµš¨Õj}VÔÓÓ#ôF£qÄúóÏ?i2™DÙxñn·ÛËÛü¥¢¢¢qi<ذaƒÈÿî»ï|Þ³^¯ƒÇápLÌ›º¿÷ÓbOPõ«ÂÂÂÄ;ÊÀÀ€Ï2N§iiib­¬¨¨»víò*ÓÝÝÞÞÞ1ÇH›Í6.¯Ù§¯‰ÌŸ?_”}z|Aå«âÑ:ÜŸÁ‚‚‚|VÔÙÙ‰ÁÁA€V«•ðn·ëׯG}}=`ëÖ­())õæ_zé%ÔÕÕùmä;wXãk †‡‡û,ÓÓÓ#~‡††Nü´×Ÿ‡ŒÆO:ÕgE?üðƒøm2™$ü–-[P]] ÈÌÌÄG}äó:³fÍBpp0àÊ•+èëëóÛÈñhÆÚn›Í†[·nFlÿ„¿©ûó(áîß¿÷Þ{OüÏÌÌôâwïÞÇV¬Xªª*qGŽB¡Àœ9sJ¥+W®üõ×_Ø»w¯ßFŽGã«_|áí·ß†ËålÚ´iâÞC<(‚×ùóç%ÁÆ@LLLdCCïÞ½K‡ÃÁK—.Ñl6 mNNŽ—®¬¬ÌkY¿¿¿ß‹/--%ÆÆÆŠ¼–– ]zz:/_¾Ìþþ~öööòçŸæñãǹiÓ¦‡ÒdFF†Ðœ>}š]]]t¹\¼yó&7oÞ,¸øøxöõõMÌ,kø”Õ“4 IÒn·ûœ‰xx±J©Rù½dggÓét ÓéóÌÇd2yÕwᆇ‡ª‰ˆˆxhͪU«üÞ[bb"ÛÛÛ'dµw R__ÏÂÂB.]º”³fÍ¢J¥âÌ™3i4¹yóf^¾|YR¹Ãá³A–/_.Ñwww³¤¤„Ï?ÿÚÕ^²A—-îqoÚr ¿ÿþ;ôz½$?** mmm²‡LÈò/ƒì!²AdÈ™Ly÷Ýw¡P(ðÎ;ïü«vêÔ)äææNΠþþûï#$$ý=þ<>øà´µµáÞ½{Ðjµ8vìžzê©Çç‘e³Ù0{öìÇÞ‹o½õJJJðË/¿ ££ñññ½-û@سg°²²’$ÙÙÙÉøøx’dqq±×¡†ÆÆF&%%Q§Ó155•$Éõë×ó›o¾aNNçÍ›Ç={öˆÕK«ÕÊU«VÑ`0P«Õ²¸¸˜$™““C¼xñ"óòò¨Ñh„n4n``€¹¹¹ŒŠŠâœ9s˜-Y1Ý¿?Ðb±°¬¬ŒjµšÕÕÕ,//§N§c^^žDÓÛÛ˰°0Þ¼yÓ+¿½½]²G³dÉÑöÿÅhܘ—ß×­['Îb555Ñl6‹YYY¼rå oß¾ÍÈÈHþøãt¹\Ôétìèè I¦¤¤ðµ×^cMM ûûû©ÑhÄ¡±äädq^©¢¢Âë \JJ ß|óM–——³½½jµZèFâh6›988H‡ÃÁ^xÁgÃrssùõ×_‹M¦ââb~øá‡ìïï§^¯—”?{ö,—.]:¦Nû; 2øï!ÏÁƒææfh4áA­­­X¸p!Nœ8µk×Âh4âÛo¿EAAæÎ >** +W®DPPT*†††pãÆ 8äççÄ‘LÏ£N£Ñ °°óæÍC`` X̉[²d BCCQZZ ›Í†ÆÆFŸžßÙÙ N'~[­Vìܹ÷ïß÷jŸ]]]¢=¾pðàAq¬ôÚµk€B¡ÀÆG寳xƤ¤$^¿~$ùÆo0==$ùÇð¹çž#Iîܹ“ûöícCC»ºº$§oݺE’¼qã†øŠêóÏ?»ÝÎ'Ÿ|’Ÿ}ö™—Îst³¥¥Åëë«‘8§ÓÉ677óõ×_çþýû}Ž4“ÉD›ÍF’ŒŒŒO€k×®155URþÂ… Œ‰‰‘Œî¦¦¦Gï!Ó§OG{{;ZZZàp8Äw ¥¥¥bêƒÖÖV,[¶ ³gÏFGG ¯¯S§N…Á`€ÝnGAA¶oßƽ{÷àv»±cÇ$&&Šàït:„E‹áîݻغu+¶mÛæ—+))Á¹sç°hÑ"deeáûï¿÷9к»»ŽÁÁAôôôà•W^o0$åÍf3fΜ‰-[¶Àn·\.Ö®]ûÈ——yêÔ)Î;—Ë—/§Õje~~>£££¹cÇqì²··—©©©ÔétŒçÇ,‚¶Éd¢Á``LL ËË˽¶h—-[F½^Ï£GrÍš5Œˆˆ Õj寿þÊÀÀ@FGGKt£q‹…ƒÑÑÑ4lll”Œ2·ÛM¥RÉÅ‹³µµÕë¤ä€UUUÝngaa!,X@NÇùóçsß¾}ÔCðO}ºuéÒ%®^½ú¹IùÑ磀Õjg­„û¿Ç?1 ~úé'q𤬬lÌÜd€¼"¯öÊ òá?U}ÿMÿJúœIEND®B`‚libzeep-5.1.7/doc/images/next.png0000664000175000017500000000052014176701531016520 0ustar maartenmaarten‰PNG  IHDR€~+ÿsBITÛáOà$PLTE‹‰ˆ333¶µ´QOM&# ¨§¥ââáÓÓÒ`^\C@>ÿÿÿ.?a tRNSÿÿÿÿÿÿÿÿÿÿÿßÎÎ pHYs  ÒÝ~ü%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬ÏtEXtCreation Time10/03/04ǯŒ XIDATxœcØ •Ù@bؾ€ ÆÜÅÀ e–20°A™;@Â`æîV0„ ÞÀâ @á  P€`2 ‹š Ô"™€j.’mHn@r’{¡¾©¤R1P~dlIEND®B`‚libzeep-5.1.7/doc/images/next_disabled.png0000664000175000017500000000212614176701531020353 0ustar maartenmaarten‰PNG  IHDREŽÆþgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€èu0ê`:—o—©™ÔPLTEÑÐÏèççÖÖÖðððÜÜÛÔÓÒîííùùùööößßÞÙÙØÿÿÿÎÎÎÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖ×××××××××××××××ØØØØØØØØØØØØØØØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞßßßßßßßßßßßßßßßàààààààààààààààáááááááááááááááâââââââââââââââãããããããããããããããäääääääääääääääåååååååååååååååæææææææææææææææçççççççççççççççèèèèèèèèèèèèèèèéééééééééééééééêêêêêêêêêêêêêêêëëëëëëëëëëëëëëëìììììììììììììììíííííííííííííííîîîîîîîîîîîîîîîïïïïïïïïïïïïïïïðððððððððððððððñññññññññññññññòòòòòòòòòòòòòòòóóóóóóóóóóóóóóóôôôôôôôôôôôôôôôõõõõõõõõõõõõõõõööööööööööööööö÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷øøøøøøøøøøøøøøøùùùùùùùùùùùùùùùúúúúúúúúúúúúúúúûûûûûûûûûûûûûûûüüüüüüüüüüüüüüüýýýýýýýýýýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿá$xÆ tRNSÿÿÿÿÿÿÿÿÿÿÿßÎνIDATxœbäf€€?LY¡L€b 1c`€ T $ôë7„ @PuþÈ_•UÇ æATÌ`^\ÿÿÿ™Ì ƒ tRNSÿÿÿÿÿÿÿÿÿÿÿßÎÎ pHYs  ÒÝ~ü%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬ÏtEXtCreation Time10/03/04ǯŒ VIDATxœcØ ^ bØÂ0Æt`à„2·00°A™ é&H°„ ™@AÕP 0` B@‚‰$ФÉds‘lCv’ËÝ»ÛleSŠf øIEND®B`‚libzeep-5.1.7/doc/images/prev_disabled.png0000664000175000017500000000212514176701531020350 0ustar maartenmaarten‰PNG  IHDREŽÆþgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€èu0ê`:—o—©™ÔPLTEÑÐÏàààÖÖÖðððîííÜÜÛÔÓÒöööèççÙÙØßßÞÿÿÿÎÎÎÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖ×××××××××××××××ØØØØØØØØØØØØØØØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞßßßßßßßßßßßßßßßàààààààààààààààáááááááááááááááâââââââââââââââãããããããããããããããäääääääääääääääåååååååååååååååæææææææææææææææçççççççççççççççèèèèèèèèèèèèèèèéééééééééééééééêêêêêêêêêêêêêêêëëëëëëëëëëëëëëëìììììììììììììììíííííííííííííííîîîîîîîîîîîîîîîïïïïïïïïïïïïïïïðððððððððððððððñññññññññññññññòòòòòòòòòòòòòòòóóóóóóóóóóóóóóóôôôôôôôôôôôôôôôõõõõõõõõõõõõõõõööööööööööööööö÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷øøøøøøøøøøøøøøøùùùùùùùùùùùùùùùúúúúúúúúúúúúúúúûûûûûûûûûûûûûûûüüüüüüüüüüüüüüüýýýýýýýýýýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿ1nU¹ tRNSÿÿÿÿÿÿÿÿÿÿÿßÎμIDATxœbäf€€ŸlŒP@1Á„þ|û &˜Ãw˜ @1Á…þBň !7 €˜„X bÄ„)Ä@,P!†?Ì¿ Bÿˆ. ÄôCŒ €˜0Õ1 ;D%3Lè7@±0@YöÐ-ì`ίÿp“äftA€û & H@a¶4¬@‚œ°° ˜eì aB ÿ8$-C£ì6IEND®B`‚libzeep-5.1.7/doc/images/smiley.png0000664000175000017500000000154314176701531017052 0ustar maartenmaarten‰PNG  IHDR&¢–GsBITÛáOàPLTE«ª©¬¨utpQVR;úõªÞÚ—DB8~|xÞÞÝ1-'’ŽdËÇŠ’fdNÌÌÌîé¡caY§£r<92ƒY½¸€¢¡ ˆ†…QM8™™f%!XULçççÜØ–usknjKki_åà›DA/IF>²®yІ^a^Iõ𦸷¶™™™ÓÏifH†…TP>¢nŽŒskk30$\YKòòò×ÖÖZWCè㾄þù¬áÜ™™™fÐËplM»º¹ŽŠa€~vzvVfffLI5GC:dbSieQ\YQðì£KIB„€Z÷÷¥@<3RRB”hfff‘Œa^Va^CpmO¯«w·³}¿º¦¥¤ŒŒ„ˆ„by|yUùpƒ[tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXl"T pHYs  ÒÝ~ütEXtCreation Time10/12/04BsÂÜ%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬Ï/IDATxœm’}W‚0ÆoåKID)X b`Ià8övò8N¥Ö©¾ÿi›,Ð|þ`w¿»;ž» Ü? —M ÷§åö¤ô¸<ïð_C„e “ñ«Ê¸ªU}ÄÄšºäª–('‡ç(o^¢U]à pM/\ã(îa~^ÁÑ,‹¡…Wé}Ì6ž€r A j°ëà1T@¦ü”€¬›‚F‡ƒtk+ }ðPþ÷W" ”M Ò7qDbS9ÍÐ 1:‚z‚ãUïbü7áV*â ÑJ õk߃+:´Ñç½Rèwg$_‘ð9p^‰$ô‡÷B¡» ÅU“œç§½ffç{y/WvÎògì·ÆëÚØžÔ³û®å§¹X‹#þMXyjMŒ^"±ÃžÊ/ç»iè]0pIIEND®B`‚libzeep-5.1.7/doc/images/tip.png0000664000175000017500000000070114176701531016337 0ustar maartenmaarten‰PNG  IHDR*Þ bKGDª#2ÛIDATxÚu’»à @!+xŒ¬’6¥K—¬àR+hJ·”–TaK >ßžþRh~j?ïg0qF@”Ÿøƒð!¢ÊòeH,î…0܆x˜”0‘&p „^—µªJéÄ5y»=ôJØ % P<†*ÄŸ{Œ®”¨…Š–×Âj÷ #û7±^ñóŸÍL~Ù!=™ ä&Ṳ; ‘&rgߊFâm‰¬Í©×Pý•¬Ö;Ùä óot6BöJäqC ìXduÀê³Ýi]}OLð4+|) -íCtEXtSoftware@(#)ImageMagick 4.2.8 99/08/01 cristy@mystic.es.dupont.com‘º!¸*tEXtSignatureee9d877396ce267aeb0179d35f81b2ac3ú'tEXtPage25x24+0+0¾ñ ¯IEND®B`‚libzeep-5.1.7/doc/images/toc-blank.png0000664000175000017500000000047614176701531017426 0ustar maartenmaarten‰PNG  IHDR ¡kd0PLTE€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿO&IbKGDˆHIDATxÚcøÿ¿ÿ?|`ø h  Ì”ÐBÒh±àCtEXtSoftware@(#)ImageMagick 4.2.8 99/08/01 cristy@mystic.es.dupont.com‘º!¸*tEXtSignaturef7e388dabd4ef0097714b5643fdd3cfbb†œÒ tEXtPage15x9+0+07vð¸IEND®B`‚libzeep-5.1.7/doc/images/toc-minus.png0000664000175000017500000000040314176701531017460 0ustar maartenmaarten‰PNG  IHDR Èä)‹bKGDª#2IDATxÚchÿ`À¥ÿÏg  I×j?}-p®ZóºECtEXtSoftware@(#)ImageMagick 4.2.8 99/08/01 cristy@mystic.es.dupont.com‘º!¸*tEXtSignatureecf413ef47524404f90c44d8c7d12a2e݈þš tEXtPage15x9+0+07vð¸IEND®B`‚libzeep-5.1.7/doc/images/toc-plus.png0000664000175000017500000000041014176701531017306 0ustar maartenmaarten‰PNG  IHDR Èä)‹bKGDª#2#IDATxÚchÿ`À¥ÿ#óðò@ÈC"Ô£™j?RJl²d™:4CtEXtSoftware@(#)ImageMagick 4.2.8 99/08/01 cristy@mystic.es.dupont.com‘º!¸*tEXtSignatureab17802e1ddae3211b1ce6bc3b08aec7{ú¦( tEXtPage15x9+0+07vð¸IEND®B`‚libzeep-5.1.7/doc/images/up.png0000664000175000017500000000056214176701531016174 0ustar maartenmaarten‰PNG  IHDR€~+ÿsBITÛáOà*PLTEfffC@>¶µ´¨§¥‹‰ˆÓÓÒQOM&# ™™™ÅÄÃ`^\ââáÿÿÿ–Ø=tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿEÀÜÈ pHYs  ÒÝ~ü%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬ÏtEXtCreation Time10/03/04ǯŒ rIDATxœ•α €0Fá'X¸€¥Q\À=ÜÀÖ,ÀÎ%ÄN„€Ø%»ø_¢˜âøòäˆ:G§áÑ®ü¸A—”™Š–E‹–Å•=9*{«ä– j˜í²QܰŒªÁ5âÚëmÜ£1¬écã»Ã^ÃpŠø™_E"Ï\ÜIEND®B`‚libzeep-5.1.7/doc/images/up_disabled.png0000664000175000017500000000213314176701531020017 0ustar maartenmaarten‰PNG  IHDREŽÆþgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€èu0ê`:—o—©™ÔPLTEÑÐÏàààÙÙØðððîííèççöööÜÜÛÔÓÒëëëóóóßßÞùùùÿÿÿÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖ×××××××××××××××ØØØØØØØØØØØØØØØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞßßßßßßßßßßßßßßßàààààààààààààààáááááááááááááááâââââââââââââââãããããããããããããããäääääääääääääääåååååååååååååååæææææææææææææææçççççççççççççççèèèèèèèèèèèèèèèéééééééééééééééêêêêêêêêêêêêêêêëëëëëëëëëëëëëëëìììììììììììììììíííííííííííííííîîîîîîîîîîîîîîîïïïïïïïïïïïïïïïðððððððððððððððñññññññññññññññòòòòòòòòòòòòòòòóóóóóóóóóóóóóóóôôôôôôôôôôôôôôôõõõõõõõõõõõõõõõööööööööööööööö÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷øøøøøøøøøøøøøøøùùùùùùùùùùùùùùùúúúúúúúúúúúúúúúûûûûûûûûûûûûûûûüüüüüüüüüüüüüüüýýýýýýýýýýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿæ}DŠtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿEÀÜÈÀIDATxœbäe€€ÿÿrB™Äúöá;T €˜B ¾C8Ä„‚ ’L €˜… ‚Ä„" &T!° @1ð@lá@ˆ²Ó_°*Æ¿ ’,ó €˜˜AêyÀ*ÿYˆ‰‘‹ &ÄÀÀdá F®œp³Øÿs13P'#BÈaf` &L@ØÄ›@a X˜þcG(0ØN.3@¥:ŸIEND®B`‚libzeep-5.1.7/doc/images/warning.png0000664000175000017500000000233114176701531017211 0ustar maartenmaarten‰PNG  IHDRשÍÊPLTE!)1BJRZks{„Œ””{{œRRœZZœ{{¥¥99¥JJ¥„„¥””¥¥¥­­11­””µµ))µŒŒµœœµ¥¥µµµ½½­­½µµÆÆÆÆÆÆÎÎÎÎ))ÖÖ))ÖÖÖÞÞÞÞçç!!çççïïïïï÷÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿp;ã”bKGDˆHèIDATxÚm’}o‚0Æï”MÜæÄé¦5…%¼•%m ßÿs­ìzP“^ÿ ²¥UDÂýKnßk[;Ò»?0n!¿œqCtEXtSoftware@(#)ImageMagick 4.2.8 99/08/01 cristy@mystic.es.dupont.com‘º!¸*tEXtSignaturec42b7d2d564aab588891979703f02b45Oß“tEXtPage24x24+0+0r[ 1IEND®B`‚libzeep-5.1.7/doc/index.html0000664000175000017500000002457314176701531015602 0ustar maartenmaarten libzeep documentation

Contents

Introduction

The XML library

libzeep is a library that consists of two main parts. The first and arguably most useful for many is the XML processing part. It consists of a SAX parser, a DOM implementation, an XML writing module and an XPath implementation. The parser can act as a validating parser using the Document Type Definition to check the content. Schema support is not yet implemented but will be in a future release.

The second part of libzeep (and the part it all started with, hence the name) is a skeleton to build SOAP server implementations. It uses the XML part as well as various Boost libraries to achieve its usefulness. It allows the creation of a SOAP server by implementing only the serving routines in C++ and calling a routine for each to export of them. Code is then automatically generated to do all the SOAP message parsing and WSDL's generation occurs on-the-fly at runtime.

libzeep comes with headers and libraries. The headers all have zeep as namespace. All code heavily depends on the boost libraries.

Examples

Using libzeep is fairly straightforward. E.g., if we take the following XML file:

<?xml version="1.0" encoding="UTF-8"?>
<employees>
  <employee>
    <name id="1">Joe Doe</name>
    <address>Main street</address>
  </employee>
  <employee>
    <name id="2">Jack Daniels</name>
    <address>Backstreet</address>
  </employee>
</employees>

Reading this file is simple:

#include <zeep/xml/document.hpp>

using namespace zeep;
using namespace std;

ifstream data("/tmp/myfile.xml");
xml::document doc;
data >> doc;

The result of this code is a DOM tree with doc as root. An xml::document is derived from xml::element and can only have one xml::element child. Since it is a DOM tree, and since it is implemented in the classic link-list approach, you can use the next(), prev(), parent() and child() methods to navigate the tree.

But to stick to STL coding styles, walking a tree can also be done using the children() method which returns a std::list of pointers to its children. This method is templated since an element can have non-element child nodes like comments and processing instruction but most often you're only interested in the element child nodes.

Using the children method, iterating over all employees can be done like this:

// iterate over employees
xml::element_set employees = doc.root()->children<xml::element>();
for (xml::element_set::iterator employee = employees.begin(); employee != employees.end(); ++employee)
{
	// employee points to an element and we want its first child
	xml::element* name = (*employee)->child();
	// it really should be a name, right?
	assert(name->qname() == "name");
    cout << "Name: " << name->content() << endl;
}

Of course, using Boost's foreach this looks a lot nicer:

// iterate over employees, boost foreach style
#include <boost/foreach.hpp>
#define foreach BOOST_FOREACH

...

for (xml::element* employee, doc.root()->children<xml::element>())
{
	xml::element* name = (*employee)->child();
	...
}

Still, we can do better. Using XPaths. Just like the children() method of xml::element the xpath evaluation method returns all nodes, if you're only interested in xml::element nodes, you can specify this.

#include <boost/foreach.hpp>
#define foreach BOOST_FOREACH

...

xpath p("//employee/name");

for (xml::element* name, p.evaluate<xml::element>(doc))
{
    cout << "Name: " << name->content() << endl;
}

The find method of xml::element is a shortcut to xpath::evaluate(), it always returns xml::element nodes.

for (xml::element* name = doc.find("//employee/name"))
    cout << "Name: " << name->content() << endl;

The XPath implementation in libzeep implements the full XPath 1.0 specification. That means you can also do this:

// Fetch Jack's record by name:
xml::element* jack = doc.find_first("//employee[name = 'Jack Daniels']");

// or by id:
jack = doc.find_first("//employee[@id='2']");

// or by position in the list, jack is always last...
jack = doc.find_first("//employee[position() = last()]");

You can even use variables:

// Fetch Jack's record by name:
xml::context context;
context.set("var", "Jack Daniels");
xml::xpath xpath("//employee[name = $var]");

xml::element* jack = xpath.evaluate(*doc.root(), context).front();

SOAP server

This comes from the man page for the 1.0 version of libzeep. I'll have to improve this one day:

libzeep(3)                        subroutine                        libzeep(3)



NAME
       libzeep - A C++ library to create SOAP servers

SYNOPSIS
       #include <zeep/server.hpp>

       class my_server : public zeep::server
       {
         public:
           my_server(const char* addr, short port);
           void sum(int a, int b, int& c) { c = a + b; }
       };

       my_server::my_server(const char* addr, short port)
         : zeep::server("http//www.acme.org/...", addr, port)
       {
         const char kSumParameterNames[] = { "a", "b", "c" };
         register_action("sum", this, &my_server::sum, kSumParameterNames);
       }

        ...

       my_server server("0.0.0.0", 10333);
       boost::thread t(boost::bind(&my_server::run, &server));
       // and wait for a signal to stop using e.g. sigwait(3)


DESCRIPTION
       Using   libzeep   you  can  create  a  SOAP  server  by  deriving  from
       zeep::server.  In the constructor of your server,  you  call  the  base
       class  constructor  with three arguments: ns, a namespace for your SOAP
       server, address, the address to listen to, usually "0.0.0.0" to  listen
       to all available addresses. And port, the port number to bind to.

       SOAP actions are simply members of the server object and are registered
       using the register_action member  function  of  the  zeep::server  base
       class.  After  initializing the server object, the run member is called
       and the server then starts listening to the address and port specified.

       The resulting web service application will  process  incoming  request.
       There  are  three kinds of requests, the server can return an automati-
       cally generated WSDL, it can process standard SOAP message send in SOAP
       envelopes  and  it  can  handle REST style requests which are mapped to
       corresponding SOAP messages internally.

       The signature of the registered actions are used to  generate  all  the
       code needed to serialize and deserialize SOAP envelopes and to create a
       corresponding WSDL file. The signature can be as simple as the  example
       above but can also be as complex as in this one:

         void myAction(
                const std::vector<MyStructIn>& input,
                MyStructOut& output);

       In  order to make this work, you have to notify the library of the map
       ping  of  your   structure   type   to   a   name   using   the   macro
       SOAP_XML_SET_STRUCT_NAME like this:

                SOAP_XML_SET_STRUCT_NAME(MyStructIn);
                SOAP_XML_SET_STRUCT_NAME(MyStructOut);

       Next  to  this,  you have to provide a way to serialize and deserialize
       your structure. For this,  libzeep  uses  the  same  mechanism  as  the
       Boost::serialize  library, which means you have to add a templated mem
       ber function called serialize to your structure. The result  will  look
       like this:

       struct MyStructIn {
         string myField1;
         int myField2;

         template<class Archive>
         void serialize(Archive& ar, const unsigned int version)
         {
           ar & BOOST_SERIALIZATION_NVP(myField1)
              & BOOST_SERIALIZATION_NVP(myField2);
         }
       };

       Similarly  you  can  use  enum's in an action signature or as structure
       member variables. Again we need to tell the library the type  name  for
       the   enum  and  the  possible  enum  values.  We  do  this  using  the
       SOAP_XML_ADD_ENUM macro, like this:

          enum MyEnum { "one", "two" };
          SOAP_XML_ADD_ENUM(myEnum, one);
          SOAP_XML_ADD_ENUM(myEnum, two);

       As shown above, you can also use std::vector containers in  the  signa-
       ture  of  actions.  Support for other STL containers is not implemented
       yet.

       If the address used by clients of your server  is  different  from  the
       address  of  your  local  machine  (which can happen if you're behind a
       reverse proxy e.g.) you can specify the location using the set_location
       member  function  of  zeep::server.  The specified address will then be
       used in the WSDL file.


BUGS
       Undoubtedly libzeep will contain bugs. One of the more obvious  one  is
       the  missing  support  for  signatures  using STL containers other than
       std::vector.



version 1.0                       12-jan-2009                       libzeep(3)

Reference

Well, read the code for now. If I can find the time I will do better.

libzeep-5.1.7/doc/introduction.qbk0000664000175000017500000000573214176701531017021 0ustar maartenmaarten[/ Documentation for libzeep version 5.0 Copyright Maarten L. Hekkelman, 2020 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This document is for the introduction ] [preface Introduction [quickbook 1.7] [id quickbook.intro] ] Libzeep started as a spin-off of [@https://mrs.cmbi.umcn.nl MRS] which is a tool to index and search large text-based bioinformatics databanks. The code that generates a SOAP server in compile time in MRS was needed in another project and this is how libzeep started. BTW, zeep is the dutch word for soap. One of the major parts of libzeep used to be the XML library. It contains a full validating parser with support for XML 1.0 and 1.1 as well as a DOM API for manipulating XML based data structures in memory. The current implementation of libzeep goes much further. It is by now a swissarmy knife for building web applications in C++ including a web server implementation, a JSON library, SOAP and REST controller support and a templating engine looking suspisciously like [@https://www.thymeleaf.org/ Thymeleaf]. Lots of the concepts used in libzeep are inspired by the Java based [@https://spring.io/ Spring framework]. In version 5.0 the library has been split up in thre sub libraries, each targeted at different tasks. [heading:xml libzeep-xml] A feature complete XML library containing a validating parser as well as a modern C++ API for the data structures. It also supports serializing data structures using a boost-like serialization interface. [heading:json libzeep-json] This is an implementation of a JSON library. I've attempted to make it source code compatible with the very good [@https://github.com/nlohmann/json JSON library by Niels Lohmann]. There are some major differences though, my library has a very different parser as well as support for serializing using the same technique as libzeep-xml. On the other hand mine lacks many of the advanced cool features found in Niels library. [heading:http libzeep-http] This library contains a web server implementation. There's also code to create daemon processes and run a preforked webserver. The design follows a bit the one from Spring and so there's a HTTP server class that delegates requests to controllers. A security context class helps in limiting access to authorized users only. Three specialized controller classes provide HTML templates, REST and SOAP services. The template language implementation attempts to be source code compatible with Thymeleaf. The REST controller maps member function calls to the HTTP URI space and translates HTTP parameters and HTTP form content into function variables and it provides transparent and automatic translation of result types into JSON. The SOAP controller is like the REST controller, but now digests requests wrapped in SOAP envelopes, delegates them to handler functions and returns the result back wrapped in SOAP envelopes. libzeep-5.1.7/doc/lib-generic.qbk0000664000175000017500000000424014176701531016451 0ustar maartenmaarten[/ Documentation for libzeep version 5.0 Copyright Maarten L. Hekkelman, 2020 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ] [chapter Generic [quickbook 1.7] [id libzeep.generic] ] [section:descr Introduction] Originally libzeep came as a single library. But if you only need the XML functionality it might not be very useful to include all the networking code for the HTTP server. And so the libraries were split into modules that can be used independently from each other. There are some files that are shared by all libraries though [heading The configuration file] In the file `` you can find a couple of flags that influence what parts of libzeep should be left out. The first is to enable building a __preforked_server__ class, probably only useful in a UNIX context. The other flag allows the compilation of code that uses resources. Resources in a libzeep context are a bit different from their counterparts in MacOS and Windows. Libzeep uses `mrc` to bundle resources in an executable. Especially for small web applications this makes installation very easy at the cost of configurability. See [@https://github.com/mhekkel/mrc github pages for mrc] for more information. [section:streambuf character array streambuf] Sometimes it is very convenient to have a `std::istream` reading from a `const char*` buffer, the class __char_streambuf__ allows you to do just that. [c++] auto sb = zeep::char_streambuf("Hello, world!"); auto is = std::istream(&sb); std::string line; std::getline(is, line); [endsect:streambuf] [section:unicode Unicode/text support] Various simple routines used when working with UTF-8 encoded Unicode text. Routines that are so common, you really ask yourself why these are not part of the standard yet. [endsect:unicode] [section:serialization Serialization support] Originally, libzeep could only serialize XML. Later, with the addition of a JSON library with its own serialization ideas, the two were merged somewhat and the overlapping code ended up here. [endsect:serialization] [endsect:descr] libzeep-5.1.7/doc/lib-http.qbk0000664000175000017500000011621614176701531016023 0ustar maartenmaarten[/ Documentation for libzeep version 5.0 Copyright Maarten L. Hekkelman, 2020 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ] [chapter HTTP [quickbook 1.7] [id libzeep.http] ] [def __http_server__ [classref zeep::http::server `zeep::http::server`]] [def __request__ [classref zeep::http::request `request`]] [def __reply__ [classref zeep::http::reply `reply`]] [def __scope__ [classref zeep::http::scope `scope`]] [def __header__ [classref zeep::http::header `header`]] [def __html_controller__ [classref zeep::http::html_controller `html_controller`]] [def __rest_controller__ [classref zeep::http::rest_controller `rest_controller`]] [def __soap_controller__ [classref zeep::http::soap_controller `soap_controller`]] [section:descr Introduction] The goal of libzeep is to provide a library that makes creating web applications as easy as possible. A lot of frameworks already exist to help building these interactive web apps written in languages ranging from Java to Python to more exotic stuff like Ruby and Laravel. The [@https://spring.io Spring] version stands out between these since it is well designed and offers tons of features and still is fairly easy to work with. But all of these have one flaw in common, they're not written in C++ and thus lack the raw performance. Libzeep tries to implement some of the design patterns found in Spring. There is a very basic HTTP server class with some additional classes that help in creating daemon processes when running a UNIX or lookalike. This HTTP server class delegates requests to controller classes that each process requests in their own corner of the URI space occupied by your server. There are three main controller classes, each targeted at a different task. The first, __html_controller__ maps requests to functions that take a __request__ and __scope__ and return a __reply__. Various routines are available to help constructing XHTML based replies based on XHTML template files. These files can contain special tags that will be processed and the values can be expressed in _expression language_. The second controller class is the __rest_controller__. This one also maps requests to functions, but this time the parameters in the request are automatically translated into function parameters and the result of the function is converted back into JSON automatically. Named parameters can be passed in the payload of a POST request, as query parameters in a GET request or as parts of the URI path, as in =GET /book/1234/title= where you request the title of book number 1234. The third controller is the __soap_controller__. Similar to the REST controller, but this time the translation is between SOAP XML messages and parameters and vice versa. [endsect:descr] [section:httpserver HTTP server] Starting an HTTP server is easy. Simply create the __http_server__ object, [memberref zeep::http::server::bind `bind`] it to an address and call run specifying how many threads to run simultaneously. Something like this: [import ../examples/http-server-0.cpp] [most_simple_http_server] Running this code will create a server that listens to port 8080 on localhost and will return =NOT FOUND= for all requests. Not particularly useful of course. It is possible to derive a class from __http_server__ and implement [memberref zeep::http::server::handle_request `handle_request`]. But there is a better alternative: use controllers. [heading:controller Controllers] A __http_server__ can have one or more controllers. Each controller handles requests that have URI's that start with a specified prefix. In this example we have a controller that handles any request, since it has a prefix that is effectively the same as the root. It returns a simple reply. [import ../examples/http-server-1.cpp] [simple_http_server] Still a not so useful example. Fortunately there are several implementations of [classref zeep::http::controller `controller`] that we can use. [endsect:httpserver] [section:bladiebla HTML Controller] The __html_controller__ class allows you to *mount* a request handler on a URI path, the result is that this request handler, which is a method of your controller class, will be called whenever a HTTP request with a matching URI comes in. The handler method has next to the __request__ and __reply__ parameter an additional __scope__ parameter. This scope is a kind of nested map of variable names and values. The scope is `const`, if you want to add data to the scope you should create your own sub scope and pass the original in the constructor. A handler can of course create simple replies, just as in the previous example. But you can also use templates. Note that the constructor of __html_controller__ takes a second parameter that is called docroot. This should contain the path to the directory containing the templates. [note The docroot parameter is ignored when you create a html controller based on resources, see section on resources further in this documentation.] Our __html_controller__ indirectly inherits [classref zeep::http::template_processor `template_processor`] and this is the class that uses the `docroot` parameter. This class takes care of processing template files. It loads them and uses the registered tag processors and the `scope` to fill in the blanks and process the constructs found in the template. [import ../examples/http-server-2.cpp] [simple_http_server_2] This example uses the file docroot/hello.xhtml which should contain: [teletype] Hello

Hello, !

Now build and run this code, and you can access your welcome page at [@http://localhost:8080/]. If you want to see another name, use e.g. [@http://localhost:8080/?name=maarten] instead. Several remarks here. The server object is created with a =docroot= parameter. That parameter tells the server to create a default [classref zeep::http::template_processor `template_processor`] for use by the __html_controller__ objects. As you can see in the handler code, a check is made for a parameter called =name=. When present, its value is stored in the newly created sub-scope object. The template file contains a construct in the == element that tests for the availability of this variable and uses the default ='world'= otherwise. For more information on templates see the section on [link libzeep.http.xhtml-template xhtml templates]. The path specified in `mount` is `{,index,index.html}` which is a glob pattern, this pattern can accept the following constructs: [table:glob The accepted glob pattern constructs [[path] [matches]] [[=**/*.js=] [matches =x.js=, =a/b/c.js=, etc]] [[={css,scripts}/=] [matches e.g. =css/1/first.css= and =scripts/index.js=]] [[=a;b;c=] [matches either =a=, =b= or =c=]] ] [endsect] [section:data-types Request and Reply] An implementation of the HTTP standard will need various data types. There are [classref zeep::http::request HTTP `requests`] and [classref zeep::http::reply HTTP `replies`]. And these contain [classref zeep::http::header HTTP `headers`] but the `method` specifier (which was changed to a `std::string` in a recent update to libzeep). The HTTP specification for __request__ and __reply__ are sufficiently similar to allow for a common [classref zeep::http::parser message parsing class]. The parser for requests supports [@https://en.wikipedia.org/wiki/Chunked_transfer_encoding chunked transfer encoding]. [heading request] The __request__ encapsulates what was received. The standard HTTP request contains a method, like =GET= or =POST=. In this version of libzeep only a limited subset of methods are supported. The next part is the =uri= that was requested. Then we have the version, usually 1.0 or 1.1. Libzeep does not currently support anything else. When 1.1 was used, libzeep will honour the keep-alive flag. Headers are stored in an array and can be accessed using [memberref zeep::http::request::get_header `get_header`]. Cookies stored in the headers can be accessed using [memberref zeep::http::request::get_cookie `get_cookie`]. A __request__ may also contain a payload, usually only in case of a =POST= or =PUT=. Requests can have parameters. These can be passed url-encoded in the uri, or they can be encoded in the payload using =application/x-www-form-urlencoded= or =multipart/form-data= encoding. The various [memberref zeep::http::reply::get_parameter `get_parameter`] members allow retrieving these parameters by name, optinally passing in a default value in case the parameter was not part of the request. A special case are file parameters, these are retrieved using [memberref zeep::http::reply::get_file_parameter `get_file_parameter`]. This returns a [classref zeep::http::file_param `file_param`] struct that contains information about the uploaded file. Using the [classref zeep::char_streambuf `char_streambuf`] class you can efficiently read the contents of such a file: zeep::file_param f = req.get_file_parameter("upoad"); zeep::char_streambuf sb(f.data, f.length); std::istream is(&sb); Many other convenience accessors are available but data is also directly accessible since this is a `struct`. There are some functions to set data. Those are probably only useful if you write your own code to send out HTTP requests to other servers. [heading reply] The __reply__ object is the object you need to fill in. Replies contain a status line, headers and optionally a payload. There is a static member called [memberref zeep::http::reply::stock_reply `stock_reply`] that allows you to create a complete reply from a status code and an optional message. The [memberref zeep::http::reply::set_header `set_header`] and [memberref zeep::http::reply::set_cookie `set_cookie`] member functions take care of setting headers and cookies respectively. The content of the payload can be set using the various [memberref zeep::http::reply::set_content `set_content`] methods. They will set the content type header according to the data passed in. If you specify a `std::istream*` as content, and the version is set to =1.1= then the data stream will be sent in chunked transfer-encoding. [endsect:data-types] [section:xhtml-template XHTML Template Processing] [def __template_processor__ [classref zeep::http::template_processor `template_processor`]] Many web application frameworks provide a way of templating, write some boilerplate HTML and fill in the details at the moment a page is requested. Apart from that, a page may contains lots of external scripts, stylesheets, images and fonts. For these two tasks libzeep comes with a __template_processor__ class. [heading loading] Starting with the second task just mentioned, the __template_processor__ takes a =docroot= parameter in its constructor. This docroot is the location on disk where files are located. But it is also possible to build libzeep with in-memory resources by using [@https://github.com/mhekkel/mrc =mrc=]. Have a look at the example code for usage. The [memberref zeep::http::basic_template_processor::load_file `load_file`] member of __template_processor__ loads a file from disk (or compiled resources), the [memberref zeep::http::basic_template_processor::file_time `file_time`] member can be used to get the file time of a file. This can be used to generate =304 not modified= replies instead. The [memberref zeep::http::basic_template_processor::load_template `load_template`] member loads a template file from docroot and parses the XML contained in this file into a __document__. [heading templates] Since we're using a XML parser/library to load template, they should be strict XMTML. It is possible to make these files somewhat HTML 5 like by adding the doctype[teletype] The tags inside a template can be processed using a tag_processor. Tag processors are linked to element and attributes in the template using XML namespaces. The method [memberref zeep::http::basic_template_processor::create_reply_from_template `create_reply_from_template`] can be used to convert a template into a reply using the data store in a [classref zeep::http::scope `scope`]. [heading tag processing] Libzeep comes with two tag_processor implementations, the first [classref zeep::http::tag_processor_v1 `tag_processor_v1`] is a legacy one and should probably not be used in new code. The second, [classref zeep::http::tag_processor_v2 `tag_processor_v2`], is inspired by [@https://www.thymeleaf.org]. [section Using =el= script] [def __json_object__ [classref zeep::json::element `json::element`]] =el= is the abbreviation for /Expression Language/. It is a script language that tries to be like [@http://en.wikipedia.org/wiki/Unified_Expression_Language]. libzeep comes with code to evaluate =el= expressions. The language has the concept of variables and these can be created in the C++ code using the __json_object__ class. Variables created this way are then stored in a __scope__ object and passed along to the processing code. To give an example: [import ../examples/synopsis-el-1.cpp] [fill_scope] And then you can process some =expression language= construct like this: [evaluate_el] And if you then print out the result it should give you something like: [teletype] "1: 1, 2: 2" [heading =el= syntax] Most often you will use simple expressions: [table Simple expressions [[expression][evaluates to]] [[`${ ... }`][variable]] [[`*{ ... }`][selection variable (lookup is done in the scope of variables that were selected with =z:select=, v2 processor only )]] [[`@{ ... }`][link URL]] [[`~{ ... }`][fragment]] [[`#{ ... }`][message (not supported yet in libzeep)]] ] The language has literals: [table Literals [[expression][evaluates to]] [[`'my text string'`] [Text literal]] [[`0 3.14`] [Numeric literal, note that scientific notation is not supported]] [[`true false`] [Boolean literal]] [[`null`] [Null literal]] [[`user greeting`] [token]] ] Text operations supported are: [table Text operations [[construct] [description]] [[ `'a' + ' b'`] [concatenation, result is 'a b']] [[`|hello ${user}|`] [literal substitution, if variable user contains 'scott', result is 'hello scott']] ] Operators: [table operators [[operators] [type]] [[`+ - * / %`] [binary operators for standard arithmetic operations]] [[`-`] [unary operator, minus sign]] [[`and or`] [binary operators for standard boolean operations]] [[`! not`] [unary operators, negate]] [[`> < >= <= gt lt ge le`] [operators to compare values]] [[`== != eq ne`] [operators to check for equality]] [[`a ? b`] [conditional operator: if a then return b else null]] [[`a ? b : c`] [conditional operator: if a then return b else return c]] [[`a ?: b`] [conditional operator: if a then return a else return b]] ] When using variables, accessing their content follows the same rules as in Javascript. Arrays have a member function `length`. A few predefined utility objects are predefined. These are #dates, #numbers, #request and #security. [table Predefined objects and their methods [[object.method] [Description]] [[`#dates.format(date,format)`] [ This method takes two parameters, a preferrably ISO formatted date and a format string. The result will be the output of [@https://en.cppreference.com/w/cpp/io/manip/put_time `std::put_time`]. ]] [[`#numbers.formatDecimal(number,int_digits,decimals)`] [ This method takes up to three parameters, a number that needs to be formatted, an int_digits parameter that specifies the minimum number of integral digits to use and a decimals parameter that specifies how many decimals to use. The number is formatted using the locale matching the language specified in the Accept HTTP request header. However, if that locale is not available the default locale is used. Defaults for int_digits is 1 and decimals is 0. Example output: `${#numbers.formatDecimal(pi,2,4)}` is =03.1415= when the locale to use is en_US. ]] [[`#numbers.formatDiskSize(number,decimals)`] [ This method takes up to two parameters, a number that needs to be formatted, and a decimals parameter that specifies how many decimals to use. The number is divided by 1024 until it fits three int digits and the suffix is adjusted accordingly. Default for decimals is 0. Example output: `${#numbers.formatDiskSize(20480,2)}` is =2.00K= when the locale to use is en_US. ]] [[`#request.getRequestURI()`] [ Returns the original URI in the HTTP request. ]] [[`#security.authorized()`] [ Returns whether the uses has successfully logged in. ]] [[`#security.username()`] [ Returns the username for the current user. ]] [[`#security.hasRole(role)`] [ Returns whether the uses has the role as specified by the parameter. ]] ] [endsect] [section tag_processor_v1] This tag_processor works on tags, mostly. As opposed to tag_processor_v2 which works on attributes mainly. The tags are in a separate XML namespace. You can change this name space using the `ns` parameter in the constructor, the default is =http://www.hekkelman.com/libzeep/m1=. There are several predefined processing tags which are summarized below. There used to be also a way to add your own processing tags using an `add_processor` method but that has been dropped. [table List of predefined processing tags [[tag name (without prefix)][Description][Example]] [ [include] [Takes one parameter named `file` and replaces the tag with the processed content of this file] [ [^] ] ] [ [if] [Takes one parameter named `test` containing an `el` script. This script is evaluated and if the result is not empty, zero or false, the content of the `if` tags is inserted in the output. Otherwise, the content is discarded.] [[teletype] `` Hello ${name} `` ] ] [ [iterate] [Takes two parameters, `collection` which contains an `el` script that evaluates to an array `el::object` and a name in `var`. The content of the `iterate` tag is included for each value of `collection` and `var` will contain the current value.] [ ``
  • ${name}
`` ] ] [ [for] [Takes three parameters. The parameters `begin` and `end` should evaluate to a number. The parameter `var` contains a name that will be used to hold the current value when inserting the content of the `for` tag in each iteration of the for loop between `begin` and `end`.] [ `` ${i}, `` ] ] [ [number] [Format the number in the `n` parameter using the `f` format. This is limited to the formats ='#.##0'= and ='#.##0B'= for now. The first formats an integer value using thousand separators, the second tries to format the integer value in a power of two multiplier (kibi, mebi, etc.) with a suffix of `B`, `M`, `G`, etc.] [ `` Will output 1K `` ] ] [ [options] [This tag will insert multiple =
Next page `` ] ] [[param][see =url= above.]] [ [embed] [This tag takes the content of the `var` parameter which should contain valid XML and puts the processed value in the document.] [ `` `` ] ] ] [endsect] [section tag_processor_v2] Tag processor version 2 is an implementation of the documentation for [@https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html Thymeleaf]. This documententation is a bit sparse, for now you might be better off reading the one at the Thymeleaf site. There are some notable differences between Thymeleaf and libzeep though, libzeep does not support the concept of =messages= yet, so using this for localization is not going to work. Furthermore, the Thymeleaf library is written in Java and assumes all data constructs are Java object. Of course that is different in libzeep. [heading tags] There is only one tag this tag processor processes, which is ==, for the rest this processor only processes attributes. [heading attributes] Some attributes are treated special, these are listed below. For the other tags the general rule is that if the tag has the prefix for the =v2= namespace, the value of the attribute will be evaluated and the result will be placed in an attribute without the prefix. Possibly overwriting an already existing attribute with that name. So, e.g. if you have ```` and the variable =id= contains ='two'= the result will be ```` [heading special attributes] [table processed attributes [[attribute] [remarks]] [[=assert=] [ If the value of this attribute evaluates to `true`, an exception will be thrown. ]] [[=attr=] [ The value of this attribute is an expression consisting of one or more comma separated statements that assign a value to an attribute. e.g. `` `` will result in the following when the value of the variables =width= and =height= is `100`. `` ] `` will result in `` 1 aap 2 noot 3 mies `` The iterator-info variable can be used to get info about the current value. [table iterator members [[name][description]] [[count][counting number starting at one.]] [[index][counting number starting at zero.]] [[even][boolean indicating whether this is an even element]] [[odd][boolean indicating whether this is an odd element]] [[size][size of the total array/collection]] [[first][boolean indicating the first element]] [[last][boolean indicating the last element]] [[current][the value of the current element]] ] ]] [[=if=, =unless=] [ The attribute value is evaluated and if the result is `true` respectively `false` the containing tag is preserved, otherwise it is deleted. ]] [[=include=, =insert=, =replace=] [ These three statements are used to pull in fragments of markup. The value of the attribute is evaluated and should contain a fragment specification. The contents of this fragment are then copied to the destination. The three attributes differ in the following way: [variablelist [[insert][The complete fragment is inserted inside the body of the containing tag]] [[replace][The complete fragment is replaces the containing tag]] [[include][The content of the fragment is inserted inside the body of the containing tag]] ] Example, when the fragment is `hello` the following markup: ``
`` If the inline attribute has value =text=, the whole body of the tag will be evaluated as =el=. ]] [[=switch=, =case=] [ Example: ``
Admin Some other user
`` ]] [[=text=, =utext=] [ The simplest, replace the body of the tag with the result of the evaluation of the content of this attribute. `` `` Will result in: `` scott `` The =text= variant will quote special characters like <, > and &. The =utext= variant will not, but beware, if the result is not valid XML an exception is thrown. ]] [[=with=] [ Assign a value to a variable. Example: ``
`` ]] ] [endsect] [endsect:xhtml-template] [section:rest-controller REST Controller] The __rest_controller__ class is similar to the __html_controller__ in that it allows you to map a request to a member function. The difference however is that the REST controller translates parameters from HTTP requests into arguments for your method and translates the result of the method back into JSON to be returned to the client. Lets walk through an example again to show how this works. [import ../examples/rest-sample.cpp] We begin our example by declaring some shopping cart objects. These are plain structs that also define a `serialize` method for use with serialization. [cart_items] Now we create a REST controller that will handle the creation of a new cart and adding and deleting items from this cart. We use standard CRUD REST syntax for this, so e.g. the cart ID is part of the path in the URI for adding and deleting items. [shop_rest_controller] The calls to this rest controller are in the =scripts/shop.js= file. Have a look at that file to see how it works. To give you an idea, this is the snippet that is called after clicking the /add/ link for an item.[teletype] addToCart(item) { const fd = new FormData(); fd.append("name", item); fetch(`/cart/${this.cartID}/item`, { method: "POST", body: fd}) .then(r => r.json()) .then(order => this.updateOrder(order)) .catch(err => { console.log(err); alert(`Failed to add ${item} to cart`); }); } The page, script and stylesheet are served by a __html_controller__. [shop_html_controller] And tie everything together. [shop_main] [endsect:rest-controller] [section:rest-controller REST Controller (CRUD)] The previous example is a rough example on how to use the __rest_controller__, it assumes you pass in the parameters using form data or query parameters. There's another approach, that is more elegant and easier for the developer: create a [@https://en.wikipedia.org/wiki/Create,_read,_update_and_delete CRUD] interface and pass the data encoded in JSON format. To make this work, we rework the previous example. The data items =Cart= and =Item= remain the same, they already have a `serialize` method. The real difference is in the JavaScript code, in the previous example all work was done by the server, the JavaScript only called separate methods to fill the items list and the server responded with the new Cart content. In this example however, management of the cart content is done by the JavaScript and the updated cart is then sent using a =PUT= to the server. The server therefore looks like this: [import ../examples/rest-sample-2.cpp] [shop_rest_controller_2] Some ceveats: this works probably only well if you have a single =JSON= (or compatible) data type as main parameter and optionally one or more path parameters. The request should also have =content-type= equal to =application/json= to work properly. [endsect] [section:rest-controller SOAP Controller] Creating SOAP controllers is also easy. But that will have to wait a bit. [endsect:rest-controller] [section:error-handlers Error handling] [def __error_handler__ [classref zeep::http::error_handler `error_handler`]] During the processing of a request, an error may occur, often by throwing an std::exception. The default __error_handler__ class takes care of catching exceptions and turn these in sensible error replies. A default error_handler is created in the __http_server__ constructor and this one uses the default =error.xhtml= template in =docroot=, or a built in template if that file does not exist. You can derive your own error handler from __error_handler__ and implement a =create_error_reply= member to handle some errors differently. The error handlers will be called in the reverse order of being added allowing you to override default behaviour. [endsect:error-handlers] [section:security Security] [def __security_context__ [classref zeep::http::security_context `security_context`]] [def __user_service__ [classref zeep::http::user_service `user_service`]] [def __user_details__ [classref zeep::http::user_details `user_details`]] [def __simple_user_service__ [classref zeep::http::simple_user_service `simple_user_service`]] In a web application it is often required to limit access to certain URI's to authorized users. To facilitate this in libzeep, the __http_server__ object can use a __security_context__. The __security_context__ itself uses a __user_service__ to provide __user_details__ structs containing the actual data for a user. The __user_details__ structure contains the =username=, encrypted =password= and a list of =roles= this user can play. The roles are simple text strings and should preferrably be very short, like ='USER'= or ='ADMIN'=. The __user_service__ class returns __user_details__ based on a =username= via the pure virtual method [memberref zeep::http::user_service::load_user `load_user`]. A __simple_user_service__ class is available to create very simple user services based on static data. In a real world application you should implement your own user_service and store user information in e.g. a database. [heading example] Let us walk through an example of an application using security. This web application will have two pages, a landing page at the URI =/= (but also at =/index= and =/index.html=) and an admin page at =/admin=. The latter of course will only be accessible by our admin who is called /scott/ and he uses the password /tiger/. [note The code for all example code used in this documentation can be found in the doc/examples subdirectory of the libzeep distribution. ] First start by writing some template code. For this example we will have a common menu template and two templates for the two pages respectively. The interesting part of the menu template is this: [teletype] We're using [@https://www.w3schools.com/w3css/default.asp W3.CSS] as CSS library, albeit we have stored a copy in our own docroot. The two last links in this navigation bar have the =z:if="..."= argument checking whether the current user is authorized. These attributes help in select which of the two will be visible, login or logout, based on the current authentication state. The =#security= class in our =el= library has two more methods called =username= and =hasRole=. The last one returns true when a user has the role asked for. [import ../examples/security-sample.cpp] Next we define a simple __html_controller__ that handles the two pages and also serves stylesheets and scripts. [sample_security_controller] Nothing fancy here, just a simple controller returning pages based on templates. In the template we add a salutation: [teletype]

Hello, !

And here we see the call to =#security.username()=. Note also the use of the elvis operator, if username is not set, 'world' is used instead. Now, in the `main` of our application we first create a __user_service__. [create_user_service] We use the __simple_user_service__ class and provide a static list of users. The __user_service__ should return __user_details__ with an encrypted password and therefore we encrypt the plain text password here. Normally you would store this password encrypted of course. For encrypting password we use the [classref zeep::http::pbkdf2_sha256_password_encoder `pbkdf2_sha256_password_encoder`] class. You can add other password encoders based on other algorithms like bcrypt but you then have to register these yourself using [memberref zeep::http::security_context::register_password_encoder `security_context::register_password_encoder`]; Now we can create the security context. This context will be passed to the __http_server__ class as a pointer and the __http_server__ will take ownership. [create_security_context] The secret passed to the security_context is used in creating signatures for the [@https://en.wikipedia.org/wiki/JSON_Web_Token JWT token]. If you store this secret, the sessions of your users will persist reboots of the server. But in this case we create a new secret after each launch and thus the tokens will expire. Now we add access rules. [add_access_rules] A rule specifies for a glob pattern which users can access it based on the roles these users have. If the list of roles is empty, this means all users should be able to access this URI. When a request is received, the rules are checked in order of which they were added. The first match will be used to check the roles. In this example =/admin= is only accessible by users having role /ADMIN/. All other URI's are allowed by everyone. Note that we could have also created the __security_context__ with the parameter defaultAccessAllowed as `true`, we then would not have needed that last rule. And now we can create the __http_server__, add some controller and start it. [start_server] Note that we add the default [classref zeep::http::login_controller `login_controller`]. This controller takes care of handling =/login= and =/logout= requests. It will also add the required rule for =/login= to the __security_context__ using `add_rule("/login", {});` since otherwise the login page would not be reachable. Make sure you do not add your own rules that prevent access to this page. And that's all. You can now start this server and see that you can access =/= and =/login= without any problem but =/admin= will give you an authentication error. When you login using the credentials =scott/tiger= you can access the =/admin= page and you can now also click the Logout button. [endsect] [section:csrf CSRF protection] The __security_context__ class contains some rudimentary support for protecting against [@https://en.wikipedia.org/wiki/Cross-site_request_forgery CSRF attacks]. The way it works is that the server class add a special `csrf-token` cookie to a session. This cookie is stored in the browser with the flags `SameSite=Lax` and `HttpOnly` which makes it unavailable to malicious scripts that might have been injected in your pages. If a value has been set to this cookie and the __security_context__ class has the `set_validate_csrf` flag set, each `POST` or `SUBMIT` will be checked if there is a `_csrf` parameter and this should contain the same value as the `csrf-token` cookie. So, to use this functionality, call the [memberref zeep::http::security_context::set_validate_csrf `set_validate_csrf`] method on a newly created __security_context__ instance. Next you should make sure each form or `POST` call should contain a `_csrf` parameter with the value stored in the session cookie `csrf-token`. This value can be obtained by calling [memberref zeep::http::context::get_csrf_token `zeep::http::context::get_csrf_token`]. [endsect] [section:crypto Cryptographic routines] A limited number of cryptographic routines are available in ``. These can be divided in the following categories: [heading Encoding] The functions encode and decode functions take a std::string and return the encoded or decoded content. There are three encoding schemes, `hex`, `base64` and `base64url`. The latter is simply `base64` but with a different characterset and without the trailing `=` characters allowing their use in a URL. [heading Hashing] There are three hash algorithm implementations. These are `md5`, `sha1` and `sha256`. All of them take a std::string and return a std::string with the resulting hash. Note that these strings are not human readable and may contain null characters. Therefore you need the encoding routines to convert a hash into something you can print to the screen e.g. [heading HMac] Hashed message authentication codes can be calculated using the available hash functions. Again, these functions take std::string parameters for the message and the key. The result is again a binary std::string. [heading Key derivation] Two key derivation routines are on offer, both of them PBKDF2, one using HMAC SHA1 and the other HMAC SHA256. [endsect:crypto] libzeep-5.1.7/doc/lib-json.qbk0000664000175000017500000000405014176701531016005 0ustar maartenmaarten[/ Documentation for libzeep version 5.0 Copyright Maarten L. Hekkelman, 2020 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ] [chapter JSON [quickbook 1.7] [id libzeep.json] ] [section:descr Introduction] The web application code for libzeep contained an implementation of [@https://en.wikipedia.org/wiki/Unified_Expression_Language expression language], a simple language used in the HTML templates. The variables in this language look and act a bit like objects in JavaScript. And then REST support was added and more support for [@https://www.json.org/ JSON] was needed. For C++ there is already a very good JSON library available from [@https://github.com/nlohmann/json Niels Lohmann]. I tried to use this initially, but it didn't fit well into the rest of libzeep. Still I liked the way it worked and so I tried to create something that is source code compatible, however fancy stuff like JSON Pointer and JSON Patch are not available (yet). This library just provides code to parse and write JSON. It stores the data in an efficient way, allows easy manipulation and also can use the same mechanism of serialization as the XML library. [endsect:descr] [section:elem The JSON element] The main data structure in this library is __json_element__, this is the representation of a JSON object and thus can contain various types of data. See this synopsis on how to use it. [import ../examples/synopsis-json.cpp] [synopsis_json_main] There is also support for `enum`s, see the following example. The idea is, you call the `std::value_serializer::init` once to initialize the global mapping of enum values to strings. The name parameter is optional, but required if you use this serializer also in a SOAP controller. [enum_support] [enum_usage] [heading STL-like interface] The __json_element__ class acts as an STL container, see the class reference for more information. But to give you an idea: [stl_interface] [endsect:elem]libzeep-5.1.7/doc/lib-xml.qbk0000664000175000017500000001510414176701531015636 0ustar maartenmaarten[/ Documentation for libzeep version 5.0 Copyright Maarten L. Hekkelman, 2020 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ] [chapter XML [quickbook 1.7] [id libzeep.xml] ] [section:descr Introduction] The core of this library is a validating XML parser with DTD processing and all. On top of this are implemented an API for manipulating XML data in a DOM like fashion and a serialization API. As a bonus there's also an XPath implementation, albeit this is limited to XPath 1.0. [endsect:descr] [section:api The DOM API] libzeep uses a modern C++ way of accessing and manipulating data. To give an idea have a look at the following code. [import ../examples/synopsis-xml.cpp] [synopsis_xml_main] [heading XML nodes] The class __node__ is the base class for all classes in the DOM API. The class is not copy constructable and subclasses use move semantics to offer a simple API while still being memory and performance efficient. Nodes can have siblings and a parent but no children. The class __element__ is the main class, it implements a full XML node with child nodes and attributes. The children are stored as a linked list and same goes for the attributes. The class __text__ contains the text between XML elements. A __cdata__ class is derived from __text__ and other possible child nodes for an XML element are __processing_instruction__ and __comment__. XML elements also contain attributes, stored in the __attribute__ class. Namespace information is stored in these attributes as well. Attributes support structured binding, so the following works: zeep::xml::attribute a("x", "1"); auto& [name, value] = a; // name == "x", value == "1" [endsect:api] [section:xml_io Input and output] The class __document__ derives from __element__ can load from and write to files. [heading streaming I/O] You can use std::iostream to read and write __document__ objects. Reading is as simple as: zeep::xml::document doc; std::cin >> doc; Writing is just as simple. A warning though, round trip fidelity is not guaranteed. There are a few issues with that. First of all, the default is to replace CDATA sections in a file with their content. If this is not the desired behaviour you can call [memberref zeep::xml::document::set_preserve_cdata `set_preserve_cdata(true)`]. Another issue is that text nodes containing only white space are present in documents read from disk while these are absent by default in documents created on the fly. When writing out XML using `iostream` you can specify to wrap and indent a document. But if the document was read in, the result will have extraneous spacing. Specifying indentation is BTW done like this: std::cout << std::setw(2) << doc; That will indent with two spaces for each level. [heading validation] This will not validate the XML using the DTD by default. If you do want to validate and process the DTD, you have to specify where to find this DTD and other external entities. You can either use [memberref zeep::xml::document::set_base_dir `set_base_dir`] or you can specify an entity_loader using [memberref zeep::xml::document::set_entity_loader `set_entity_loader`] As an example, take the following DTD file[teletype] And an XML document containing[teletype] &hello; When we want to see the `&hello;` entity replaced with `'Hello, world!'` as specified in the DTD, we need to provide a way to load this DTD. To do this, look at the following code. Of course, in this example a simple call to [memberref zeep::xml::document::set_base_dir `set_base_dir`] would have been sufficient. [import ../examples/validating-xml-sample.cpp] [xml_validation_sample] [endsect:xml_io] [section:ser Serialization] An alternative way to read/write XML files is using serialization. To do this, we first construct a structure called Person. We add a templated function to this struct just like in `boost::serialize` and then we can read the file. [import ../examples/serialize-xml.cpp] [synopsis_xml_serialize] [heading attributes] Suppose you want to serialize a value into a XML attribute, you would have to replace `zeep::make_nvp` with `zeep::make_attribute_nvp`. [heading custom types] What happens during serialization is deconstruction of structured data types into parts that can be converted into text strings. For this final conversion there are __value_serializer__ helper classes. __value_serializer__ is a template and specializations for the default types are given in ``. You can create your own specializations for this class for custom data types, look at the one for `boost::posix_time::ptime` for inspiration. [heading enums] For conversion of enum's you can use the __value_serializer__ specialization for enums: [c++] enum class MyEnum { FOO, BAR }; __value_serializer__::instance() ("foo", MyEnum::FOO) ("bar", MyEnum::BAR); There's also a new interface, somewhat more intuitive from a modern C++ viewpoint: [import ../examples/synopsis-json.cpp] [enum_support] [endsect:ser] [section:xpath XPath 1.0] Libzeep comes with a [@http://www.w3.org/TR/xpath/ XPath 1.0] implementation. You can use this to locate elements in a DOM tree easily. For a complete description of the XPath specification you should read the documentation at e.g. [@http://www.w3.org/TR/xpath/] or [@https://www.w3schools.com/xml/xpath_intro.asp]. The way it works in libzeep is that you can call `find()` on an __element__ object and it will return a `zeep::xml::element_set` object which is actually a `std::list` of __element__ pointers of the elements that conform to the specification in XPath passed as parameter to `find()`. An alternative method `find_first()` can be used to return only the first element. An example where we look for the first person in our test file with the lastname Jones: __element__* jones = doc.child()->find_first("//person[lastname='Jones']"); [heading variables] XPath constructs can reference variables. As an example, suppose you need to find nodes in a special XML Namespace but you do not want to find out what the prefix of this Namespace is, you could do something like this: [import ../examples/xpath-sample.cpp] [xpath_example] [note Please note that the evaluation of an XPath returns pointers to XML nodes. Of course these are only valid as long as you do not modify the the document in which they are contained.] [endsect] libzeep-5.1.7/doc/libzeep-doc.qbk0000664000175000017500000000332114176701531016465 0ustar maartenmaarten[/ Documentation for libzeep version 5.0 Copyright Maarten L. Hekkelman, 2020 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ] [book libzeep [quickbook 1.7] [version 5.0] [id quickbook] [copyright 2020 Maarten L. Hekkelman] [authors [Hekkelman, Maarten L.]] [license Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at [@http://www.boost.org/LICENSE_1_0.txt]) ] [source-mode c++] ] [def __document__ [classref zeep::xml::document `zeep::xml::document`]] [def __document__child__ [memberref zeep::xml::document::child `child`]] [def __element__ [classref zeep::xml::element `element`]] [def __node__ [classref zeep::xml::node `zeep::xml::node`]] [def __element__ [classref zeep::xml::element `zeep::xml::element`]] [def __text__ [classref zeep::xml::text `zeep::xml::text`]] [def __cdata__ [classref zeep::xml::cdata `zeep::xml::cdata`]] [def __comment__ [classref zeep::xml::comment `zeep::xml::comment`]] [def __zeep_serializer__ [classref zeep::xml::serializer `zeep::xml::serializer`]] [def __processing_instruction__ [classref zeep::xml::processing_instruction `zeep::xml::processing_instruction`]] [def __preforked_server__ [classref zeep::http::preforked_server]] [def __char_streambuf__ [classref zeep::char_streambuf]] [def __value_serializer__ [classref zeep::value_serializer `zeep::value_serializer`]] [def __json_element__ [classref zeep::json::element `zeep::json::element`]] [include introduction.qbk] [include lib-xml.qbk] [include lib-json.qbk] [include lib-http.qbk] [include reference.qbk] libzeep-5.1.7/doc/libzeep.30000664000175000017500000000206314176701531015311 0ustar maartenmaarten.TH libzeep 3 "10-mar-2021" "version 5.1" "subroutine" .SH NAME libzeep \- A C++ library for working with XML, XPath, JSON, SOAP and REST servers and web applications .SH NOTE See HTML pages for more up-to-date documentation. E.g. at \fIhttps://www.hekkelman.com/libzeep-doc/\fR or the documentation installed at your local disk. .SH DESCRIPTION This library is a Swiss army knife for building web applications in C++. It contains a validating XML parser, XPath support, JSON parser and webserver. .sp The webserver implementation was loosly inspired by Spring. It works with the concept of controllers that handle requests to parts in the URL namespace. Three specializations are available, for handling plain HTML, REST and SOAP requests respectively. .sp The HTML controller can use templating. This code is a clean room reimplementation of the Thymeleaf template processing engine that comes with Spring. .sp Support for security in the form of JWT is available too. .SH BUGS Undoubtedly libzeep will contain bugs. Please report any bug you find to maarten@hekkelman.com libzeep-5.1.7/doc/logo.xcf0000664000175000017500000000705014176701531015236 0ustar maartenmaartengimp xcf filed2BBG gimp-commentCreated with GIMPgimp-image-grid(style solid) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) ¶_ $Xwebapps in C++ÿ     !.gimp-text-layer(text "webapps in C++") (font "PMN Caecilia LT Italic") (font-size 12.000000) (font-size-unit pixels) (antialias yes) (language "nl-nl") (base-direction ltr) (color (color-rgb 0.000000 0.000000 0.000000)) (justify center) (box-mode dynamic) (box-unit pixels) (hinting yes) «XÃSX׬ÀÀÀü€ÿ‚!ýUžýxj<ýV+ΈÿdÔ€ÿJ;Ê嵦Fžáˆ¯Ü耞ÿ?›ðˆžÿ?›ðˆàç¡ö|ÿbuòOqå›ϨN0Á¤5ã-å½ L ðÃee½’qò½’qò<ÁÄ÷I­€p âо7Z²ÅrŽK{Óì+Ì¢rÔƒëÔƒë ±|÷µ/Å™ÓòÊ+˜®È…<ßï#*ÍV¡Ù[ï)'Íï)'Í)Ÿ|÷ÎãN.µÏÀJ(¡ËŠfm¦ éÀ_J­¡©Gæ¾aæ¾aƒMD¾÷âöO’ÏTæÂšÞ µåÔjÎÜÝqÅâ_«ä!øÞÝq!øÞÝqbÜÞÒ;õüÑ Òrÿ]ý:¬ý:¬5ýS”ýS”4û,ÿÿuû,ÿÿuVhhhKùEºÚæÏ*øcÒ6¤8ü í(ý ýÐýÐýJÇýÐýÐý_®þpÿÿý¤pÿÿù¤@Ýþ0ýÐýÐøÌžÛýÐýÐùŽÚåß…ýÐýÐ`,Ulibzeepÿ     Tgimp-text-layer8(markup "libzeep") (font "PMN Caecilia LT Bold") (font-size 32.000000) (font-size-unit pixels) (antialias yes) (language "nl-nl") (base-direction ltr) (color (color-rgb 0.000000 0.000000 0.000000)) (justify center) (box-mode dynamic) (box-unit pixels) (hinting yes) kUƒ U— 퀀€ û@ãÜ10þ„ÿÿþZøËÿÿ¶èÿÿþÍ)þ„ÿÿþYøÊÿÿµèÿÿþÈ+ûYÿÿWû>ãÜ1üåÿÃ+û[ÿÿV üçÿ¿+û]ÿÿT üèÿº+û^ÿÿS üêÿµ+ø`ÿÿQHÿÿþNõëÿ¬eÍóñÁVþÿÿþØ÷ ’ØõõÔˆò ’ØõbÿÿPHÿÿþMûíÿš®ÿÿþþ›ÿÿþ×ýOõÿÿýå)ýOõÿÿûdÿÿNûeÿÿLîïÿÞðbcñÿÿC§ÿ«ß ÜÿüQ+÷ÿ¬1 UäÿÒ+÷ÿ¬1 eÿÿMûgÿÿKûðÿÿLïdÿÿ¥²ÿ“Úÿþaû¨ÿØöOÿÿG¨ÿØûgÿÿKûhÿÿJüòÿèûÿÿÒúÎÿÿrýñÿÿü„ñÿÿûiÿÿJûjÿÿHüóÿÄüûÿ×úÀÿÿ„þÿ ÿý›ÿÿûjÿÿHûkÿÿGüõÿ»ûÿÿÀú¯ÿÿ–ûÿÿ¼ûÿÿ¼ûlÿÿGûmÿÿFü÷ÿµûVÿÿúÿÿ§úóÿò úóÿò ûnÿÿEûnÿÿEüøÿ®úÑÿÿ7ïŠÿÿ¶aÿè§ÿÿ“û§ÿÿ“ûoÿÿDûoÿÿDôúÿÏ<:Áÿÿžúuÿÿ¶ åxÿÛ'óÿÿ®8 &Y¢'óÿÿ®8ðÿÿüðÿÿþðþûÿÿú¡ÿÿþÎý@êÿÿþäý@êÿÿýðÿÿüðÿÿþðö>ŽÇìûîÒœ8þÿÿþÂö{Æïþÿà­Wû{Æï¿vvvçøõÔˆ`ÿÿ÷å`ËóòÄ^ÿûå)`ÿÿýÓ„ÿÿè¤UäÿÒ¡ÿÝü‰GãÿÿeõOÿÿG£ÿÿ­úCÿÿÑÿÿø„¥ÿÿBûâÿþÿÿø›¦ÿÿûÂÿÿû¨ÿÿûÕÿÿûªÿÿûùÿÓû¬ÿÿõšÿÿv &Y¢ò­ÿÿQ(œÿÿÔ ÿÿþäþ¯ÿÿöÏþÿà­Wõ±ÿ÷½íûê¹c ü²ÿéü´ÿæü¶ÿãü·ÿáþÿÿþà þÿÿþà*d2 Achtergrondÿ      Ød2 ðd2 €ÿ €ÿ €ÿÿÿÿ2libzeep-5.1.7/doc/reference.qbk0000664000175000017500000000060014176701531016223 0ustar maartenmaarten[/ Documentation for libzeep version 5.0 Copyright Maarten L. Hekkelman, 2020 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This document contains the reference ] [reference Reference [quickbook 1.7] [id libzeep.ref] ] [xinclude ./autodoc.xml] libzeep-5.1.7/doc/tools/0000775000175000017500000000000014176701531014732 5ustar maartenmaartenlibzeep-5.1.7/doc/tools/quickbook.sh.in0000775000175000017500000000130014176701531017657 0ustar maartenmaarten#!/bin/bash set -e # Run the original quickbook first @QUICKBOOK@ $@ # And if it fails, exit if [[ $? -ne 0 ]] ; then exit $? fi # Now try to find out what was written for i in "$@"; do key="$i" case $key in --output-file=*) OUTPUTFILE="${i#*=}" shift # past argument=value ;; --output-file) OUTPUTFILE="$2" shift # past argument shift # past value ;; *) # unknown option shift # past argument ;; esac done if [[ "x$OUTPUTFILE" != "x" && "x$SOURCE_DATE_EPOCH" != "x" ]] ; then BUILD_DATE="$(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +'%Y-%m-%d %H:%M:%S')" sed -i -e "s/\$Date:.\\+\\$/$BUILD_DATE/g" $OUTPUTFILE fi libzeep-5.1.7/examples/0000775000175000017500000000000014176701531014643 5ustar maartenmaartenlibzeep-5.1.7/examples/GNUmakefile0000664000175000017500000000320614176701531016716 0ustar maartenmaarten# Makefile for the libzeep-http library # # Copyright Maarten L. Hekkelman, UMC St. Radboud 2008-2013. # Copyright Maarten L. Hekkelman, 2014-2019 # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) # # This makefile assumes you already installed libzeep .PHONY: firstTarget firstTarget: all # main build variables CXXFLAGS += -pthread -std=c++17 WARNINGS += all no-multichar ifeq "$(DEBUG)" "1" DEFINES += DEBUG CXXFLAGS += -g -O0 LDFLAGS += -g else CXXFLAGS += -O3 DEFINES += NDEBUG endif CXXFLAGS += $(DEFINES:%=-D%) CXXFLAGS += $(WARNINGS:%=-W%) OBJDIR = obj ifeq "$(DEBUG)" "1" OBJDIR := $(OBJDIR).dbg endif ifeq "$(STAGE)" "1" CXXFLAGS += -I ../include LDFLAGS += -L ../lib endif BINDIR = bin $(OBJDIR) $(BINDIR): mkdir -p $@ $(OBJDIR)/%.o: %.cpp | $(OBJDIR) @ echo "cc>" $< @ $(CXX) -MD -c -o $@ $< $(CFLAGS) $(CXXFLAGS) .PHONY: clean clean: rm -rf $(OBJDIR)/* $(EXAMPLES:%=$(BINDIR)/%) define EXAMPLE_template = -include $$(OBJDIR)/$(1).d $(1)_OBJECTS = $$(OBJDIR)/$(1).o $(BINDIR)/$(1): $$($(1)_OBJECTS) | $(BINDIR) @ echo "ld> $(1)" @ $(CXX) -o $$@ $$($(1)_OBJECTS) $$(CFLAGS) $$(CXXFLAGS) $(LDFLAGS) -lzeep $(LIBS) endef EXAMPLES = \ http-server-0 http-server-1 http-server-2 \ serialize-xml synopsis-json synopsis-xml validating-xml-sample xpath-sample \ synopsis-el-1 security-sample rest-sample rest-sample-2 $(foreach part,$(EXAMPLES),$(eval $(call EXAMPLE_template,$(part)))) .PHONY: examples examples: $(EXAMPLES:%=$(BINDIR)/%) all: examples FORCE: libzeep-5.1.7/examples/docroot/0000775000175000017500000000000014176701531016314 5ustar maartenmaartenlibzeep-5.1.7/examples/docroot/css/0000775000175000017500000000000014176701531017104 5ustar maartenmaartenlibzeep-5.1.7/examples/docroot/css/w3.css0000664000175000017500000005550114176701531020155 0ustar maartenmaarten/* W3.CSS 4.13 June 2019 by Jan Egil and Borge Refsnes */ html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit} /* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */ html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0} article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item} audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline} audio:not([controls]){display:none;height:0}[hidden],template{display:none} a{background-color:transparent}a:active,a:hover{outline-width:0} abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted} b,strong{font-weight:bolder}dfn{font-style:italic}mark{background:#ff0;color:#000} small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}img{border-style:none} code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible} button,input,select,textarea,optgroup{font:inherit;margin:0}optgroup{font-weight:bold} button,input{overflow:visible}button,select{text-transform:none} button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button} button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0} button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText} fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em} legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto} [type=checkbox],[type=radio]{padding:0} [type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto} [type=search]{-webkit-appearance:textfield;outline-offset:-2px} [type=search]::-webkit-search-decoration{-webkit-appearance:none} ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit} /* End extract */ html,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden} h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.w3-serif{font-family:serif} h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin:10px 0}.w3-wide{letter-spacing:4px} hr{border:0;border-top:1px solid #eee;margin:20px 0} .w3-image{max-width:100%;height:auto}img{vertical-align:middle}a{color:inherit} .w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.w3-table-all{border:1px solid #ccc} .w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1} .w3-table-all tr:nth-child(odd){background-color:#fff}.w3-table-all tr:nth-child(even){background-color:#f1f1f1} .w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}.w3-centered tr th,.w3-centered tr td{text-align:center} .w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top} .w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px} .w3-btn,.w3-button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap} .w3-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)} .w3-btn,.w3-button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} .w3-disabled,.w3-btn:disabled,.w3-button:disabled{cursor:not-allowed;opacity:0.3}.w3-disabled *,:disabled *{pointer-events:none} .w3-btn.w3-disabled:hover,.w3-btn:disabled:hover{box-shadow:none} .w3-badge,.w3-tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.w3-badge{border-radius:50%} .w3-ul{list-style-type:none;padding:0;margin:0}.w3-ul li{padding:8px 16px;border-bottom:1px solid #ddd}.w3-ul li:last-child{border-bottom:none} .w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block} .w3-ripple:active{opacity:0.5}.w3-ripple{transition:opacity 0s} .w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #ccc;width:100%} .w3-select{padding:9px 0;width:100%;border:none;border-bottom:1px solid #ccc} .w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer} .w3-dropdown-hover:hover .w3-dropdown-content{display:block} .w3-dropdown-hover:first-child,.w3-dropdown-click:hover{background-color:#ccc;color:#000} .w3-dropdown-hover:hover > .w3-button:first-child,.w3-dropdown-click:hover > .w3-button:first-child{background-color:#ccc;color:#000} .w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1} .w3-check,.w3-radio{width:24px;height:24px;position:relative;top:6px} .w3-sidebar{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto} .w3-bar-block .w3-dropdown-hover,.w3-bar-block .w3-dropdown-click{width:100%} .w3-bar-block .w3-dropdown-hover .w3-dropdown-content,.w3-bar-block .w3-dropdown-click .w3-dropdown-content{min-width:100%} .w3-bar-block .w3-dropdown-hover .w3-button,.w3-bar-block .w3-dropdown-click .w3-button{width:100%;text-align:left;padding:8px 16px} .w3-main,#main{transition:margin-left .4s} .w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)} .w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px} .w3-bar{width:100%;overflow:hidden}.w3-center .w3-bar{display:inline-block;width:auto} .w3-bar .w3-bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0} .w3-bar .w3-dropdown-hover,.w3-bar .w3-dropdown-click{position:static;float:left} .w3-bar .w3-button{white-space:normal} .w3-bar-block .w3-bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0} .w3-bar-block.w3-center .w3-bar-item{text-align:center}.w3-block{display:block;width:100%} .w3-responsive{display:block;overflow-x:auto} .w3-container:after,.w3-container:before,.w3-panel:after,.w3-panel:before,.w3-row:after,.w3-row:before,.w3-row-padding:after,.w3-row-padding:before, .w3-cell-row:before,.w3-cell-row:after,.w3-clear:after,.w3-clear:before,.w3-bar:before,.w3-bar:after{content:"";display:table;clear:both} .w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%} .w3-col.s1{width:8.33333%}.w3-col.s2{width:16.66666%}.w3-col.s3{width:24.99999%}.w3-col.s4{width:33.33333%} .w3-col.s5{width:41.66666%}.w3-col.s6{width:49.99999%}.w3-col.s7{width:58.33333%}.w3-col.s8{width:66.66666%} .w3-col.s9{width:74.99999%}.w3-col.s10{width:83.33333%}.w3-col.s11{width:91.66666%}.w3-col.s12{width:99.99999%} @media (min-width:601px){.w3-col.m1{width:8.33333%}.w3-col.m2{width:16.66666%}.w3-col.m3,.w3-quarter{width:24.99999%}.w3-col.m4,.w3-third{width:33.33333%} .w3-col.m5{width:41.66666%}.w3-col.m6,.w3-half{width:49.99999%}.w3-col.m7{width:58.33333%}.w3-col.m8,.w3-twothird{width:66.66666%} .w3-col.m9,.w3-threequarter{width:74.99999%}.w3-col.m10{width:83.33333%}.w3-col.m11{width:91.66666%}.w3-col.m12{width:99.99999%}} @media (min-width:993px){.w3-col.l1{width:8.33333%}.w3-col.l2{width:16.66666%}.w3-col.l3{width:24.99999%}.w3-col.l4{width:33.33333%} .w3-col.l5{width:41.66666%}.w3-col.l6{width:49.99999%}.w3-col.l7{width:58.33333%}.w3-col.l8{width:66.66666%} .w3-col.l9{width:74.99999%}.w3-col.l10{width:83.33333%}.w3-col.l11{width:91.66666%}.w3-col.l12{width:99.99999%}} .w3-rest{overflow:hidden}.w3-stretch{margin-left:-16px;margin-right:-16px} .w3-content,.w3-auto{margin-left:auto;margin-right:auto}.w3-content{max-width:980px}.w3-auto{max-width:1140px} .w3-cell-row{display:table;width:100%}.w3-cell{display:table-cell} .w3-cell-top{vertical-align:top}.w3-cell-middle{vertical-align:middle}.w3-cell-bottom{vertical-align:bottom} .w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important} @media (max-width:1205px){.w3-auto{max-width:95%}} @media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px} .w3-dropdown-hover.w3-mobile .w3-dropdown-content,.w3-dropdown-click.w3-mobile .w3-dropdown-content{position:relative} .w3-hide-small{display:none!important}.w3-mobile{display:block;width:100%!important}.w3-bar-item.w3-mobile,.w3-dropdown-hover.w3-mobile,.w3-dropdown-click.w3-mobile{text-align:center} .w3-dropdown-hover.w3-mobile,.w3-dropdown-hover.w3-mobile .w3-btn,.w3-dropdown-hover.w3-mobile .w3-button,.w3-dropdown-click.w3-mobile,.w3-dropdown-click.w3-mobile .w3-btn,.w3-dropdown-click.w3-mobile .w3-button{width:100%}} @media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}} @media (min-width:993px){.w3-modal-content{width:900px}.w3-hide-large{display:none!important}.w3-sidebar.w3-collapse{display:block!important}} @media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}} @media (max-width:992px){.w3-sidebar.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}.w3-auto{max-width:100%}} .w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0} .w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2} .w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0} .w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0} .w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)} .w3-display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)} .w3-display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)} .w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} .w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} .w3-display-container:hover .w3-display-hover{display:block}.w3-display-container:hover span.w3-display-hover{display:inline-block}.w3-display-hover{display:none} .w3-display-position{position:absolute} .w3-circle{border-radius:50%} .w3-round-small{border-radius:2px}.w3-round,.w3-round-medium{border-radius:4px}.w3-round-large{border-radius:8px}.w3-round-xlarge{border-radius:16px}.w3-round-xxlarge{border-radius:32px} .w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px} .w3-container,.w3-panel{padding:0.01em 16px}.w3-panel{margin-top:16px;margin-bottom:16px} .w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px} .w3-code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word} .w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%} .w3-card,.w3-card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)} .w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)} .w3-spin{animation:w3-spin 2s infinite linear}@keyframes w3-spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}} .w3-animate-fading{animation:fading 10s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}} .w3-animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}} .w3-animate-top{position:relative;animation:animatetop 0.4s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}} .w3-animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}} .w3-animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}} .w3-animate-bottom{position:relative;animation:animatebottom 0.4s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}} .w3-animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}} .w3-animate-input{transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important} .w3-opacity,.w3-hover-opacity:hover{opacity:0.60}.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1} .w3-opacity-max{opacity:0.25}.w3-opacity-min{opacity:0.75} .w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{filter:grayscale(100%)} .w3-greyscale,.w3-grayscale{filter:grayscale(75%)}.w3-greyscale-min,.w3-grayscale-min{filter:grayscale(50%)} .w3-sepia{filter:sepia(75%)}.w3-sepia-max,.w3-hover-sepia:hover{filter:sepia(100%)}.w3-sepia-min{filter:sepia(50%)} .w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important} .w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important} .w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}.w3-justify{text-align:justify!important}.w3-center{text-align:center!important} .w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important} .w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important} .w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important} .w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important} .w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important} .w3-section,.w3-code{margin-top:16px!important;margin-bottom:16px!important} .w3-margin{margin:16px!important}.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important} .w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important} .w3-padding-small{padding:4px 8px!important}.w3-padding{padding:8px 16px!important}.w3-padding-large{padding:12px 24px!important} .w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important} .w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important} .w3-padding-64{padding-top:64px!important;padding-bottom:64px!important} .w3-left{float:left!important}.w3-right{float:right!important} .w3-button:hover{color:#000!important;background-color:#ccc!important} .w3-transparent,.w3-hover-none:hover{background-color:transparent!important} .w3-hover-none:hover{box-shadow:none!important} /* Colors */ .w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important} .w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important} .w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important} .w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important} .w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important} .w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important} .w3-blue-grey,.w3-hover-blue-grey:hover,.w3-blue-gray,.w3-hover-blue-gray:hover{color:#fff!important;background-color:#607d8b!important} .w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important} .w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important} .w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important} .w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important} .w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important} .w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important} .w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important} .w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important} .w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important} .w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important} .w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important} .w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important} .w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important} .w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important} .w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important} .w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important} .w3-grey,.w3-hover-grey:hover,.w3-gray,.w3-hover-gray:hover{color:#000!important;background-color:#9e9e9e!important} .w3-light-grey,.w3-hover-light-grey:hover,.w3-light-gray,.w3-hover-light-gray:hover{color:#000!important;background-color:#f1f1f1!important} .w3-dark-grey,.w3-hover-dark-grey:hover,.w3-dark-gray,.w3-hover-dark-gray:hover{color:#fff!important;background-color:#616161!important} .w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffdddd!important} .w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#ddffdd!important} .w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffcc!important} .w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#ddffff!important} .w3-text-amber,.w3-hover-text-amber:hover{color:#ffc107!important} .w3-text-aqua,.w3-hover-text-aqua:hover{color:#00ffff!important} .w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important} .w3-text-light-blue,.w3-hover-text-light-blue:hover{color:#87CEEB!important} .w3-text-brown,.w3-hover-text-brown:hover{color:#795548!important} .w3-text-cyan,.w3-hover-text-cyan:hover{color:#00bcd4!important} .w3-text-blue-grey,.w3-hover-text-blue-grey:hover,.w3-text-blue-gray,.w3-hover-text-blue-gray:hover{color:#607d8b!important} .w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important} .w3-text-light-green,.w3-hover-text-light-green:hover{color:#8bc34a!important} .w3-text-indigo,.w3-hover-text-indigo:hover{color:#3f51b5!important} .w3-text-khaki,.w3-hover-text-khaki:hover{color:#b4aa50!important} .w3-text-lime,.w3-hover-text-lime:hover{color:#cddc39!important} .w3-text-orange,.w3-hover-text-orange:hover{color:#ff9800!important} .w3-text-deep-orange,.w3-hover-text-deep-orange:hover{color:#ff5722!important} .w3-text-pink,.w3-hover-text-pink:hover{color:#e91e63!important} .w3-text-purple,.w3-hover-text-purple:hover{color:#9c27b0!important} .w3-text-deep-purple,.w3-hover-text-deep-purple:hover{color:#673ab7!important} .w3-text-red,.w3-hover-text-red:hover{color:#f44336!important} .w3-text-sand,.w3-hover-text-sand:hover{color:#fdf5e6!important} .w3-text-teal,.w3-hover-text-teal:hover{color:#009688!important} .w3-text-yellow,.w3-hover-text-yellow:hover{color:#d2be0e!important} .w3-text-white,.w3-hover-text-white:hover{color:#fff!important} .w3-text-black,.w3-hover-text-black:hover{color:#000!important} .w3-text-grey,.w3-hover-text-grey:hover,.w3-text-gray,.w3-hover-text-gray:hover{color:#757575!important} .w3-text-light-grey,.w3-hover-text-light-grey:hover,.w3-text-light-gray,.w3-hover-text-light-gray:hover{color:#f1f1f1!important} .w3-text-dark-grey,.w3-hover-text-dark-grey:hover,.w3-text-dark-gray,.w3-hover-text-dark-gray:hover{color:#3a3a3a!important} .w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important} .w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#00ffff!important} .w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important} .w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87CEEB!important} .w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important} .w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important} .w3-border-blue-grey,.w3-hover-border-blue-grey:hover,.w3-border-blue-gray,.w3-hover-border-blue-gray:hover{border-color:#607d8b!important} .w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important} .w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important} .w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important} .w3-border-khaki,.w3-hover-border-khaki:hover{border-color:#f0e68c!important} .w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important} .w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important} .w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important} .w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important} .w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important} .w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important} .w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important} .w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important} .w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important} .w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important} .w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important} .w3-border-black,.w3-hover-border-black:hover{border-color:#000!important} .w3-border-grey,.w3-hover-border-grey:hover,.w3-border-gray,.w3-hover-border-gray:hover{border-color:#9e9e9e!important} .w3-border-light-grey,.w3-hover-border-light-grey:hover,.w3-border-light-gray,.w3-hover-border-light-gray:hover{border-color:#f1f1f1!important} .w3-border-dark-grey,.w3-hover-border-dark-grey:hover,.w3-border-dark-gray,.w3-hover-border-dark-gray:hover{border-color:#616161!important} .w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important} .w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffcc!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important}libzeep-5.1.7/examples/docroot/hello.xhtml0000664000175000017500000000036214176701531020476 0ustar maartenmaarten Hello

Hello, !

libzeep-5.1.7/examples/docroot/scripts/0000775000175000017500000000000014176701531020003 5ustar maartenmaartenlibzeep-5.1.7/examples/docroot/scripts/security.js0000664000175000017500000000000014176701531022176 0ustar maartenmaartenlibzeep-5.1.7/examples/docroot/scripts/shop-2.js0000664000175000017500000000576414176701531021465 0ustar maartenmaarten/* simple shopping cart example */ class ShoppingCart { constructor(cart) { this.cartContent = cart; this.cartContent.items = []; const accountForm = document.getElementById('account-form'); accountForm.style.display = 'none'; const shoppingPage = document.getElementById('shopping-page'); shoppingPage.style.display = 'unset'; document.getElementById('user-name').textContent = name; [...document.getElementsByClassName('shopping-item')] .forEach(item => { item.addEventListener('click', (evt) => { evt.preventDefault(); this.addToCart(item.dataset.item); }) }); } addToCart(item) { const ix = this.cartContent.items.findIndex((i) => i.name === item); if (ix < 0) this.cartContent.items.push({ name: item, count: 1 }); else this.cartContent.items[ix].count += 1; this.updateOrder(); } deleteCartItem(item) { const ix = this.cartContent.items.findIndex((i) => i.name === item); if (ix < 0) this.cartContent.items.push({ name: item, count: 1 }); else if (this.cartContent.items[ix].count == 1) this.cartContent.items.splice(ix, 1); else this.cartContent.items[ix].count -= 1; this.updateOrder(); } updateOrder() { fetch(`/cart/${this.cartContent.cartID}`, { method: "PUT", headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(this.cartContent) }) .then(r => { if (! r.ok) throw 'error'; const cartListContainer = document.getElementById('cart-list-container'); if (this.cartContent.items.length == 0) cartListContainer.style.display = 'none'; else { cartListContainer.style.display = 'initial'; const cartList = document.getElementById('cart-list'); [...cartList.querySelectorAll('li:not(:first-child)')] .forEach(li => li.remove()); const li = cartListContainer.querySelector('li'); this.cartContent.items.forEach(item => { const lic = li.cloneNode(true); lic.querySelector('span.text-placeholder').textContent = `${item.name} (${item.count})`; const removeBtn = lic.querySelector('span.cart-item'); removeBtn.addEventListener('click', (li) => this.deleteCartItem(item.name)); cartList.append(lic); }); } }) .catch(err => { console.log(err); alert('Failed to add item to cart'); }); } }; window.addEventListener('load', () => { const createCartBtn = document.getElementById('create-cart-btn'); createCartBtn.addEventListener('click', (evt) => { evt.preventDefault(); const client = document.forms['client-form']['client-name'].value; if (client == "") alert("Please enter a user name"); else { const newCart = { client: client }; fetch('/cart', { method: "POST", headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(newCart) }) .then(r => r.json()) .then(cartID => { newCart.cartID = cartID; new ShoppingCart(newCart); }) .catch(err => { console.log(err); alert("failed to create shopping cart"); }) } }); });libzeep-5.1.7/examples/docroot/scripts/shop.js0000664000175000017500000000503014176701531021310 0ustar maartenmaarten/* simple shopping cart example */ class ShoppingCart { constructor(name, id) { this.name = name; this.cartID = id; const accountForm = document.getElementById('account-form'); accountForm.style.display = 'none'; const shoppingPage = document.getElementById('shopping-page'); shoppingPage.style.display = 'unset'; document.getElementById('user-name').textContent = name; [...document.getElementsByClassName('shopping-item')] .forEach(item => { item.addEventListener('click', (evt) => { evt.preventDefault(); this.addToCart(item.dataset.item); }) }); } addToCart(item) { const fd = new FormData(); fd.append("name", item); fetch(`/cart/${this.cartID}/item`, { method: "POST", body: fd}) .then(r => r.json()) .then(order => this.updateOrder(order)) .catch(err => { console.log(err); alert(`Failed to add ${item} to cart`); }); } deleteCartItem(item) { const fd = new FormData(); fd.append("name", item); fetch(`/cart/${this.cartID}/item`, { method: "DELETE", body: fd}) .then(r => r.json()) .then(order => this.updateOrder(order)) .catch(err => { console.log(err); alert(`Failed to remove ${item} from cart`); }); } updateOrder(order) { const cartListContainer = document.getElementById('cart-list-container'); if (order.items.length == 0) cartListContainer.style.display = 'none'; else { cartListContainer.style.display = 'initial'; const cartList = document.getElementById('cart-list'); [...cartList.querySelectorAll('li:not(:first-child)')] .forEach(li => li.remove()); const li = cartListContainer.querySelector('li'); order.items.forEach(item => { const lic = li.cloneNode(true); lic.querySelector('span.text-placeholder').textContent = `${item.name} (${item.count})`; const removeBtn = lic.querySelector('span.cart-item'); removeBtn.addEventListener('click', (li) => this.deleteCartItem(item.name)); cartList.append(lic); }); } console.log(order); } }; window.addEventListener('load', () => { const createCartBtn = document.getElementById('create-cart-btn'); createCartBtn.addEventListener('click', (evt) => { evt.preventDefault(); const client = document.forms['client-form']['client-name'].value; if (client == "") alert("Please enter a user name"); else { fetch('/cart', { method: "POST" }) .then(r => r.json()) .then(cartID => new ShoppingCart(client, cartID)) .catch(err => { console.log(err); alert("failed to create shopping cart"); }) } }); });libzeep-5.1.7/examples/docroot/security-admin.xhtml0000664000175000017500000000074314176701531022333 0ustar maartenmaarten Admin page

Hello, , you're now on the Admin page

libzeep-5.1.7/examples/docroot/security-hello.xhtml0000664000175000017500000000071014176701531022340 0ustar maartenmaarten Landing page

Hello, !

libzeep-5.1.7/examples/docroot/security-menu.xhtml0000664000175000017500000000137614176701531022212 0ustar maartenmaarten Landing page libzeep-5.1.7/examples/docroot/shop-2.xhtml0000664000175000017500000000435014176701531020504 0ustar maartenmaarten ]> Hello

Account info

libzeep-5.1.7/examples/docroot/shop.xhtml0000664000175000017500000000434614176701531020352 0ustar maartenmaarten ]> Hello

Account info

libzeep-5.1.7/examples/http-server-0.cpp0000664000175000017500000000060414176701531017767 0ustar maartenmaarten/* compile: clang++ -o http-server-0 http-server-0.cpp -I ../../include/ ../../lib/libzeep-http.a ../../lib/libzeep-xml.a ../../lib/libzeep-json.a -std=c++17 -lstdc++fs -I ~/projects/boost_1_73_0/ dummy_rsrc.o -pthread */ //[ most_simple_http_server #include int main() { zeep::http::server srv; srv.bind("::", 8080); srv.run(2); return 0; } //]libzeep-5.1.7/examples/http-server-1.cpp0000664000175000017500000000134014176701531017766 0ustar maartenmaarten//[ simple_http_server #include #include class hello_controller : public zeep::http::controller { public: /*<< Specify the root path as prefix, will handle any request URI >>*/ hello_controller() : controller("/") {} bool handle_request(zeep::http::request& req, zeep::http::reply& rep) { /*<< Construct a simple reply with status OK (200) and content string >>*/ rep = zeep::http::reply::stock_reply(zeep::http::ok); rep.set_content("Hello", "text/plain"); return true; } }; int main() { zeep::http::server srv; srv.add_controller(new hello_controller()); srv.bind("::", 8080); srv.run(2); return 0; } //]libzeep-5.1.7/examples/http-server-2.cpp0000664000175000017500000000256714176701531020003 0ustar maartenmaarten/* compile: clang++ -o http-server-1 http-server-1.cpp -I ~/projects/boost_1_73_0 -DWEBAPP_USES_RESOURCES -I. -fPIC -pthread -std=c++17 -Wall -g -DDEBUG -I ../../include/ -L ../../lib -lzeep-http -lzeep-xml -lzeep-json dummy_rsrc.o -lstdc++fs */ // In this example we don't want to use rsrc based templates #undef WEBAPP_USES_RESOURCES //[ simple_http_server_2 #include #include #include class hello_controller : public zeep::http::html_controller { public: hello_controller() { /*<< Mount the handler `handle_index` on =/=, =/index= and =/index.html= >>*/ mount("{,index,index.html}", &hello_controller::handle_index); } void handle_index(const zeep::http::request& req, const zeep::http::scope& scope, zeep::http::reply& rep) { zeep::http::scope sub(scope); auto name = req.get_parameter("name"); if (not name.empty()) sub.put("name", name); get_template_processor().create_reply_from_template("hello.xhtml", sub, rep); } }; int main() { /*<< Use the server constructor that takes the path to a docroot so it will construct a template processor >>*/ zeep::http::server srv("docroot"); srv.add_controller(new hello_controller()); srv.bind("::", 8080); srv.run(2); return 0; } //]libzeep-5.1.7/examples/rest-sample-2.cpp0000664000175000017500000000630314176701531017744 0ustar maartenmaarten// In this example we don't want to use rsrc based templates #undef WEBAPP_USES_RESOURCES #include #include //[ cart_items_2 struct Item { std::string name; uint32_t count; template void serialize(Archive& ar, unsigned long version) { ar & zeep::make_nvp("name", name) & zeep::make_nvp("count", count); } }; struct Cart { int id; std::string client; std::vector items; template void serialize(Archive& ar, unsigned long version) { ar & zeep::make_nvp("id", id) & zeep::make_nvp("client", client) & zeep::make_nvp("items", items); } }; //] //[ shop_rest_controller_2 class shop_rest_controller : public zeep::http::rest_controller { public: shop_rest_controller() : zeep::http::rest_controller("/cart") { // CRUD example interface map_post_request("", &shop_rest_controller::create_cart, "cart"); map_get_request("{id}", &shop_rest_controller::retrieve_cart, "id"); map_put_request("{id}", &shop_rest_controller::update_cart, "id", "cart"); map_delete_request("{id}", &shop_rest_controller::delete_cart, "id"); } int create_cart(Cart cart) { int result = cart.id = sNextCartID++; m_carts.push_back(std::move(cart)); return result; } Cart& retrieve_cart(int cartID) { auto oi = std::find_if(m_carts.begin(), m_carts.end(), [&](auto& o) { return o.id == cartID; }); if (oi == m_carts.end()) throw std::invalid_argument("No such cart"); return *oi; } void update_cart(int cartID, const Cart& cart) { auto oi = std::find_if(m_carts.begin(), m_carts.end(), [&](auto& o) { return o.id == cartID; }); if (oi == m_carts.end()) throw std::invalid_argument("No such cart"); oi->client = cart.client; oi->items = cart.items; } void delete_cart(int cartID) { m_carts.erase(std::remove_if(m_carts.begin(), m_carts.end(), [cartID](auto& cart) { return cart.id == cartID; }), m_carts.end()); } private: static int sNextCartID; std::vector m_carts; }; //] int shop_rest_controller::sNextCartID = 1; //[ shop_html_controller_2 class shop_html_controller : public zeep::http::html_controller { public: shop_html_controller() { mount("", &shop_html_controller::handle_index); mount("{css,scripts}/", &shop_html_controller::handle_file); } void handle_index(const zeep::http::request& req, const zeep::http::scope& scope, zeep::http::reply& rep) { get_template_processor().create_reply_from_template("shop-2.xhtml", scope, rep); } }; //] //[ shop_main_2 int main() { /*<< Use the server constructor that takes the path to a docroot so it will construct a template processor >>*/ zeep::http::server srv("docroot"); srv.add_controller(new shop_html_controller()); srv.add_controller(new shop_rest_controller()); srv.bind("::", 8080); // Note that the rest controller above is not thread safe! srv.run(1); return 0; } //]libzeep-5.1.7/examples/rest-sample.cpp0000664000175000017500000000661414176701531017612 0ustar maartenmaarten// In this example we don't want to use rsrc based templates #undef WEBAPP_USES_RESOURCES #include #include //[ cart_items struct Item { std::string name; uint32_t count; template void serialize(Archive& ar, unsigned long version) { ar & zeep::make_nvp("name", name) & zeep::make_nvp("count", count); } }; struct Cart { int id; std::string client; std::vector items; template void serialize(Archive& ar, unsigned long version) { ar & zeep::make_nvp("id", id) & zeep::make_nvp("client", client) & zeep::make_nvp("items", items); } }; //] //[ shop_rest_controller class shop_rest_controller : public zeep::http::rest_controller { public: shop_rest_controller() : zeep::http::rest_controller("/cart") { map_post_request("", &shop_rest_controller::create_cart, "client"); map_get_request("{id}", &shop_rest_controller::get_cart, "id"); map_post_request("{id}/item", &shop_rest_controller::add_cart_item, "id", "name"); map_delete_request("{id}/item", &shop_rest_controller::delete_cart_item, "id", "name"); } int create_cart(const std::string& client) { int cartID = sNextCartID++; m_carts.push_back({ cartID, client }); return cartID; } Cart& get_cart(int cartID) { auto oi = std::find_if(m_carts.begin(), m_carts.end(), [&](auto& o) { return o.id == cartID; }); if (oi == m_carts.end()) throw std::invalid_argument("No such cart"); return *oi; } Cart add_cart_item(int cartID, const std::string& item) { Cart& cart = get_cart(cartID); auto ii = std::find_if(cart.items.begin(), cart.items.end(), [&](auto& i) { return i.name == item; }); if (ii == cart.items.end()) cart.items.push_back({item, 1}); else ii->count += 1; return cart; } Cart delete_cart_item(int cartID, const std::string& item) { Cart& cart = get_cart(cartID); auto ii = std::find_if(cart.items.begin(), cart.items.end(), [&](auto& i) { return i.name == item; }); if (ii != cart.items.end()) { if (--ii->count == 0) cart.items.erase(ii); } return cart; } private: static int sNextCartID; std::vector m_carts; }; //] int shop_rest_controller::sNextCartID = 1; //[ shop_html_controller class shop_html_controller : public zeep::http::html_controller { public: shop_html_controller() { mount("", &shop_html_controller::handle_index); mount("{css,scripts}/", &shop_html_controller::handle_file); } void handle_index(const zeep::http::request& req, const zeep::http::scope& scope, zeep::http::reply& rep) { get_template_processor().create_reply_from_template("shop.xhtml", scope, rep); } }; //] //[ shop_main int main() { /*<< Use the server constructor that takes the path to a docroot so it will construct a template processor >>*/ zeep::http::server srv("docroot"); srv.add_controller(new shop_html_controller()); srv.add_controller(new shop_rest_controller()); srv.bind("::", 8080); // Note that the rest controller above is not thread safe! srv.run(1); return 0; } //]libzeep-5.1.7/examples/sample.dtd0000664000175000017500000000011514176701531016616 0ustar maartenmaarten libzeep-5.1.7/examples/sample.xml0000664000175000017500000000015314176701531016645 0ustar maartenmaarten &hello; libzeep-5.1.7/examples/security-sample.cpp0000664000175000017500000000465614176701531020510 0ustar maartenmaarten/* compile: clang++ -o security-sample security-sample.cpp -I ~/projects/boost_1_73_0 -DWEBAPP_USES_RESOURCES -I. -fPIC -pthread -std=c++17 -Wall -g -DDEBUG -I ../../include/ -L ../../lib -lzeep-http -lzeep-xml -lzeep-json dummy_rsrc.o -lstdc++fs */ // In this example we don't want to use rsrc based templates #undef WEBAPP_USES_RESOURCES #include #include #include #include #include //[ sample_security_controller class hello_controller : public zeep::http::html_controller { public: hello_controller() { // Mount the handler `handle_index` on /, /index and /index.html mount("{,index,index.html}", &hello_controller::handle_index); // This admin page will only be accessible by authorized users mount("admin", &hello_controller::handle_admin); // scripts & css mount("{css,scripts}/", &hello_controller::handle_file); } void handle_index(const zeep::http::request& req, const zeep::http::scope& scope, zeep::http::reply& rep) { get_template_processor().create_reply_from_template("security-hello.xhtml", scope, rep); } void handle_admin(const zeep::http::request& req, const zeep::http::scope& scope, zeep::http::reply& rep) { get_template_processor().create_reply_from_template("security-admin.xhtml", scope, rep); } }; //] int main() { //[ create_user_service // Create a user service with a single user zeep::http::simple_user_service users({ { "scott", zeep::http::pbkdf2_sha256_password_encoder().encode("tiger"), { "USER", "ADMIN" } } }); //] //[ create_security_context // Create a security context with a secret and users std::string secret = zeep::random_hash(); auto sc = new zeep::http::security_context(secret, users, false); //] //[ add_access_rules // Add the rule, sc->add_rule("/admin", "ADMIN"); sc->add_rule("/", {}); //] //[ start_server /*<< Use the server constructor that takes the path to a docroot so it will construct a template processor >>*/ zeep::http::server srv(sc, "docroot"); srv.add_controller(new hello_controller()); srv.add_controller(new zeep::http::login_controller()); srv.bind("::", 8080); srv.run(2); //] return 0; }libzeep-5.1.7/examples/serialize-xml.cpp0000664000175000017500000000155614176701531020143 0ustar maartenmaarten//[ synopsis_xml_serialize #include #include struct Person { std::string firstname; std::string lastname; /*<< A struct we want to serialize needs a `serialize` method >>*/ template void serialize(Archive& ar, const unsigned int version) { ar & zeep::make_nvp("firstname", firstname) & zeep::make_nvp("lastname", lastname); } }; int main() { /*<< Read in a text document containing XML and parse it into a document object >>*/ std::ifstream file("test.xml"); zeep::xml::document doc(file); std::vector persons; /*<< Deserialize all persons into an array >>*/ doc.deserialize("persons", persons); doc.clear(); /*<< Serialize all persons back into an XML document again >>*/ doc.serialize("persons", persons); return 0; } //]libzeep-5.1.7/examples/synopsis-el-1.cpp0000664000175000017500000000151014176701531017767 0ustar maartenmaarten// compile: clang++ -o synopsis-json synopsis-json.cpp -I ../../include/ ../../lib/libzeep-json.a ../../lib/libzeep-generic.a -std=c++17 -lstdc++fs -I ~/projects/boost_1_73_0/ #include #include #include #include #include int main() { zeep::http::scope scope; //[ fill_scope /*<< Fill a scope with an array of objects, each object having one element >>*/ zeep::json::element ints{ { { "value", 1 } }, { { "value", 2 } } }; scope.put("ints", ints); //] //[ evaluate_el auto s = zeep::http::evaluate_el(scope, "|1: ${ints[0].value}, 2: ${ints[1].value}|"); //] std::cout << s << std::endl; assert(s == "1: 1, 2: 2"); return 0; }libzeep-5.1.7/examples/synopsis-json.cpp0000664000175000017500000000417214176701531020211 0ustar maartenmaarten// compile: clang++ -o synopsis-json synopsis-json.cpp -I ../../include/ ../../lib/libzeep-json.a ../../lib/libzeep-generic.a -std=c++17 -lstdc++fs -I ~/projects/boost_1_73_0/ #include #include #include #include void test_stl() { using namespace zeep::json::literals; using json = zeep::json::element; //[ stl_interface json j; /*<< Make j an array >>*/ j = zeep::json::element::array({ 1, 2, 3 }); j.push_back(4); j.emplace_back("five"); assert(j == R"([ 1, 2, 3, 4, "five" ])"_json); /*<< Now make j an object, this will erase the data and initialize a new object >>*/ j = zeep::json::element::object({ { "a", true }, { "b", "2" } }); j.emplace("c", 3); assert(j == R"({ "a": true, "b": "2", "c": 3 })"_json); //] } void test_enum() { using namespace zeep::json::literals; using json = zeep::json::element; //[ enum_support enum class MyEnum { aap, noot, mies }; zeep::value_serializer::init("MyEnum", { { MyEnum::aap, "aap" }, { MyEnum::noot, "noot" }, { MyEnum::mies, "mies" } }); //] //[ enum_usage json j{ MyEnum::aap }; assert(j.as() == "aap"); //] } void construct() { //[ synopsis_json_main using namespace zeep::json::literals; using json = zeep::json::element; json j1; /*<< Fill a JSON object with some data, the type is detected automatically >>*/ j1["b"] = true; j1["i"] = 1; j1["f"] = 2.7183; j1["s"] = "Hello, world!"; j1["ai"] = { 1, 2, 3 }; j1["n"] = nullptr; j1["o"] = { { "b", false }, { "i", 2 } }; j1["o"]["s"] = "sub field"; std::cout << j1 << std::endl; /*<< Construct a JSON object by parsing a raw string >>*/ json j2 = R"( { "b": true, "i": 1, "f": 2.7183, "s": "Hello, world!", "ai": [ 1, 2, 3 ], "n": null, "o": { "b": false, "i": 2, "s": "sub field" } } )"_json; std::cout << j2 << std::endl; assert(j1 == j2); //] } int main() { construct(); test_stl(); return 0; }libzeep-5.1.7/examples/synopsis-xml.cpp0000664000175000017500000000205014176701531020031 0ustar maartenmaarten#include //[ synopsis_xml_main int main() { using namespace zeep::xml::literals; /*<< Construct an XML document in memory using a string literal >>*/ auto doc = R"( John Doe Jane Jones )"_xml; /*<< Iterate over an XPath result set >>*/ for (auto& person: doc.find("//person")) { std::string firstname, lastname; /*<< Iterate over the __element__ nodes inside the person __element__ >>*/ for (auto& name: *person) { if (name.name() == "firstname") firstname = name.str(); if (name.name() == "lastname") lastname = name.str(); } std::cout << person->get_attribute("id") << ": " << lastname << ", " << firstname << std::endl; } return 0; } //]libzeep-5.1.7/examples/test.xml0000664000175000017500000000030114176701531016336 0ustar maartenmaarten John Doe Jane Jones libzeep-5.1.7/examples/validating-xml-sample.cpp0000664000175000017500000000227214176701531021551 0ustar maartenmaarten// compile: clang++ -o validating-xml-sample validating-xml-sample.cpp -I ../../include/ ../../lib/libzeep-xml.a ../../lib/libzeep-generic.a -std=c++17 -lstdc++fs -I ~/projects/boost_1_73_0/ && ./validating-xml-sample //[ xml_validation_sample #include #include #include namespace fs = std::filesystem; int main() { /*<< Define an entity loader function >>*/ auto loader = [] (const std::string& base, const std::string& pubid, const std::string& sysid) -> std::istream* { if (base == "." and pubid.empty() and fs::exists(sysid)) return new std::ifstream(sysid); throw std::invalid_argument("Invalid arguments passed in loader"); }; /*<< Create document and set the entity loader >>*/ zeep::xml::document doc; doc.set_entity_loader(loader); /*<< Read a file >>*/ std::ifstream is("sample.xml"); is >> doc; using namespace zeep::xml::literals; /*<< Compare the doc with an in-memory constructed document, note that spaces are ignored >>*/ if (doc == R"(Hello, world!)"_xml) std::cout << "ok" << std::endl; return 0; } //]libzeep-5.1.7/examples/xpath-sample.cpp0000664000175000017500000000147314176701531017757 0ustar maartenmaarten//[ xpath_example #include #include #include int main() { using namespace zeep::xml::literals; auto doc = R"( foei )"_xml; /*<< Create an xpath context and store our variable >>*/ zeep::xml::context ctx; ctx.set("ns", "https://www.hekkelman.com/libzeep"); /*<< Create an xpath object with the specified XPath using the variable `ns` >>*/ auto xp = zeep::xml::xpath("//*[namespace-uri() = $ns]"); /*<< Iterate over the result of the evaluation of this XPath, the result will consist of zeep::xml::element object pointers >>*/ for (auto n: xp.evaluate(doc, ctx)) std::cout << n->str() << std::endl; return 0; } //] libzeep-5.1.7/include/0000775000175000017500000000000014176701531014450 5ustar maartenmaartenlibzeep-5.1.7/include/zeep/0000775000175000017500000000000014176701531015413 5ustar maartenmaartenlibzeep-5.1.7/include/zeep/config.hpp.in0000664000175000017500000000430214176701531017775 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2020 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) /// \file /// Generic configuration file, contains defines and (probably obsolete) stuff for msvc #pragma once #include #include #include /// The http server implementation in libzeep can use a /// preforked mode. That means the main process listens to /// a network port and passes the socket to a client process /// for doing the actual handling. The advantages for a setup /// like this is that if the client fails, the server can detect /// this and restart the client thereby guaranteeing a better /// uptime. #cmakedefine01 HTTP_SERVER_HAS_PREFORK /// The webapp class in libzeep can use resources to load files. /// In this case you need the resource compiler 'mrc' obtainable /// from https://github.com/mhekkel/mrc #cmakedefine01 WEBAPP_USES_RESOURCES /// The current version of libzeep #define LIBZEEP_VERSION "@LIBZEEP_VERSION@" #define LIBZEEP_VERSION_MAJOR @LIBZEEP_VERSION_MAJOR@ #define LIBZEEP_VERSION_MINOR @LIBZEEP_VERSION_MINOR@ #define LIBZEEP_VERSION_PATCH @LIBZEEP_VERSION_PATCH@ // see if we're using Visual C++, if so we have to include // some VC specific include files to make the standard C++ // keywords work. #if defined(_MSC_VER) # if defined(_MSC_EXTENSIONS) // why is it an extension to leave out something? # define and && # define and_eq &= # define bitand & # define bitor | # define compl ~ # define not ! # define not_eq != # define or || # define or_eq |= # define xor ^ # define xor_eq ^= # endif // _MSC_EXTENSIONS # pragma warning (disable : 4355) // this is used in Base Initializer list # pragma warning (disable : 4996) // unsafe function or variable # pragma warning (disable : 4068) // unknown pragma # pragma warning (disable : 4996) // stl copy() # pragma warning (disable : 4800) // BOOL conversion # pragma warning (disable : 4100) // unreferenced formal parameter # pragma warning (disable : 4101) // unreferenced local variable #endif libzeep-5.1.7/include/zeep/crypto.hpp0000664000175000017500000001257514176701531017456 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019-2020 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // -------------------------------------------------------------------- #pragma once #include #include #include /// \file /// This file contains an interface to the crypto related routines used /// throughout libzeep. namespace zeep { // -------------------------------------------------------------------- // encoding/decoding /// \brief Thrown when the input does not contain valid base64 encoded data class invalid_base64 : public std::exception { public: invalid_base64() {} const char* what() const noexcept { return "invalid base64 input"; } }; /// \brief encode \a data in base64 format /// /// \param data The string containing data to encode /// \param wrap_width If this value is not zero, lines in the output will be wrapped to this width. std::string encode_base64(std::string_view data, size_t wrap_width = 0); /// \brief decode data from base64 format, will throw invalid_base64 in case of invalid input /// /// \param data The string containing data to decode std::string decode_base64(std::string_view data); // The base64url versions are slightly different /// \brief encode \a data in base64url format (see https://tools.ietf.org/html/rfc4648#section-5) /// /// \param data The string containing data to encode std::string encode_base64url(std::string_view data); /// \brief decode \a data from base64url format (see https://tools.ietf.org/html/rfc4648#section-5) /// /// \param data The string containing data to decode std::string decode_base64url(std::string data); // And base32 might be handy as well, RFC 4648 (see https://en.wikipedia.org/wiki/Base32) /// \brief Thrown when the input does not contain valid base32 encoded data class invalid_base32 : public std::exception { public: invalid_base32() {} const char* what() const noexcept { return "invalid base32 input"; } }; /// \brief encode \a data in base32 format /// /// \param data The string containing data to encode /// \param wrap_width If this value is not zero, lines in the output will be wrapped to this width. std::string encode_base32(std::string_view data, size_t wrap_width = 0); /// \brief decode data from base32 format, will throw invalid_base32 in case of invalid input /// /// \param data The string containing data to decode std::string decode_base32(std::string_view data); /// \brief Thrown when the input does not contain valid hexadecimal encoded data class invalid_hex : public std::exception { public: invalid_hex() {} const char* what() const noexcept { return "invalid hexadecimal input"; } }; /// \brief encode \a data in hexadecimal format /// /// \param data The string containing data to encode std::string encode_hex(std::string_view data); /// \brief decode \a data from hexadecimal format /// /// \param data The string containing data to decode std::string decode_hex(std::string_view data); // -------------------------------------------------------------------- // random bytes /// \brief return a string containing some random bytes std::string random_hash(); // -------------------------------------------------------------------- // hashing /// \brief return the MD5 hash of \a data std::string md5(std::string_view data); /// \brief return the SHA1 hash of \a data std::string sha1(std::string_view data); /// \brief return the SHA1 hash of \a data std::string sha1(std::streambuf& data); /// \brief return the SHA256 hash of \a data std::string sha256(std::string_view data); // -------------------------------------------------------------------- // hmac /// \brief return the HMAC using an MD5 hash of \a message signed with \a key std::string hmac_md5(std::string_view message, std::string_view key); /// \brief return the HMAC using an SHA1 hash of \a message signed with \a key std::string hmac_sha1(std::string_view message, std::string_view key); /// \brief return the HMAC using an SHA256 hash of \a message signed with \a key std::string hmac_sha256(std::string_view message, std::string_view key); // -------------------------------------------------------------------- // key derivation based on password (PBKDF2) /// \brief create password hash according to PBKDF2 with HmacSHA1 /// /// This algorithm can be used to create keys for symmetric encryption. /// But you can also use it to store hashed passwords for user authentication. /// /// \param salt the salt to use /// \param password the password /// \param iterations number of iterations, use a value of at least 30000 /// \param keyLength the requested key length that will be returned std::string pbkdf2_hmac_sha1(std::string_view salt, std::string_view password, unsigned iterations, unsigned keyLength); /// \brief create password hash according to PBKDF2 with HmacSHA256 /// /// This algorithm can be used to create keys for symmetric encryption. /// But you can also use it to store hashed passwords for user authentication. /// /// \param salt the salt to use /// \param password the password /// \param iterations number of iterations, use a value of at least 30000 /// \param keyLength the requested key length that will be returned std::string pbkdf2_hmac_sha256(std::string_view salt, std::string_view password, unsigned iterations, unsigned keyLength); } libzeep-5.1.7/include/zeep/exception.hpp0000664000175000017500000000156614176701531020132 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of zeep::exception, base class for exceptions thrown by libzeep #include #include #include namespace zeep { /// \brief base class of the exceptions thrown by libzeep class exception : public std::exception { public: /// \brief Create an exception with the message in \a message exception(const std::string& message) : m_message(message) {} virtual ~exception() throw() {} virtual const char* what() const throw() { return m_message.c_str(); } protected: std::string m_message; }; } // namespace zeep libzeep-5.1.7/include/zeep/http/0000775000175000017500000000000014176701531016372 5ustar maartenmaartenlibzeep-5.1.7/include/zeep/http/connection.hpp0000664000175000017500000000274614176701531021253 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::http::connection class, that handles HTTP connections #include #include #include #include #include namespace zeep::http { class basic_server; /// The HTTP server implementation of libzeep is inspired by the example code /// as provided by boost::asio. These objects are not to be used directly. class connection : public std::enable_shared_from_this { public: connection(connection &) = delete; connection& operator=(connection &) = delete; connection(boost::asio::io_context& service, basic_server& handler); void start(); void handle_read(boost::system::error_code ec, size_t bytes_transferred); void handle_write(boost::system::error_code ec, size_t bytes_transferred); boost::asio::ip::tcp::socket& get_socket() { return m_socket; } private: boost::asio::ip::tcp::socket m_socket; basic_server& m_server; reply m_reply; request_parser m_request_parser; bool m_keep_alive = false; boost::asio::streambuf m_buffer; boost::asio::streambuf::mutable_buffers_type m_bufs; }; } // namespace zeep::http libzeep-5.1.7/include/zeep/http/controller.hpp0000664000175000017500000000523214176701531021270 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the base class zeep::http::controller, used by e.g. rest_controller and soap_controller #include #include namespace zeep::http { /// \brief A base class for controllers, classes that handle a request /// /// This concept is inspired by the Spring way of delegating the work to /// controller classes. In libzeep there are two major implementations of /// controllers: zeep::http::rest_controller and zeep::http::soap_controller /// /// There can be multiple controllers in a web application, each is connected /// to a certain prefix-path. This is the leading part of the request URI. class controller { public: /// \brief constructor /// /// \param prefix_path The prefix path this controller is bound to controller(const std::string &prefix_path); virtual ~controller(); /// \brief Calls handle_request but stores a pointer to the request first virtual bool dispatch_request(boost::asio::ip::tcp::socket &socket, request &req, reply &rep); /// \brief The pure virtual method that actually handles the request virtual bool handle_request(request &req, reply &rep) = 0; /// \brief returns the defined prefix path std::string get_prefix() const { return m_prefix_path; } /// \brief return whether this uri request path matches our prefix bool path_matches_prefix(const std::string &path) const; /// \brief return the path with the prefix path stripped off std::string get_prefixless_path(const request &req) const; /// \brief bind this controller to \a server virtual void set_server(basic_server *server) { m_server = server; } /// \brief return the server object we're bound to const basic_server &get_server() const { return *m_server; } basic_server &get_server() { return *m_server; } /// \brief get the credentials for the current request json::element get_credentials() const; /// \brief get the remote client address for the current request std::string get_remote_address() const; /// \brief returns whether the current user has role \a role bool has_role(const std::string &role) const; /// \brief return a specific header line from the original request std::string get_header(const char *name) const; protected: controller(const controller &) = delete; controller &operator=(const controller &) = delete; std::string m_prefix_path; basic_server *m_server = nullptr; static thread_local request *s_request; }; } // namespace zeep::http libzeep-5.1.7/include/zeep/http/daemon.hpp0000664000175000017500000000744514176701531020360 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// /// Source code specifically for Unix/Linux. /// Utility routines to build daemon processes #include #include #include namespace zeep::http { class basic_server; /// \brief A class to create daemon processes easily /// /// In UNIX a daemon is a process that runs in the background. /// In the case of libzeep this is of course serving HTTP requests. /// stderr and stdout are captured and written to the log files /// specified and a process ID is store in the pid file which /// allows checking the status of a running daemon. class daemon { public: /// \brief The factory for creating server instances. using server_factory_type = std::function; /// \brief constructor with separately specified files /// /// \param factory The function object that creates server instances /// \param pid_file The file that will contain the process ID, usually in /var/run/ /// \param stdout_log_file The file that will contain the stdout log, usually in /var/log//access.log /// \param stderr_log_file The file that will contain the stderr log, usually in /var/log//error.log daemon(server_factory_type&& factory, const std::string& pid_file, const std::string& stdout_log_file, const std::string& stderr_log_file); /// \brief constructor with default files /// /// \param factory The function object that creates server instances /// \param name The _process name_ to use, will be used to form default file locations daemon(server_factory_type&& factory, const char* name); /// \brief Avoid excessive automatic restart due to failing to start up /// /// \param nr_of_restarts The max number of attempts to take to start up a daemon process /// \param within_nr_of_seconds The restart counter will only consider a failed restart if it fails /// starting up within this period of time. void set_max_restarts(int nr_of_restarts, int within_nr_of_seconds) { m_max_restarts = nr_of_restarts; m_restart_time_window = within_nr_of_seconds; } /// \brief Start the daemon, forking off in the background /// /// \param address The address to bind to /// \param port The port number to bind to /// \param nr_of_threads The number of threads to pass to the server class /// \param run_as_user The user to run the forked process. Daemons are usually /// started as root and should drop their privileges as soon /// as possible. int start(const std::string& address, uint16_t port, size_t nr_of_procs, size_t nr_of_threads, const std::string& run_as_user); /// \brief Stop a running daemon process. Returns 0 in case of successfully stopping a process. int stop(); /// \brief Returns 0 if the daemon is running int status(); /// \brief Force the running daemon to restart int reload(); /// \brief Run the server without forking to the background /// /// For debugging purposes it is sometimes useful to start a server /// without forking so you can see the stdout and stderr. Often this /// is done by adding a --no-daemon flag to the program options. int run_foreground(const std::string& address, uint16_t port); private: void daemonize(); void open_log_file(); bool run_main_loop(const std::string& address, uint16_t port, size_t nr_of_procs, size_t nr_of_threads, const std::string& run_as_user); bool pid_is_for_executable(); private: server_factory_type m_factory; const std::string m_pid_file, m_stdout_log_file, m_stderr_log_file; int m_max_restarts = 5, m_restart_time_window = 10; }; } libzeep-5.1.7/include/zeep/http/el-processing.hpp0000664000175000017500000002307414176701531021663 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // expression language support // #pragma once /// \file /// definition of the routines that can parse and interpret el (expression language) code in a web application context #include #include #include #include #include #include namespace zeep::http { using object = ::zeep::json::element; class scope; class basic_server; /// \brief Process the text in \a text and return `true` if the result is /// not empty, zero or false. /// /// The expression in \a text is processed and if the result of this /// expression is empty, false or zero then `false` is returned. /// \param scope The scope for this el script /// \param text The el script /// \return The result of the script bool process_el(const scope& scope, std::string& text); /// \brief Process the text in \a text and return the result if the expression is valid, /// the value of \a text otherwise. /// /// If the expression in \a text is valid, it is processed and the result /// is returned, otherwise simply returns the text. /// \param scope The scope for this el script /// \param text The el script /// \return The result of the script std::string process_el_2(const scope& scope, const std::string& text); /// \brief Process the text in \a text. The result is put in \a result /// /// The expression in \a text is processed and the result is returned /// in \a result. /// \param scope The scope for this el script /// \param text The el script /// \result The result of the script object evaluate_el(const scope& scope, const std::string& text); /// \brief Process the text in \a text and return a list of name/value pairs /// /// The expressions found in \a text are processed and the result is /// returned as a list of name/value pairs to be used in e.g. /// processing a m2:attr attribute. /// \param scope The scope for the el scripts /// \param text The text optionally containing el scripts. /// \return list of name/value pairs std::vector> evaluate_el_attr(const scope& scope, const std::string& text); /// \brief Process the text in \a text. This should be a comma separated list /// of expressions that each should evaluate to true. /// /// The expression in \a text is processed and the result is false if /// one of the expressions in the comma separated list evaluates to false. /// /// in \a result. /// \param scope The scope for this el script /// \param text The el script /// \return True in case all the expressions evaluate to true bool evaluate_el_assert(const scope& scope, const std::string& text); /// \brief Process the text in \a text and put the resulting z:with expressions in the scope /// /// The expressions found in \a text are processed and the result is /// returned as a list of name/value pairs to be used in e.g. /// processing a m2:attr attribute. /// \param scope The scope for the el scripts /// \param text The text containing el scripts in the form var=val(,var=val)*. void evaluate_el_with(scope& scope, const std::string& text); /// \brief Evaluate the text in \a text as a potential link template /// /// The expression found in \a text is processed and the result is /// returned as a link template object. This function is called from /// el::include/el::replace/el::insert attributes. /// /// \param scope The scope for the el scripts /// \param text The text containing the link specification /// \result The resulting link object evaluate_el_link(const scope& scope, const std::string& text); // -------------------------------------------------------------------- class expression_utility_object_base { public: virtual ~expression_utility_object_base() = default; static object evaluate(const scope& scope, const std::string& className, const std::string& methodName, const std::vector& parameters) { for (auto inst = s_head; inst != nullptr; inst = inst->m_next) { if (className == inst->m_name) return inst->m_obj->evaluate(scope, methodName, parameters); } return {}; } protected: virtual object evaluate(const scope& scope, const std::string& methodName, const std::vector& parameters) const = 0; struct instance { expression_utility_object_base* m_obj = nullptr; const char* m_name; instance* m_next = nullptr; }; static instance* s_head; }; template class expression_utility_object : public expression_utility_object_base { public: using implementation_type = OBJ; protected: expression_utility_object() { static instance s_next{ this, implementation_type::name(), s_head }; s_head = &s_next; } }; // -------------------------------------------------------------------- /// \brief The class that stores variables for the current scope /// /// When processing tags and in expression language constructs we use /// variables. These are stored in scope instances. class scope { public: /// \brief simple constructor, used where there's no request available scope(); /// \brief constructor to be used only in debugging /// /// \param req The incomming HTTP request scope(const request& req); /// \brief constructor used in a HTTP request context /// /// \param server The server that handles the incomming request /// \param req The incomming HTTP request scope(const basic_server& server, const request& req); /// \brief chaining constructor /// /// Scopes can be nested, introducing new namespaces /// \param next The next scope up the chain. explicit scope(const scope& next); /// \brief put variable in the scope with \a name and \a value template void put(const std::string& name, const T& value); /// \brief put variable of type array in the scope with \a name and values from \a begin to \a end template void put(const std::string& name, ForwardIterator begin, ForwardIterator end); /// \brief return variable with \a name /// /// \param name The name of the variable to return /// \param includeSelected If this is true, and the variable was not found as a regular variable /// in the current scope, the selected objects will be search for members /// with \a name This is used by the tag processing lib v2 in _z2:object_ /// \return The value found or null if there was no such variable. const object& lookup(const std::string& name, bool includeSelected = false) const; /// \brief return variable with \a name const object& operator[](const std::string& name) const; /// \brief return variable with \a name /// /// \param name The name of the variable to return /// \param includeSelected If this is true, and the variable was not found as a regular variable /// in the current scope, the selected objects will be search for members /// with \a name This is used by the tag processing lib v2 in _z2:object_ /// \return The value found or null if there was no such variable. object& lookup(const std::string& name); /// \brief return variable with \a name object& operator[](const std::string& name); /// \brief return the HTTP request, will throw if the scope chain was not created with a request const request& get_request() const; /// \brief return the context_name of the server std::string get_context_name() const; /// \brief return the credentials of the current user json::element get_credentials() const; /// \brief select object \a o , used in z2:object constructs void select_object(const object& o); /// \brief a nodeset for a selector, cached to avoid recusive expansion /// /// In tag processors it is sometimes needed to take a selection of zeep::xml::nodes /// and reuse these, as a copy when inserting templates e.g. using node_set_type = std::vector>; /// \brief return the node_set_type with name \a name node_set_type get_nodeset(const std::string& name) const; /// \brief store node_set_type \a nodes with name \a name void set_nodeset(const std::string& name, node_set_type&& nodes); /// \brief return whether a node_set with name \a name is stored bool has_nodeset(const std::string& name) const { return m_nodesets.count(name) or (m_next != nullptr and m_next->has_nodeset(name)); } /// \brief get the CSRF token from the request burried in \a scope std::string get_csrf_token() const; private: /// for debugging purposes friend std::ostream& operator<<(std::ostream& lhs, const scope& rhs); scope& operator=(const scope& ); using data_map = std::map; data_map m_data; scope *m_next; unsigned m_depth; const request *m_req; const basic_server* m_server; object m_selected; using nodeset_map = std::map; nodeset_map m_nodesets; }; template inline void scope::put(const std::string& name, const T& value) { m_data[name] = value; } template <> inline void scope::put(const std::string& name, const object& value) { m_data[name] = value; } template inline void scope::put(const std::string& name, ForwardIterator begin, ForwardIterator end) { std::vector elements; while (begin != end) elements.push_back(object(*begin++)); m_data[name] = elements; } // -------------------------------------------------------------------- } // namespace zeep::http libzeep-5.1.7/include/zeep/http/error-handler.hpp0000664000175000017500000000675114176701531021660 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the base class zeep::error_handler, the default /// creates very simple HTTP replies. Override to do something more fancy. #include #include #include namespace zeep::http { /// \brief A base class for error-handler classes /// /// To handle errors decently when there are multiple controllers. class error_handler { public: /// \brief constructor /// /// If \a error_template is not empty, the error handler will try to /// load this XHTML template using the server's template_processor. /// If that fails or error_template is empty, a simple stock message /// is returned. error_handler(const std::string& error_template = "error.xhtml"); virtual ~error_handler(); /// \brief set the server object we're bound to void set_server(basic_server* s) { m_server = s; } /// \brief get the server object we're bound to basic_server* get_server() { return m_server; } /// \brief set the server object we're bound to const basic_server* get_server() const { return m_server; } /// \brief Create an error reply for an exception /// /// This function is called by server with the captured exception. /// \param req The request that triggered this call /// \param eptr The captured exception, use std::rethrow_exception to use this /// \param reply Write the reply in this object /// \return Return true if the reply was created successfully virtual bool create_error_reply(const request& req, std::exception_ptr eptr, reply& reply); /// \brief Create an error reply for the error containing a validation header /// /// When a authentication violation is encountered, this function is called to generate /// the appropriate reply. /// \param req The request that triggered this call /// \param reply Write the reply in this object /// \return Return true if the reply was created successfully virtual bool create_unauth_reply(const request& req, reply& reply); /// \brief Create an error reply for the error /// /// An error should be returned with HTTP status code \a status. This method will create a default error page. /// \param req The request that triggered this call /// \param status The status code, describing the error /// \param reply Write the reply in this object /// \return Return true if the reply was created successfully virtual bool create_error_reply(const request& req, status_type status, reply& reply); /// \brief Create an error reply for the error with an additional message for the user /// /// An error should be returned with HTTP status code \a status and additional information \a message. /// This method will create a default error page. /// \param req The request that triggered this call /// \param status The error that triggered this call /// \param message The message describing the error /// \param reply Write the reply in this object /// \return Return true if the reply was created successfully virtual bool create_error_reply(const request& req, status_type status, const std::string& message, reply& reply); protected: error_handler(const error_handler&) = delete; error_handler& operator=(const error_handler&) = delete; basic_server* m_server = nullptr; std::string m_error_template; }; }libzeep-5.1.7/include/zeep/http/header.hpp0000664000175000017500000000115214176701531020332 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::http::header class #include #include namespace zeep::http { /// The header object contains the header lines as found in a /// HTTP Request. The lines are parsed into name / value pairs. struct header { std::string name; std::string value; }; } libzeep-5.1.7/include/zeep/http/html-controller.hpp0000664000175000017500000001471514176701531022240 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::controller class. This class takes /// care of handling requests that are mapped to call back functions /// and provides code to return XHTML formatted replies. #include #include #include // -------------------------------------------------------------------- // namespace zeep::http { class basic_template_processor; // -------------------------------------------------------------------- /// \brief base class for a webapp controller that uses XHTML templates /// /// html::controller is used to create XHTML web pages based on the contents of a /// template file and the parameters passed in the request and calculated data stored /// in a scope object. class html_controller : public controller { public: html_controller(const std::string& prefix_path = "/") : controller(prefix_path) { } /// \brief return the basic_template_processor of the server basic_template_processor& get_template_processor(); /// \brief return the basic_template_processor of the server const basic_template_processor& get_template_processor() const; /// \brief Dispatch and handle the request virtual bool handle_request(request& req, reply& reply); /// \brief default file handling /// /// This method will ask the server for the default template processor /// to load the actual file. If there is no template processor set, /// it will therefore throw an exception. virtual void handle_file(const request& request, const scope& scope, reply& reply); // -------------------------------------------------------------------- public: /// \brief webapp works with 'handlers' that are methods 'mounted' on a path in the requested URI using handler_type = std::function; /// assign a handler function to a path in the server's namespace /// Usually called like this: /// \code{.cpp} /// /// mount("page", std::bind(&page_handler, this, _1, _2, _3)); /// \endcode /// Where page_handler is defined as: /// \code{.cpp} /// void session_server::page_handler(const request& request, const scope& scope, reply& reply); /// \endcode /// Note, the first parameter is a glob pattern, similar to Ant matching rules. /// Supported operators are \*, \*\* and ?. As an addition curly bracketed optional elements are allowed /// as well as semi-colons that define separate paths. /// Also, patterns ending in / are interpreted as ending in /\*\* /// /// path | matches /// ---------------- | -------------------------------------------- /// `**``/``*.js` | matches x.js, a/b/c.js, etc /// `{css,scripts}/` | matches e.g. css/1/first.css and scripts/index.js /// a;b;c | matches either a, b or c /// \brief mount a callback on URI path \a path for any HTTP method template void mount(const std::string& path, void(Class::*callback)(const request& request, const scope& scope, reply& reply)) { static_assert(std::is_base_of_v, "This call can only be used for methods in classes derived from html_controller"); mount(path, "UNDEFINED", [server = static_cast(this), callback](const request& request, const scope& scope, reply& reply) { (server->*callback)(request, scope, reply); }); } /// \brief mount a callback on URI path \a path for HTTP GET method template void mount_get(const std::string& path, void(Class::*callback)(const request& request, const scope& scope, reply& reply)) { static_assert(std::is_base_of_v, "This call can only be used for methods in classes derived from html_controller"); mount(path, "GET", [server = static_cast(this), callback](const request& request, const scope& scope, reply& reply) { (server->*callback)(request, scope, reply); }); } /// \brief mount a callback on URI path \a path for HTTP POST method template void mount_post(const std::string& path, void(Class::*callback)(const request& request, const scope& scope, reply& reply)) { static_assert(std::is_base_of_v, "This call can only be used for methods in classes derived from html_controller"); mount(path, "POST", [server = static_cast(this), callback](const request& request, const scope& scope, reply& reply) { (server->*callback)(request, scope, reply); }); } /// \brief mount a callback on URI path \a path for HTTP method \a method template void mount(const std::string& path, const std::string& method, void(Class::*callback)(const request& request, const scope& scope, reply& reply)) { static_assert(std::is_base_of_v, "This call can only be used for methods in classes derived from html_controller"); mount(path, method, [server = static_cast(this), callback](const request& request, const scope& scope, reply& reply) { (server->*callback)(request, scope, reply); }); } /// \brief mount a handler on URI path \a path for HTTP method \a method void mount(const std::string& path, const std::string& method, handler_type handler) { auto mpi = std::find_if(m_dispatch_table.begin(), m_dispatch_table.end(), [path, method](auto& mp) { return mp.path == path and (mp.method == method or mp.method == "UNDEFINED" or method == "UNDEFINED"); }); if (mpi == m_dispatch_table.end()) m_dispatch_table.emplace_back(path, method, handler); else { if (mpi->method != method) throw std::logic_error("cannot mix method UNDEFINED with something else"); mpi->handler = handler; } } /// \brief Initialize the scope object /// /// The default implementation does nothing, derived implementations may /// want to add some default data to the scope. virtual void init_scope(scope& scope) {} private: struct mount_point { mount_point(const std::string& path, const std::string& method, handler_type handler) : path(path), method(method), handler(handler) {} std::string path; std::string method; handler_type handler; }; using mount_point_list = std::vector; mount_point_list m_dispatch_table; }; } // namespace zeep::http libzeep-5.1.7/include/zeep/http/login-controller.hpp0000664000175000017500000000403414176701531022375 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::login_controller class. This class inherits from /// html::controller and provides a default for /login and /logout handling. #include #include #include // -------------------------------------------------------------------- // namespace zeep::http { // -------------------------------------------------------------------- /// \brief http controller that handles login and logout /// /// There is a html version of this controller as well, that one is a bit nicer class login_controller : public controller { public: login_controller(const std::string& prefix_path = "/"); /// \brief bind this controller to \a server /// /// Makes sure the server has a security context and adds rules /// to this security context to allow access to the /login page virtual void set_server(basic_server* server); /// \brief will handle the actual requests virtual bool handle_request(request& req, reply& rep); /// \brief return the XHTML login form, subclasses can override this to provide custom login forms /// /// The document returned should have input fields for 'username', 'password' and a hidden '_csrf' /// and 'uri' value. /// /// The _csrf value is used to guard against CSRF attacks. The uri is the location to redirect to /// in case of a valid login. virtual xml::document load_login_form(const request& req) const; /// \brief Create an error reply for an unauthorized access /// /// An error handler may call this method to create a decent login screen. /// \param req The request that triggered this call /// \param rep Write the reply in this object virtual void create_unauth_reply(const request& req, reply& reply); }; } libzeep-5.1.7/include/zeep/http/message-parser.hpp0000664000175000017500000000333014176701531022020 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::http::{request,reply}_parser classes that parse HTTP input/output #include #include #include #include #include namespace zeep::http { /// An HTTP message parser with support for Transfer-Encoding: Chunked class parser { public: virtual ~parser() {} virtual void reset(); boost::tribool parse_header_lines(char ch); boost::tribool parse_chunk(char ch); boost::tribool parse_footer(char ch); boost::tribool parse_content(char ch); protected: typedef boost::tribool (parser::*state_parser)(char ch); parser(); state_parser m_parser; int m_state; unsigned int m_chunk_size; std::string m_data; std::string m_uri; std::string m_method; bool m_parsing_content; bool m_collect_payload; int m_http_version_major, m_http_version_minor; std::vector
m_headers; std::string m_payload; }; class request_parser : public parser { public: request_parser(); boost::tribool parse(std::streambuf& text); request get_request(); private: boost::tribool parse_initial_line(char ch); }; class reply_parser : public parser { public: reply_parser(); boost::tribool parse(std::streambuf& text); reply get_reply(); virtual void reset(); private: boost::tribool parse_initial_line(char ch); int m_status = 0; std::string m_status_line; }; } // namespace zeep::http libzeep-5.1.7/include/zeep/http/preforked-server.hpp0000664000175000017500000000535114176701531022374 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// Code for a preforked http server implementation #include #include #if HTTP_SERVER_HAS_PREFORK namespace zeep::http { /// \brief class to create a preforked HTTP server /// /// A preforked server means you have a master process that listens to a port /// and whenever a request comes in, the socket is passed to a client. This /// client will then process the request. /// This approach has several advantages related to security and stability. /// /// The way it works in libzeep is, you still create a server that derives /// from zeep::server (if you need a SOAP server) or zeep::http::server (if /// you only want a HTTP server). You then create a /// zeep::http::preforked_server instance passing in the /// parameters required and then call run() on this preforked server. /// /// The preforked_server class records the way your server needs to be /// constructed. When this preforked_server is run, it forks and then /// constructs your server class in the child process. /// /// Example: /// \code{.cpp} /// class my_server { /// public: /// my_server(const string& my_param); /// /// .... /// /// zeep::http::preforked_server server( /// []() { return new my_server("my param value"); } /// ); /// /// // all addresses, port 10333 and two listener threads /// std::thread t(std::bind(&zeep::http::preforked_server::run, &server, "0.0.0.0", 10333, 2)); /// /// ... // wait for signal to stop /// /// server.stop(); /// t.join(); /// \endcode class child_process; class preforked_server { public: preforked_server(const preforked_server&) = delete; preforked_server& operator=(const preforked_server&) = delete; /// \brief constructor /// /// The constructor takes one argument, a function object that creates /// a server class instance. preforked_server(std::function server_factory); virtual ~preforked_server(); /// \brief forks \a nr_of_child_processes children and starts listening, should be a separate thread virtual void run(const std::string& address, short port, int nr_of_child_processes, int nr_of_threads); virtual void start(); ///< signal the thread it can start listening: virtual void stop(); ///< stop the running thread private: std::function m_constructor; std::mutex m_lock; boost::asio::io_context m_io_context; }; } #endiflibzeep-5.1.7/include/zeep/http/reply.hpp0000664000175000017500000001315114176701531020237 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::http::reply class encapsulating a valid HTTP reply #include #include #include #include #include namespace zeep::http { /// Various predefined HTTP status codes enum status_type { cont = 100, ok = 200, created = 201, accepted = 202, no_content = 204, multiple_choices = 300, moved_permanently = 301, moved_temporarily = 302, see_other = 303, not_modified = 304, bad_request = 400, unauthorized = 401, forbidden = 403, not_found = 404, method_not_allowed = 405, proxy_authentication_required = 407, internal_server_error = 500, not_implemented = 501, bad_gateway = 502, service_unavailable = 503 }; /// Return the error string for the status_type std::string get_status_text(status_type status); /// Return the string describing the status_type in more detail std::string get_status_description(status_type status); /// \brief the class containing all to generate a HTTP reply /// /// Create a HTTP reply, should be either HTTP 1.0 or 1.1 class reply { public: using cookie_directive = header; /// Create a reply, default is HTTP 1.0. Use 1.1 if you want to use keep alive e.g. reply(status_type status = internal_server_error, std::tuple version = { 1, 0 }); reply(status_type status, std::tuple version, std::vector
&& headers, std::string&& payload); reply(const reply& rhs); reply(reply &&rhs); ~reply(); reply& operator=(const reply &); reply& operator=(reply &&); void reset(); void set_version(int version_major, int version_minor); void set_version(std::tuple version) { set_version(std::get<0>(version), std::get<1>(version)); } /// Add a header with name \a name and value \a value void set_header(const std::string& name, const std::string& value); /// \brief Return the value of the header with name \a name std::string get_header(const std::string& name) const; /// \brief Remove the header with name \a name from the list of headers void remove_header(const std::string& name); /// Set a cookie void set_cookie(const char* name, const std::string& value, std::initializer_list directives = {}); /// \brief Set a header to delete the \a name cookie void set_delete_cookie(const char* name); /// Get a cookie std::string get_cookie(const char* name) const; std::string get_content_type() const { return get_header("Content-Type"); } void set_content_type(const std::string& type) ///< Set the Content-Type header { set_header("Content-Type", type); } /// Set the content and the content-type header depending on the content of doc (might be xhtml) void set_content(xml::document& doc); /// Set the content and the content-type header to text/xml void set_content(const xml::element& data); /// Set the content and the content-type header based on JSON data void set_content(const json::element& json); /// Set the content and the content-type header void set_content(const std::string& data, const std::string& contentType); /// Set the content by copying \a data and the content-type header void set_content(const char* data, size_t size, const std::string& contentType); /// To send a stream of data, with unknown size (using chunked transfer). /// reply takes ownership of \a data and deletes it when done. void set_content(std::istream* data, const std::string& contentType); /// return the content, only useful if the content was set with /// some constant string data. const std::string& get_content() const { return m_content; } /// return the content of the reply as an array of boost::asio::const_buffer objects std::vector to_buffers() const; /// for istream data, if the returned buffer array is empty, the data is done std::vector data_to_buffers(); /// Create a standard reply based on a HTTP status code static reply stock_reply(status_type inStatus); static reply stock_reply(status_type inStatus, const std::string& info); /// Create a standard redirect reply with the specified \a location static reply redirect(const std::string& location); static reply redirect(const std::string& location, status_type status); void set_status(status_type status) { m_status = status; } status_type get_status() const { return m_status; } /// return the size of the reply, only correct if the reply is fully memory based (no streams) size_t size() const; /// \brief Return true if the content will be sent chunked encoded bool get_chunked() const { return m_chunked; } /// for debugging friend std::ostream& operator<<(std::ostream& os, const reply& rep); private: friend class reply_parser; status_type m_status; int m_version_major, m_version_minor; std::vector
m_headers; std::istream* m_data; std::vector m_buffer; std::string m_content; bool m_chunked = false; char m_size_buffer[8]; ///< to store the string with the size for chunked encoding // this status line is only here to have a sensible location to store it mutable std::string m_status_line; }; } libzeep-5.1.7/include/zeep/http/request.hpp0000664000175000017500000002234214176701531020576 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::http::request class encapsulating a valid HTTP request #include #include #include #include #include #include #include namespace zeep::http { // -------------------------------------------------------------------- // TODO: one day this should be able to work with temporary files /// \brief container for file parameter information /// /// Files submitted using multipart/form-data contain a filename and /// mimetype that might be interesting to the client. struct file_param { std::string filename; std::string mimetype; const char* data; size_t length; explicit operator bool() const { return data != nullptr; } }; // Some type traits to detect arrays of file_params. // Should eventually be made more generic for all request parameters template struct is_file_param_array_type : std::false_type {}; template struct is_file_param_array_type and std::experimental::is_detected_v and not std::experimental::is_detected_v>> { static constexpr bool value = std::is_same_v; }; template inline constexpr bool is_file_param_array_type_v = is_file_param_array_type::value; // -------------------------------------------------------------------- /// request contains the parsed original HTTP request as received /// by the server. class request { public: friend class message_parser; friend class request_parser; friend class basic_server; using param = header; // alias name using cookie_directive = header; request(const std::string& method, const std::string& uri, std::tuple version = { 1, 0 }, std::vector
&& headers = {}, std::string&& payload = {}); request(const request& req); request& operator=(const request& rhs); /// \brief Fetch the local address from the connected socket void set_local_endpoint(boost::asio::ip::tcp::socket& socket); std::tuple get_local_endpoint() const { return { m_local_address, m_local_port }; } /// \brief Get the HTTP version requested std::tuple get_version() const { return { m_version[0] - '0', m_version[2] - '0' }; } /// \brief Set the METHOD type (POST, GET, etc) void set_method(const std::string& method) { m_method = method; } /// \brief Return the METHOD type (POST, GET, etc) const std::string& get_method() const { return m_method; } /// \brief Return the original URI as requested std::string get_uri() const { return m_uri; } /// \brief Set the URI void set_uri(const std::string& uri) { m_uri = uri; } /// \brief Get the address of the connecting remote std::string get_remote_address() const { return m_remote_address; } /// \brief Get the entire request line (convenience method) std::string get_request_line() const { return get_method() + ' ' + get_uri() + " HTTP/" + std::string(m_version, m_version + 3); } /// \brief Return the payload const std::string& get_payload() const { return m_payload; } /// \brief Set the payload void set_payload(const std::string& payload) { m_payload = payload; } /// \brief Return the time at which this request was received boost::posix_time::ptime get_timestamp() const { return m_timestamp; } /// \brief Return the value in the Accept header for type float get_accept(const char* type) const; /// \brief Check for Connection: keep-alive header bool keep_alive() const; /// \brief Set or replace a named header void set_header(const char* name, const std::string& value); /// \brief Return the list of headers auto get_headers() const { return m_headers; } /// \brief Return the named header std::string get_header(const char* name) const; /// \brief Remove this header from the list of headers void remove_header(const char* name); /// \brief Get the credentials. This is filled in if the request was validated json::element get_credentials() const { return m_credentials; } /// \brief Set the credentials for the request void set_credentials(json::element&& credentials) { m_credentials = std::move(credentials); } /// \brief Return the named parameter /// /// Fetch parameters from a request, either from the URL or from the payload in case /// the request contains a url-encoded or multi-part content-type header std::string get_parameter(const char* name) const { std::string result; std::tie(result, std::ignore) = get_parameter_ex(name); return result; } /// \brief Return the value of the parameter named \a name or the \a defaultValue if this parameter was not found std::string get_parameter(const char* name, const std::string& defaultValue) const { std::string result = get_parameter(name); if (result.empty()) result = defaultValue; return result; } /// \brief Return the value of the parameter named \a name or the \a defaultValue if this parameter was not found template, int> = 0> T get_parameter(const char* name, const T& defaultValue) const { return static_cast(std::stod(get_parameter(name, std::to_string(defaultValue)))); } /// \brief Return the value of the parameter named \a name or the \a defaultValue if this parameter was not found template and not std::is_same_v, int> = 0> T get_parameter(const char* name, const T& defaultValue) const { return static_cast(std::stol(get_parameter(name, std::to_string(defaultValue)))); } /// \brief Return the value of the parameter named \a name or the \a defaultValue if this parameter was not found template, int> = 0> T get_parameter(const char* name, const T& defaultValue) const { auto v = get_parameter(name, std::to_string(defaultValue)); return v == "true" or v == "1"; } /// \brief Return a std::multimap of name/value pairs for all parameters std::multimap get_parameters() const; /// \brief Return the info for a file parameter with name \a name /// file_param get_file_parameter(const char* name) const; /// \brief Return the info for all file parameters with name \a name /// std::vector get_file_parameters(const char* name) const; /// \brief Return whether the named parameter is present in the request bool has_parameter(const char* name) const { bool result; tie(std::ignore, result) = get_parameter_ex(name); return result; } /// \brief Return the value of HTTP Cookie with name \a name std::string get_cookie(const char* name) const; /// \brief Return the value of HTTP Cookie with name \a name std::string get_cookie(const std::string& name) const { return get_cookie(name.c_str()); } /// \brief Set the value of HTTP Cookie with name \a name to \a value void set_cookie(const char* name, const std::string& value); /// \brief Return the content of this request in a sequence of const_buffers /// /// Can be used in code that sends HTTP requests std::vector to_buffers() const; /// \brief Return the Accept-Language header value in the request as a std::locale object std::locale& get_locale() const; /// \brief For debugging purposes friend std::ostream& operator<<(std::ostream& io, const request& req); /// \brief suppose we want to construct requests... void set_content(const std::string& text, const std::string& contentType) { set_header("content-type", contentType); m_payload = text; set_header("content-length", std::to_string(text.length())); } /// \brief set a header void set_header(const std::string& name, const std::string& value); /// \brief Return value and flag indicating the existence of a parameter named \a name std::tuple get_parameter_ex(const char* name) const; private: void set_remote_address(const std::string& address) { m_remote_address = address; } std::string m_local_address; ///< Local endpoint address uint16_t m_local_port = 80; ///< Local endpoint port std::string m_method = "UNDEFINED"; ///< POST, GET, etc. std::string m_uri; ///< The uri as requested char m_version[3]; ///< The version string std::vector
m_headers; ///< A list with zeep::http::header values std::string m_payload; ///< For POST requests bool m_close = false; ///< Whether 'Connection: close' was specified boost::posix_time::ptime m_timestamp = boost::posix_time::second_clock::local_time(); json::element m_credentials; ///< The credentials as found in the validated access-token std::string m_remote_address; ///< Address of connecting client mutable std::unique_ptr m_locale; }; } // namespace zeep::http libzeep-5.1.7/include/zeep/http/rest-controller.hpp0000664000175000017500000003476514176701531022260 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::rest_controller class. /// Instances of this class take care of mapping member functions to /// REST calls automatically converting in- and output data #include #include #include #include #include #include #include namespace zeep::http { /// \brief class that helps with handling REST requests /// /// This controller will handle REST requests. (See https://restfulapi.net/ for more info on REST) /// /// To use this, create a subclass and add some methods that should be exposed. /// Then _map_ these methods on a path that optionally contains parameter values. /// /// See the chapter on REST controllers in the documention for more information. class rest_controller : public controller { public: /// \brief constructor /// /// \param prefix_path This is the leading part of the request URI for each mount point /// \param auth Optionally protect these REST calls with a authentication validator. /// This validator should also be added to the web_app that will contain /// this controller. rest_controller(const std::string& prefix_path) : controller(prefix_path) {} ~rest_controller(); /// \brief will do the hard work virtual bool handle_request(request& req, reply& rep); protected: using param = header; /// \brief helper class for pulling parameter values out of the request struct parameter_pack { parameter_pack(const request& req) : m_req(req) {} std::string get_parameter(const char* name) const { auto p = std::find_if(m_path_parameters.begin(), m_path_parameters.end(), [name](auto& pp) { return pp.name == name; }); if (p != m_path_parameters.end()) return p->value; else return m_req.get_parameter(name); } std::tuple get_parameter_ex(const char* name) const { auto p = std::find_if(m_path_parameters.begin(), m_path_parameters.end(), [name](auto& pp) { return pp.name == name; }); if (p != m_path_parameters.end()) return { p->value, true }; else return m_req.get_parameter_ex(name); } std::vector get_parameters(const char* name) const { auto p = std::find_if(m_path_parameters.begin(), m_path_parameters.end(), [name](auto& pp) { return pp.name == name; }); if (p != m_path_parameters.end()) return { p->value }; else { std::vector result; for (const auto& [p_name, p_value]: m_req.get_parameters()) { if (p_name != name) continue; result.push_back(p_value); } return result; } } file_param get_file_parameter(const char* name) const { return m_req.get_file_parameter(name); } std::vector get_file_parameters(const char* name) const { return m_req.get_file_parameters(name); } const request& m_req; std::vector m_path_parameters; }; /// \brief abstract base class for mount points struct mount_point_base { mount_point_base(const char* path, const std::string& method) : m_path(path), m_method(method) {} virtual ~mount_point_base() {} virtual void call(const parameter_pack& params, reply& reply) = 0; std::string m_path; std::string m_method; std::regex m_rx; std::vector m_path_params; }; template struct mount_point {}; template struct mount_point : mount_point_base { using Sig = Result(ControllerType::*)(Args...); using ArgsTuple = std::tuple>...>; using ResultType = typename std::remove_const_t>; using Callback = std::function; static constexpr size_t N = sizeof...(Args); template mount_point(const char* path, const std::string& method, rest_controller* owner, Sig sig, Names... names) : mount_point_base(path, method) { static_assert(sizeof...(Names) == sizeof...(Args), "Number of names should be equal to number of arguments of callback function"); ControllerType* controller = dynamic_cast(owner); if (controller == nullptr) throw std::runtime_error("Invalid controller for callback"); m_callback = [controller, sig](Args... args) { return (controller->*sig)(args...); }; if constexpr (sizeof...(Names) > 0) { // for (auto name: {...names }) size_t ix = 0; for (auto name: {names...}) m_names[ix++] = name; // construct a regex for matching paths namespace fs = std::filesystem; fs::path p = path; std::string ps; for (auto pp: p) { if (pp.empty()) continue; if (not ps.empty()) ps += '/'; if (pp.string().front() == '{' and pp.string().back() == '}') { auto param = pp.string().substr(1, pp.string().length() - 2); auto i = std::find(m_names.begin(), m_names.end(), param); if (i == m_names.end()) { assert(false); throw std::runtime_error("Invalid path for mount point, a parameter was not found in the list of parameter names"); } size_t ni = i - m_names.begin(); m_path_params.emplace_back(m_names[ni]); ps += "([^/]+)"; } else ps += pp.string(); } m_rx.assign(ps); } } virtual void call(const parameter_pack& params, reply& reply) { try { json::element message("ok"); reply.set_content(message); reply.set_status(ok); ArgsTuple args = collect_arguments(params, std::make_index_sequence()); invoke(std::move(args), reply); } catch (const std::exception& e) { json::element message; message["error"] = e.what(); reply.set_content(message); reply.set_status(internal_server_error); } } template, int> = 0> void invoke(ArgsTuple&& args, reply& /*reply*/) { std::apply(m_callback, std::forward(args)); } template or std::is_same_v), int> = 0> void invoke(ArgsTuple&& args, reply& reply) { set_reply(reply, std::apply(m_callback, std::forward(args))); } template, int> = 0> void invoke(ArgsTuple&& args, reply& reply) { reply = std::apply(m_callback, std::forward(args)); } void set_reply(reply& rep, std::filesystem::path v) { rep.set_content(new std::ifstream(v, std::ios::binary), "application/octet-stream"); } void set_reply(reply& rep, zeep::json::element&& v) { rep.set_content(std::move(v)); } template void set_reply(reply& rep, T&& v) { json::element e; to_element(e, v); rep.set_content(e); } template ArgsTuple collect_arguments(const parameter_pack& params, std::index_sequence) { // return std::make_tuple(params.get_parameter(m_names[I])...); return std::make_tuple(get_parameter(params, m_names[I], typename std::tuple_element_t{})...); } bool get_parameter(const parameter_pack& params, const char* name, bool result) { try { auto v = params.get_parameter(name); result = v == "true" or v == "1" or v == "on"; } catch (const std::exception& e) { using namespace std::literals::string_literals; throw std::runtime_error("Invalid value passed for parameter "s + name); } return result; } std::string get_parameter(const parameter_pack& params, const char* name, std::string result) { try { result = params.get_parameter(name); } catch (const std::exception&) { using namespace std::literals::string_literals; throw std::runtime_error("Invalid value passed for parameter "s + name); } return result; } file_param get_parameter(const parameter_pack& params, const char* name, file_param result) { try { result = params.get_file_parameter(name); } catch (const std::exception& e) { using namespace std::literals::string_literals; throw std::runtime_error("Invalid value passed for parameter "s + name); } return result; } std::vector get_parameter(const parameter_pack& params, const char* name, std::vector result) { try { result = params.get_file_parameters(name); } catch (const std::exception& e) { using namespace std::literals::string_literals; throw std::runtime_error("Invalid value passed for parameter "s + name); } return result; } json::element get_parameter(const parameter_pack& params, const char* name, json::element result) { try { json::parse_json(params.get_parameter(name), result); } catch (const std::exception& e) { using namespace std::literals::string_literals; throw std::runtime_error("Invalid value passed for parameter "s + name); } return result; } template std::optional get_parameter(const parameter_pack& params, const char* name, std::optional result) { try { const auto& [s, available] = params.get_parameter_ex(name); if (available) result = boost::lexical_cast(s); } catch (const std::exception& e) { using namespace std::literals::string_literals; throw std::runtime_error("Invalid value passed for parameter "s + name); } return result; } std::optional get_parameter(const parameter_pack& params, const char* name, std::optional result) { try { const auto& [s, available] = params.get_parameter_ex(name); if (available) result = s; } catch (const std::exception& e) { using namespace std::literals::string_literals; throw std::runtime_error("Invalid value passed for parameter "s + name); } return result; } template> or std::is_enum_v or zeep::is_serializable_array_type_v>), int> = 0> T get_parameter(const parameter_pack& params, const char* name, T result) { try { auto p = params.get_parameter(name); if (not p.empty()) result = boost::lexical_cast(p); } catch(const std::exception& e) { using namespace std::literals::string_literals; throw std::runtime_error("Invalid value passed for parameter "s + name); } return result; } template and std::is_enum_v, int> = 0> T get_parameter(const parameter_pack& params, const char* name, T result) { json::element v = params.get_parameter(name); from_element(v, result); return result; } template> or zeep::is_serializable_array_type_v>, int> = 0> T get_parameter(const parameter_pack& params, const char* name, T result) { json::element v; if (params.m_req.get_header("content-type") == "application/json") zeep::json::parse_json(params.m_req.get_payload(), v); else zeep::json::parse_json(params.get_parameter(name), v); from_element(v, result); return result; } Callback m_callback; std::array m_names; }; /// The \a mountPoint parameter is the local part of the mount point. /// It can contain parameters enclosed in curly brackets. /// /// For example, say we need a REST call to get the status of shoppingcart /// where the browser will send: /// /// `GET /ajax/cart/1234/status` /// /// Our callback will look like this, for a class my_ajax_handler constructed /// with prefixPath `/ajax`: /// \code{.cpp} /// CartStatus my_ajax_handler::handle_get_status(int id); /// \endcode /// Then we mount this callback like this: /// \code{.cpp} /// map_get_request("/cart/{id}/status", &my_ajax_handler::handle_get_status, "id"); /// \endcode /// /// The number of \a names of the paramers specified should be equal to the number of /// actual arguments for the callback, otherwise the compiler will complain. /// /// Arguments not found in the path will be fetched from the payload in case of a POST /// or from the URI parameters otherwise. /// \brief map \a mountPoint in URI space to \a callback and map the arguments in this callback to parameters passed with \a names template void map_request(const char* mountPoint, const std::string& method, Callback callback, ArgNames... names) { m_mountpoints.emplace_back(new mount_point(mountPoint, method, this, callback, names...)); } /// \brief map a POST to \a mountPoint in URI space to \a callback and map the arguments in this callback to parameters passed with \a names template void map_post_request(const char* mountPoint, Callback callback, ArgNames... names) { map_request(mountPoint, "POST", callback, names...); } /// \brief map a PUT to \a mountPoint in URI space to \a callback and map the arguments in this callback to parameters passed with \a names template void map_put_request(const char* mountPoint, Sig callback, ArgNames... names) { map_request(mountPoint, "PUT", callback, names...); } /// \brief map a GET to \a mountPoint in URI space to \a callback and map the arguments in this callback to parameters passed with \a names template void map_get_request(const char* mountPoint, Sig callback, ArgNames... names) { map_request(mountPoint, "GET", callback, names...); } /// \brief map a DELETE to \a mountPoint in URI space to \a callback and map the arguments in this callback to parameters passed with \a names template void map_delete_request(const char* mountPoint, Sig callback, ArgNames... names) { map_request(mountPoint, "DELETE", callback, names...); } private: std::list m_mountpoints; }; } // namespace zeep::http libzeep-5.1.7/include/zeep/http/security.hpp0000664000175000017500000002360014176701531020753 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of various classes that help in handling HTTP authentication. #include #include #include #include #include #include // -------------------------------------------------------------------- // namespace zeep::http { /// \brief exception thrown when unauthorized access is detected /// /// when using authentication, this exception is thrown for unauthorized access struct unauthorized_exception : public zeep::exception { /// \brief constructor unauthorized_exception() : exception("unauthorized") { } }; // -------------------------------------------------------------------- class password_encoder { public: virtual ~password_encoder() {} virtual std::string encode(const std::string& password) const = 0; virtual bool matches(const std::string& raw_password, const std::string& stored_password) const = 0; }; // -------------------------------------------------------------------- class pbkdf2_sha256_password_encoder : public password_encoder { public: static inline constexpr const char* name() { return "pbkdf2_sha256"; }; pbkdf2_sha256_password_encoder(int iterations = 30000, int key_length = 32) : m_iterations(iterations), m_key_length(key_length) {} virtual std::string encode(const std::string& password) const { using namespace std::literals; auto salt = zeep::encode_base64(zeep::random_hash()).substr(12); auto pw = zeep::encode_base64(zeep::pbkdf2_hmac_sha256(salt, password, m_iterations, m_key_length)); return "pbkdf2_sha256$" + std::to_string(m_iterations) + '$' + salt + '$' + pw; } virtual bool matches(const std::string& raw_password, const std::string& stored_password) const { using namespace std::literals; bool result = false; std::regex rx(R"(pbkdf2_sha256\$(\d+)\$([^$]+)\$(.+))"); std::smatch m; if (std::regex_match(stored_password, m, rx)) { auto salt = m[2].str(); auto iterations = std::stoul(m[1]); auto test = zeep::pbkdf2_hmac_sha256(salt, raw_password, iterations, m_key_length); test = zeep::encode_base64(test); result = (m[3] == test); } return result; } private: int m_iterations, m_key_length; }; // -------------------------------------------------------------------- /// \brief simple storage class for user details, returned by user_service /// /// The user_details struct contains all the information needed to allow /// access to a resource based on username. The password is the encrypted /// password. struct user_details { user_details() {} user_details(const std::string& username, const std::string& password, const std::set& roles) : username(username), password(password), roles(roles) {} std::string username; std::string password; std::set roles; }; // -------------------------------------------------------------------- /// \brief exception thrown by user_service when trying to load user_details for an unknown user class user_unknown_exception : public zeep::exception { public: user_unknown_exception() : zeep::exception("user unknown") {}; }; /// \brief exception thrown by security_context when a username/password combo is not valid class invalid_password_exception : public zeep::exception { public: invalid_password_exception() : zeep::exception("invalid password") {}; }; // -------------------------------------------------------------------- /// \brief The user service class, provding user data used for authentication /// /// This is an abstract base class for a user service. class user_service { public: user_service() {} virtual ~user_service() {} /// \brief return the user_details for a user named \a username virtual user_details load_user(const std::string& username) const = 0; }; // -------------------------------------------------------------------- /// \brief A very simple implementation of the user service class /// /// This implementation of a user service can be used to jump start a /// project. Normally you would implement something more robust. class simple_user_service : public user_service { public: simple_user_service(std::initializer_list>> users) { for (auto const& [username, password, roles]: users) add_user(username, password, roles); } /// \brief return the user_details for a user named \a username virtual user_details load_user(const std::string& username) const { user_details result = {}; auto ui = std::find_if(m_users.begin(), m_users.end(), [username](const user_details& u) { return u.username == username; }); if (ui != m_users.end()) result = *ui; return result; } void add_user(const std::string& username, const std::string& password, const std::set& roles) { m_users.emplace_back(username, password, roles); } protected: std::vector m_users; }; // -------------------------------------------------------------------- /// \brief class that manages security in a HTTP scope /// /// Add this to a HTTP server and it will check authentication. /// Access to certain paths can be limited by specifying which /// 'roles' are allowed. /// /// The authentication mechanism used is based on JSON Web Tokens, JWT in short. class security_context { public: /// \brief constructor taking a validator /// /// Create a security context for server \a s with validator \a validator and /// a flag \a defaultAccessAllowed indicating if non-matched uri's should be allowed security_context(const std::string& secret, user_service& users, bool defaultAccessAllowed = false) : m_secret(secret), m_users(users), m_default_allow(defaultAccessAllowed) { register_password_encoder(); } /// \brief register a custom password encoder /// /// The password encoder should derive from the abstract password encoder class above /// and also implement the name() method. template void register_password_encoder() { m_known_password_encoders.emplace_back(PWEncoder::name(), new PWEncoder()); } /// \brief Add a new rule for access /// /// A new rule will be added to the list, allowing access to \a glob_pattern /// to users having role \a role /// /// \a glob_pattern should start with a slash void add_rule(const std::string& glob_pattern, const std::string& role) { add_rule(glob_pattern, { role }); } /// \brief Add a new rule for access /// /// A new rule will be added to the list, allowing access to \a glob_pattern /// to users having a role in \a roles /// /// If \a roles is empty, access is allowed to anyone. /// /// \a glob_pattern should start with a slash void add_rule(std::string glob_pattern, std::initializer_list roles) { assert(glob_pattern.front() == '/'); m_rules.emplace_back(rule{glob_pattern, roles}); } /// \brief Validate the request \a req against the stored rules /// /// This method will validate the request in \a req agains the stored rules /// and will throw an exception if access is not allowed. /// The request \a req will be updated with the credentials for further use. /// If the validate CSRF is set, the CSRF token will also be validated. void validate_request(request& req) const; /// \brief Add e.g. headers to reply for an authorized request /// /// When validation succeeds, a HTTP reply is send to the user and this routine will be /// called to augment the reply with additional information. /// /// \param rep Then zeep::http::reply object that will be send to the user /// \param username The name for the authorized user, credentials will be fetched from the user_service void add_authorization_headers(reply &rep, const std::string& username); /// \brief Add e.g. headers to reply for an authorized request /// /// When validation succeeds, a HTTP reply is send to the user and this routine will be /// called to augment the reply with additional information. /// /// \param rep Then zeep::http::reply object that will be send to the user /// \param user The authorized user details void add_authorization_headers(reply &rep, const user_details user); /// \brief verify the username/password combination and set a cookie in the reply in case of success /// /// When validation succeeds, add_authorization_headers is called, otherwise an exception is thrown. /// /// \param username The name for the user /// \param password The password for the user /// \param rep Then zeep::http::reply object that will be send back to the browser void verify_username_password(const std::string& username, const std::string& password, reply &rep); /// \brief return reference to the user_service object user_service& get_user_service() const { return m_users; } /// \brief Get or create a CSRF token for the current request /// /// Return a CSRF token. If this was not present in the request, a new will be generated /// \param req The HTTP request /// \return A std::pair containing the CSRF token and a flag indicating the token is new std::pair get_csrf_token(request& req); /// \brief To automatically validate CSRF tokens, set this flag void set_validate_csrf(bool validate) { m_validate_csrf = validate; } bool get_validate_csrf() const { return m_validate_csrf; } private: security_context(const security_context&) = delete; security_context& operator=(const security_context&) = delete; struct rule { std::string m_pattern; std::set m_roles; }; std::string m_secret; user_service& m_users; bool m_default_allow; bool m_validate_csrf = false; std::vector m_rules; std::vector>> m_known_password_encoders; }; } // namespace zeep::httplibzeep-5.1.7/include/zeep/http/server.hpp0000664000175000017500000001730214176701531020414 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::http::server class #include #include #include #include #include #include #include namespace zeep::http { class connection; class controller; class security_context; class error_handler; /// \brief The libzeep HTTP server implementation. Originally based on example code found in boost::asio. /// /// The server class is a simple, stand alone HTTP server. Call bind to make it listen to an address/port /// combination. Add controller classes to do the actual work. These controllers will be tried in the order /// at which they were added to see if they want to process a request. class basic_server { public: /// \brief Simple server, no security, no template processor basic_server(); /// \brief Simple server, no security, create default template processor with \a docroot basic_server(const std::string& docroot) : basic_server() { set_template_processor(new template_processor(docroot)); } /// \brief server with a security context for limited access basic_server(security_context* s_ctxt); /// \brief server with a security context for limited access, create default template processor with \a docroot basic_server(security_context* s_ctxt, const std::string& docroot) : basic_server(s_ctxt) { set_template_processor(new template_processor(docroot)); } basic_server(const basic_server&) = delete; basic_server& operator=(const basic_server&) = delete; virtual ~basic_server(); /// \brief Get the security context provided in the constructor security_context& get_security_context() { return *m_security_context; } /// \brief Test if a security context was provided in the constructor bool has_security_context() const { return (bool)m_security_context; } /// \brief Set the set of allowed methods (default is "GET", "POST", "PUT", "OPTIONS", "HEAD", "DELETE") void set_allowed_methods(const std::set& methods) { m_allowed_methods = methods; } /// \brief Get the set of allowed methods std::set get_allowed_methods() const { return m_allowed_methods; } /// \brief Set the context_name /// /// The context name is used in constructing relative URL's that start with a forward slash void set_context_name(const std::string& context_name) { m_context_name = context_name; } /// \brief Get the context_name /// /// The context name is used in constructing relative URL's that start with a forward slash std::string get_context_name() const { return m_context_name; } /// \brief Add controller to the list of controllers /// /// When a request is received, the list of controllers get a chance /// of handling it, in the order of which they were added to this server. /// If none of the controller handle the request the not_found error is returned. void add_controller(controller* c); /// \brief Add an error handler /// /// Errors are handled by the error handler list. The last added handler /// is called first. void add_error_handler(error_handler* eh); /// \brief Set the template processor /// /// A template processor handles loading templates and processing /// the contents. void set_template_processor(basic_template_processor* template_processor); /// \brief Get the template processor /// /// A template processor handles loading templates and processing /// the contents. This will throw if the processor has not been set /// yet. basic_template_processor& get_template_processor() { if (not m_template_processor) throw std::logic_error("Template processor not specified yet"); return *m_template_processor; } /// \brief Get the template processor /// /// A template processor handles loading templates and processing /// the contents. This will throw if the processor has not been set /// yet. const basic_template_processor& get_template_processor() const { if (not m_template_processor) throw std::logic_error("Template processor not specified yet"); return *m_template_processor; } /// \brief returns whether template processor has been set bool has_template_processor() const { return (bool)m_template_processor; } /// \brief Bind the server to address \a address and port \a port virtual void bind(const std::string& address, unsigned short port); /// \brief Run as many as \a nr_of_threads threads simultaneously virtual void run(int nr_of_threads); /// \brief Stop all threads and stop listening virtual void stop(); /// \brief to extend the log entry for a current request, use this ostream: static std::ostream& get_log(); /// \brief log_forwarded tells the HTTP server to use the last entry in X-Forwarded-For as client log entry void set_log_forwarded(bool v) { m_log_forwarded = v; } /// \brief returns the address as specified in bind std::string get_address() const { return m_address; } /// \brief returns the port as specified in bind unsigned short get_port() const { return m_port; } /// \brief get_io_context has to be public since we need it to call notify_fork from child code virtual boost::asio::io_context& get_io_context() = 0; /// \brief get_executor has to be public since we need it to call notify_fork from child code boost::asio::io_context::executor_type get_executor() { return get_io_context().get_executor(); } protected: /// \brief the default entry logger virtual void log_request(const std::string& client, const request& req, const reply& rep, const boost::posix_time::ptime& start, const std::string& referer, const std::string& userAgent, const std::string& entry) noexcept; private: friend class preforked_server_base; friend class connection; virtual void handle_request(boost::asio::ip::tcp::socket& socket, request& req, reply& rep); void handle_accept(boost::system::error_code ec); std::shared_ptr m_acceptor; std::list m_threads; std::shared_ptr m_new_connection; std::string m_address; unsigned short m_port; bool m_log_forwarded; std::string m_context_name; /// \brief This is required for proxied servers e.g. std::unique_ptr m_security_context; std::unique_ptr m_template_processor; std::list m_controllers; std::list m_error_handlers; std::set m_allowed_methods; }; // -------------------------------------------------------------------- /// \brief The most often used server class, contains its own io_context. class server : public basic_server { public: /// \brief Simple server, no security, no template processor server() {} /// \brief Simple server, no security, create default template processor with \a docroot server(const std::string& docroot) : basic_server(docroot) {} /// \brief server with a security context for limited access server(security_context* s_ctxt) : basic_server(s_ctxt) {} /// \brief server with a security context for limited access, create default template processor with \a docroot server(security_context* s_ctxt, const std::string& docroot) : basic_server(s_ctxt, docroot) {} boost::asio::io_context& get_io_context() override { return m_io_context; } /// \brief Stop the server and also stop the io_context virtual void stop() override { m_io_context.stop(); basic_server::stop(); } private: boost::asio::io_context m_io_context; }; } // namespace zeep::http libzeep-5.1.7/include/zeep/http/soap-controller.hpp0000664000175000017500000002717114176701531022236 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::soap_controller class. /// Instances of this class take care of mapping member functions to /// SOAP calls automatically converting in- and output data #include #include #include #include namespace zeep::http { /// soap_envelope is a wrapper around a SOAP envelope. Use it for /// input and output of correctly formatted SOAP messages. class soap_envelope : public boost::noncopyable { public: /// \brief Create an empty envelope soap_envelope(); /// \brief Parse a SOAP message from the payload received from a client, /// throws an exception if the envelope is empty or invalid. soap_envelope(std::string& payload); // /// \brief Parse a SOAP message received from a client, // /// throws an exception if the envelope is empty or invalid. // envelope(xml::document& data); /// \brief The request element as contained in the original SOAP message xml::element& request() { return *m_request; } private: xml::document m_payload; xml::element* m_request; }; // -------------------------------------------------------------------- /// Wrap data into a SOAP envelope /// /// \param data The xml::element object to wrap into the envelope /// \return A new xml::element object containing the envelope. xml::element make_envelope(xml::element&& data); // xml::element make_envelope(const xml::element& data); /// Create a standard SOAP Fault message for the string parameter /// /// \param message The string object containing a descriptive error message. /// \return A new xml::element object containing the fault envelope. xml::element make_fault(const std::string& message); /// Create a standard SOAP Fault message for the exception object /// /// \param ex The exception object that was catched. /// \return A new xml::element object containing the fault envelope. xml::element make_fault(const std::exception& ex); // -------------------------------------------------------------------- /// \brief class that helps with handling SOAP requests /// /// This controller will handle SOAP requests automatically handing the packing /// and unpacking of XML envelopes. /// /// To use this, create a subclass and add some methods that should be exposed. /// Then _map_ these methods on a path that optionally contains parameter values. /// /// See the chapter on SOAP controllers in the documention for more information. class soap_controller : public controller { public: /// \brief constructor /// /// \param prefix_path This is the leading part of the request URI for each mount point /// \param ns This is the XML Namespace for our SOAP calls soap_controller(const std::string& prefix_path, const std::string& ns) : controller(prefix_path) , m_ns(ns) , m_service("b") { while (m_prefix_path.front() == '/') m_prefix_path.erase(0, 1); m_location = m_prefix_path; } ~soap_controller() { for (auto mp: m_mountpoints) delete mp; } /// \brief Set the external address at which this service is visible void set_location(const std::string& location) { m_location = location; } /// \brief Set the service name void set_service(const std::string& service) { m_service = service; } /// \brief map a SOAP action to \a callback using \a names for mapping the arguments /// /// The method in \a callback should be a method of the derived class having as many /// arguments as the number of specified \a names. template void map_action(const char* actionName, Callback callback, ArgNames... names) { auto mp = m_mountpoints.emplace_back(new mount_point(actionName, this, callback, names...)); mp->collect_types(m_types, m_ns); } /// \brief Create a WSDL based on the registered actions xml::element make_wsdl(); /// \brief Handle the SOAP request virtual bool handle_request(request& req, reply& reply); protected: using type_map = std::map; using message_map = std::map; struct mount_point_base { mount_point_base(const char* action) : m_action(action) {} virtual ~mount_point_base() {} virtual void call(const xml::element& request, reply& reply, const std::string& ns) = 0; virtual void collect_types(std::map& types, const std::string& ns) = 0; std::string m_action; }; template struct mount_point {}; template struct mount_point : mount_point_base { using Sig = Result(ControllerType::*)(Args...); using ArgsTuple = std::tuple>...>; using Callback = std::function; static constexpr size_t N = sizeof...(Args); mount_point(const char* action, soap_controller* owner, Sig sig) : mount_point_base(action) { ControllerType* controller = dynamic_cast(owner); if (controller == nullptr) throw std::runtime_error("Invalid controller for callback"); m_callback = [controller, sig](Args... args) { return (controller->*sig)(args...); }; } template mount_point(const char* action, soap_controller* owner, Sig sig, Names... names) : mount_point(action, owner, sig) { static_assert(sizeof...(Names) == sizeof...(Args), "Number of names should be equal to number of arguments of callback function"); // for (auto name: {...names }) size_t i = 0; for (auto name: { names... }) m_names[i++] = name; } virtual void collect_types(std::map& types, const std::string& ns) { if constexpr (not std::is_void_v) m_responseType = xml::type_serializer::schema("Response", ns); if constexpr (sizeof...(Args) > 0) collect_types(types, ns, std::make_index_sequence()); } template void collect_types(std::map& types, const std::string& ns, std::index_sequence ix) { std::make_tuple((m_parameterTypes[I] = collect_type(types, ns))...); } template xml::element collect_type(std::map& types, const std::string& ns) { using type = typename std::tuple_element_t; return xml::type_serializer::schema(m_names[I], ns); } virtual void call(const xml::element& request, reply& reply, const std::string& ns) { reply.set_status(ok); ArgsTuple args = collect_arguments(request, std::make_index_sequence()); invoke(std::move(args), reply, ns); } template, int> = 0> void invoke(ArgsTuple&& args, reply& reply, const std::string& ns) { std::apply(m_callback, std::forward(args)); xml::element response(m_action + "Response"); response.move_to_name_space("m", ns, false, false); reply.set_content(make_envelope(std::move(response))); } template, int> = 0> void invoke(ArgsTuple&& args, reply& reply, const std::string& ns) { auto result = std::apply(m_callback, std::forward(args)); // and serialize the result back into XML xml::element response(m_action + "Response"); xml::serializer sr(response); sr.serialize_element(result); response.move_to_name_space("m", ns, true, true); auto envelope = make_envelope(std::move(response)); reply.set_content(std::move(envelope)); } template ArgsTuple collect_arguments(const xml::element& request, std::index_sequence) { xml::deserializer ds(request); return std::make_tuple(get_parameter>(ds, m_names[I])...); } template T get_parameter(xml::deserializer& ds, const char* name) { T v = {}; ds.deserialize_element(name, v); return v; } virtual void describe(type_map& types, message_map& messages, xml::element& portType, xml::element* binding) { // the request type xml::element requestType("xsd:element", { { "name", m_action }}); auto& complexType = requestType.emplace_back("xsd:complexType"); auto& sequence = complexType.emplace_back("xsd:sequence"); // // for (size_t) // boost::fusion::accumulate(args, m_names.begin(), // parameter_types(types, sequence)); // // and the response type // element* responseType(new element("xsd:element")); // responseType->set_attribute("name", get_response_name()); // types[get_response_name()] = responseType; // complexType = new element("xsd:complexType"); // responseType->append(complexType); // sequence = new element("xsd:sequence"); // complexType->append(sequence); // types[m_action] = requestType; // schema_creator wc(types, sequence); // response_type response; // wc.add_element(m_names[name_count - 1].c_str(), response); // // now the wsdl operations // element* message = new element("wsdl:message"); // message->set_attribute("name", get_action_name() + "RequestMessage"); // element* n = new element("wsdl:part"); // n->set_attribute("name", "parameters"); // n->set_attribute("element", kPrefix + ':' + get_action_name()); // message->append(n); // messages[message->get_attribute("name")] = message; // message = new element("wsdl:message"); // message->set_attribute("name", get_response_name() + "Message"); // n = new element("wsdl:part"); // n->set_attribute("name", "parameters"); // n->set_attribute("element", kPrefix + ':' + get_response_name()); // message->append(n); // messages[message->get_attribute("name")] = message; // // port type // element* operation(new element("wsdl:operation")); // operation->set_attribute("name", get_action_name()); // element* input(new element("wsdl:input")); // input->set_attribute("message", kPrefix + ':' + get_action_name() + "RequestMessage"); // operation->append(input); // element* output(new element("wsdl:output")); // output->set_attribute("message", kPrefix + ':' + get_response_name() + "Message"); // operation->append(output); // portType->append(operation); // // and the soap operations // operation = new element("wsdl:operation"); // operation->set_attribute("name", get_action_name()); // binding->append(operation); // element* soapOperation(new element("soap:operation")); // soapOperation->set_attribute("soapAction", ""); // soapOperation->set_attribute("style", "document"); // operation->append(soapOperation); // input = new element("wsdl:input"); // operation->append(input); // output = new element("wsdl:output"); // operation->append(output); // element* body(new element("soap:body")); // body->set_attribute("use", "literal"); // input->append(body); // body = new element("soap:body"); // body->set_attribute("use", "literal"); // output->append(body); } Callback m_callback; std::array m_names; xml::element m_responseType; std::array m_parameterTypes; }; std::list m_mountpoints; std::string m_ns, m_location, m_service; std::map m_types; }; } // namespace zeep::http libzeep-5.1.7/include/zeep/http/tag-processor.hpp0000664000175000017500000002221614176701531021676 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::http::tag_processor classes. These classes take care of processing HTML templates #include #include #include #include namespace zeep::http { class html_controller; class basic_template_processor; // -------------------------------------------------------------------- // /// \brief Abstract base class for tag_processor. /// /// Note that this class should be light in construction, we create it every time a page is rendered. class tag_processor { public: tag_processor(const tag_processor&) = delete; tag_processor& operator=(const tag_processor&) = delete; virtual ~tag_processor() = default; /// \brief process xml parses the XHTML and fills in the special tags and evaluates the el constructs /// /// This function is called to modify the xml tree in \a node /// /// \param node The XML zeep::xml::node (element) to manipulate /// \param scope The zeep::http::scope containing the variables and request /// \param dir The path to the docroot, the directory containing the XHTML templates /// \param webapp The instance of webapp that called this function virtual void process_xml(xml::node* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader) = 0; protected: /// \brief constructor /// /// \param ns Then XML namespace for the tags and attributes that are processed by this tag_processor tag_processor(const char* ns) : m_ns(ns) {} std::string m_ns; }; // -------------------------------------------------------------------- /// \brief A tag_processor compatible with the old version of libzeep. Works /// on tags only, not on attributes. Also parses any occurrence of ${}. /// For newer code, please consider using the v2 version only. class tag_processor_v1 : public tag_processor { public: /// \brief default namespace for this processor static constexpr const char* ns() { return "http://www.hekkelman.com/libzeep/m1"; } /// \brief constructor /// /// By default the namespace for the v1 processor is the one in ns() tag_processor_v1(const char* ns = tag_processor_v1::ns()); /// \brief actual implementation of the tag processing. virtual void process_xml(xml::node* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); protected: virtual void process_tag(const std::string& tag, xml::element* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); private: /// handler for mrs:include tags void process_include(xml::element* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); void process_if(xml::element* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); void process_iterate(xml::element* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); void process_for(xml::element* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); void process_number(xml::element* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); void process_options(xml::element* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); void process_option(xml::element* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); void process_checkbox(xml::element* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); void process_url(xml::element* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); void process_param(xml::element* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); void process_embed(xml::element* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); bool process_el(const scope& scope, std::string& s); }; // -------------------------------------------------------------------- /// \brief version two of the tag_processor in libzeep /// /// This is the new tag_processor. It is designed to look a bit like /// Thymeleaf (https://www.thymeleaf.org/) /// This processor works on attributes mostly, but can process inline /// el constructs as well. /// /// The documentention contains a section describing all the /// xml tags and attributes this processor handles. class tag_processor_v2 : public tag_processor { public: /// \brief default namespace for this processor static constexpr const char* ns() { return "http://www.hekkelman.com/libzeep/m2"; } /// \brief each handler returns a code telling the processor what to do with the node enum class AttributeAction { none, remove, replace }; using attr_handler = std::function; /// \brief constructor with default namespace tag_processor_v2(const char* ns = tag_processor_v2::ns()); /// \brief process xml parses the XHTML and fills in the special tags and evaluates the el constructs virtual void process_xml(xml::node* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); /// \brief It is possible to extend this processor with custom handlers void register_attr_handler(const std::string& attr, attr_handler&& handler) { m_attr_handlers.emplace(attr, std::forward(handler)); } protected: void process_node(xml::node* node, const scope& scope, std::filesystem::path dir, basic_template_processor& loader); void process_text(xml::text& t, const scope& scope); void post_process(xml::element* e, const scope& parentScope, std::filesystem::path dir, basic_template_processor& loader); // std::vector> resolve_fragment_spec(xml::element* node, std::filesystem::path dir, basic_html_controller& controller, const std::string& spec, const scope& scope); std::vector> resolve_fragment_spec(xml::element* node, std::filesystem::path dir, basic_template_processor& loader, const json::element& spec, const scope& scope); std::vector> resolve_fragment_spec(xml::element* node, std::filesystem::path dir, basic_template_processor& loader, const std::string& file, const std::string& selector, bool byID); // virtual void process_node_attr(xml::node* node, const scope& scope, std::filesystem::path dir); AttributeAction process_attr_if(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader, bool unless); AttributeAction process_attr_assert(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader); AttributeAction process_attr_text(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader, bool escaped); AttributeAction process_attr_switch(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader); AttributeAction process_attr_each(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader); AttributeAction process_attr_attr(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader); AttributeAction process_attr_with(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader); AttributeAction process_attr_generic(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader); AttributeAction process_attr_boolean_value(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader); AttributeAction process_attr_inline(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader); AttributeAction process_attr_append(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader, std::string dest, bool prepend); AttributeAction process_attr_classappend(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader); AttributeAction process_attr_styleappend(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader); AttributeAction process_attr_remove(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader); enum class TemplateIncludeAction { include, insert, replace }; AttributeAction process_attr_include(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader, TemplateIncludeAction tia); std::map m_attr_handlers; xml::document m_template; // copy of the entire document... }; } libzeep-5.1.7/include/zeep/http/template-processor.hpp0000664000175000017500000001673414176701531022746 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::template_processor class. This class /// handles the loading and processing of XHTML files. #include #include #include #include #include #include // -------------------------------------------------------------------- // namespace zeep::http { class html_controller; // ----------------------------------------------------------------------- /// \brief abstract base class for a resource loader /// /// A resource loader is used to fetch the resources a webapp can serve /// This is an abstract base class, use either file_loader to load files /// from a 'docroot' directory or rsrc_loader to load files from compiled in /// resources. (See https://github.com/mhekkel/mrc for more info on resources) class resource_loader { public: virtual ~resource_loader() {} resource_loader(const resource_loader&) = delete; resource_loader& operator=(const resource_loader&) = delete; /// \brief return last_write_time of \a file virtual std::filesystem::file_time_type file_time(const std::string& file, std::error_code& ec) noexcept = 0; /// \brief basic loader, returns error in ec if file was not found virtual std::istream* load_file(const std::string& file, std::error_code& ec) noexcept = 0; protected: resource_loader() {} }; // ----------------------------------------------------------------------- /// \brief actual implementation of a zeep::resource_loader that loads files from disk /// /// Load the resources from the directory specified in the docroot constructor parameter. class file_loader : public resource_loader { public: /// \brief constructor /// /// \param docroot Path to the directory where the 'resources' are located /// /// Throws a runtime_error if the docroot does not exist file_loader(const std::filesystem::path& docroot = "."); /// \brief return last_write_time of \a file virtual std::filesystem::file_time_type file_time(const std::string& file, std::error_code& ec) noexcept; /// \brief basic loader, returns error in ec if file was not found virtual std::istream* load_file(const std::string& file, std::error_code& ec) noexcept; private: std::filesystem::path m_docroot; }; // ----------------------------------------------------------------------- /// \brief actual implementation of a zeep::resource_loader that loads resources from memory /// /// Load the resources from resource data created with mrc (see https://github.com/mhekkel/mrc ) class rsrc_loader : public resource_loader { public: /// \brief constructor /// /// The parameter is not used rsrc_loader(const std::string&); /// \brief return last_write_time of \a file virtual std::filesystem::file_time_type file_time(const std::string& file, std::error_code& ec) noexcept; /// \brief basic loader, returns error in ec if file was not found virtual std::istream* load_file(const std::string& file, std::error_code& ec) noexcept; private: std::filesystem::file_time_type mRsrcWriteTime = {}; }; // -------------------------------------------------------------------- /// \brief base class for template processors /// /// template_processor is used to create XHTML web pages based on the contents of a /// template file and the parameters passed in the request and calculated data stored /// in a scope object. class basic_template_processor { public: basic_template_processor(const std::string& docroot) : m_docroot(docroot) {} virtual ~basic_template_processor() {} /// \brief set the docroot for this processor virtual void set_docroot(const std::filesystem::path& docroot); /// \brief get the current docroot of this processor std::filesystem::path get_docroot() const { return m_docroot; } // -------------------------------------------------------------------- // tag processor support /// \brief process all the tags in this node virtual void process_tags(xml::node* node, const scope& scope); protected: std::map> m_tag_processor_creators; /// \brief process only the tags with the specified namespace prefixes virtual void process_tags(xml::element* node, const scope& scope, std::set registeredNamespaces); public: /// \brief Use to register a new tag_processor and couple it to a namespace template void register_tag_processor(const std::string& ns = TagProcessor::ns()) { m_tag_processor_creators.emplace(ns, [](const std::string& ns) { return new TagProcessor(ns.c_str()); }); } /// \brief Create a tag_processor tag_processor* create_tag_processor(const std::string& ns) const { return m_tag_processor_creators.at(ns)(ns); } // -------------------------------------------------------------------- /// \brief Default handler for serving files out of our doc root virtual void handle_file(const request& request, const scope& scope, reply& reply); public: /// \brief return last_write_time of \a file virtual std::filesystem::file_time_type file_time(const std::string& file, std::error_code& ec) noexcept = 0; /// \brief return error in ec if file was not found virtual std::istream* load_file(const std::string& file, std::error_code& ec) noexcept = 0; public: /// \brief Use load_template to fetch the XHTML template file virtual void load_template(const std::string& file, xml::document& doc); /// \brief Check if the argument \a file contains a valid reference to an XHTML template file and return the path, if any. virtual std::tuple is_template_file(const std::string& file); /// \brief create a reply based on a template virtual void create_reply_from_template(const std::string& file, const scope& scope, reply& reply); /// \brief Initialize the scope object virtual void init_scope(scope& scope); protected: std::string m_ns; std::filesystem::path m_docroot; }; // -------------------------------------------------------------------- /// \brief actual implementation of the abstract basic_template_processor template class html_template_processor : public basic_template_processor { public: html_template_processor(const std::string& docroot = "", bool addDefaultTagProcessors = true) : basic_template_processor(docroot), m_loader(docroot) { if (addDefaultTagProcessors) { register_tag_processor(); register_tag_processor(); } } virtual ~html_template_processor() {} /// return last_write_time of \a file virtual std::filesystem::file_time_type file_time(const std::string& file, std::error_code& ec) noexcept { return m_loader.file_time(file, ec); } // basic loader, returns error in ec if file was not found virtual std::istream* load_file(const std::string& file, std::error_code& ec) noexcept { return m_loader.load_file(file, ec); } protected: Loader m_loader; }; using file_based_html_template_processor = html_template_processor; using rsrc_based_html_template_processor = html_template_processor; /// \brief the actual definition of zeep::template_processor #if WEBAPP_USES_RESOURCES using template_processor = rsrc_based_html_template_processor; #else using template_processor = file_based_html_template_processor; #endif }libzeep-5.1.7/include/zeep/http/uri.hpp0000664000175000017500000000503414176701531017704 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2021 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// A simple uri class. Uses a parser based on simple regular expressions #include #include namespace zeep::http { // -------------------------------------------------------------------- /// \brief the exception thrown by libzeep when an invalid uri is passed to /// the uri constructor. class uri_parse_error : public zeep::exception { public: uri_parse_error() : exception("invalid uri"){}; uri_parse_error(const std::string &u) : exception("invalid uri: " + u){}; }; // -------------------------------------------------------------------- /// \brief Simple class, should be extended to have setters, one day class uri { public: /// \brief constructor that parses the URL in \a s, throws exception if not valid uri(const std::string &s); ~uri(); uri(const uri &u); uri(uri &&u); uri &operator=(const uri &u); uri &operator=(uri &&u); /// \brief Return true if url is empty (not useful I guess, you cannot construct an empty url yet) bool empty() const; /// \brief Return true if the path is absolute, is always false when host is set bool is_absolute() const; /// \brief Return the scheme std::string get_scheme() const; /// \brief Return the host std::string get_host() const; /// \brief Return the path std::filesystem::path get_path() const; /// \brief Return the query std::string get_query() const; /// \brief Return the fragment std::string get_fragment() const; std::string string() const; ///< Return the URI as a string void swap(uri &u) noexcept; friend std::ostream &operator<<(std::ostream &os, const uri &u); private: struct uri_impl *m_impl; }; // -------------------------------------------------------------------- /// \brief Simply check the URI in \a uri, returns true if the uri is valid /// \param uri The URI to check bool is_valid_uri(const std::string& uri); // -------------------------------------------------------------------- /// \brief Decode a URL using the RFC rules /// \param s The URL that needs to be decoded /// \return The decoded URL std::string decode_url(std::string_view s); /// \brief Encode a URL using the RFC rules /// \param s The URL that needs to be encoded /// \return The encoded URL std::string encode_url(std::string_view s); } // namespace zeep::http libzeep-5.1.7/include/zeep/json/0000775000175000017500000000000014176701531016364 5ustar maartenmaartenlibzeep-5.1.7/include/zeep/json/element.hpp0000664000175000017500000005456014176701531020540 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// Code for zeep::json::element, the JSON object in libzeep #include #include #include #include #include #include #include namespace zeep::json { class element { public: using value_type = detail::value_type; using nullptr_type = std::nullptr_t; using object_type = std::map; using array_type = std::vector; using string_type = std::string; using int_type = int64_t; using float_type = double; using boolean_type = bool; using pointer = element*; using const_pointer = const element*; using difference_type = std::ptrdiff_t; using size_type = std::size_t; using initializer_list_t = std::initializer_list; using reference = element&; using const_reference = const element&; template friend class detail::iterator_impl; using iterator = detail::iterator_impl; using const_iterator = detail::iterator_impl; template using iteration_proxy = detail::iteration_proxy; template friend class detail::iteration_proxy_value; template friend struct detail::factory; private: union element_data { object_type* m_object; array_type* m_array; string_type* m_string; int64_t m_int; double m_float; bool m_boolean; element_data() = default; element_data(bool v) noexcept : m_boolean(v) {} element_data(int64_t v) noexcept : m_int(v) {} element_data(double v) noexcept : m_float(v) {} element_data(value_type t) { switch (t) { case value_type::array: m_array = create(); break; case value_type::boolean: m_boolean = false; break; case value_type::null: m_object = nullptr; break; case value_type::number_float: m_float = 0; break; case value_type::number_int: m_int = 0; break; case value_type::object: m_object = create(); break; case value_type::string: m_string = create(); break; } } element_data(const object_type& v) { m_object = create(v); } element_data(object_type&& v) { m_object = create(std::move(v)); } element_data(const string_type& v) { m_string = create(v); } element_data(string_type&& v) { m_string = create(std::move(v)); } element_data(const array_type& v) { m_array = create(v); } element_data(array_type&& v) { m_array = create(std::move(v)); } void destroy(value_type t) noexcept { switch (t) { case value_type::object: { std::allocator alloc; std::allocator_traits::destroy(alloc, m_object); std::allocator_traits::deallocate(alloc, m_object, 1); break; } case value_type::array: { std::allocator alloc; std::allocator_traits::destroy(alloc, m_array); std::allocator_traits::deallocate(alloc, m_array, 1); break; } case value_type::string: { std::allocator alloc; std::allocator_traits::destroy(alloc, m_string); std::allocator_traits::deallocate(alloc, m_string, 1); break; } default: break; } } }; template static T* create(Args&&... args) { // return new T(args...); std::allocator alloc; using AllocatorTraits = std::allocator_traits>; auto deleter = [&](T * object) { AllocatorTraits::deallocate(alloc, object, 1); }; std::unique_ptr object(AllocatorTraits::allocate(alloc, 1), deleter); assert(object != nullptr); AllocatorTraits::construct(alloc, object.get(), std::forward(args)...); return object.release(); } public: /// empty constructor with a certain type element(value_type t); /// default constructor element(std::nullptr_t = nullptr); element(const element& j); element(element&& j); template, int> = 0> element(const ElementRef& r) : element(r.data()) { validate(); } template>, std::enable_if_t and detail::is_compatible_type_v, int> = 0> element(T&& v) noexcept(noexcept(element_serializer::to_element(std::declval(), std::forward(v)))) { element_serializer::to_element(*this, std::forward(v)); } element(initializer_list_t init); element(size_t cnt, const element& v); static element object(); static element array(); static element object(initializer_list_t init); static element array(initializer_list_t init); element& operator=(element j) noexcept( std::is_nothrow_move_constructible_v and std::is_nothrow_move_assignable_v and std::is_nothrow_move_constructible_v and std::is_nothrow_move_assignable_v); ~element() noexcept; constexpr bool is_null() const noexcept { return m_type == value_type::null; } constexpr bool is_object() const noexcept { return m_type == value_type::object; } constexpr bool is_array() const noexcept { return m_type == value_type::array; } constexpr bool is_string() const noexcept { return m_type == value_type::string; } constexpr bool is_number() const noexcept { return is_number_int() or is_number_float(); } constexpr bool is_number_int() const noexcept { return m_type == value_type::number_int; } constexpr bool is_number_float() const noexcept { return m_type == value_type::number_float; } constexpr bool is_true() const noexcept { return is_boolean() and m_data.m_boolean == true; } constexpr bool is_false() const noexcept { return is_boolean() and m_data.m_boolean == false; } constexpr bool is_boolean() const noexcept { return m_type == value_type::boolean; } constexpr value_type type() const { return m_type; } std::string type_name() const; explicit operator bool() const noexcept; // access to object elements reference at(const typename object_type::key_type& key); const_reference at(const typename object_type::key_type& key) const; reference operator[](const typename object_type::key_type& key); const_reference operator[](const typename object_type::key_type& key) const; // access to array elements reference at(size_t index); const_reference at(size_t index) const; reference operator[](size_t index); const_reference operator[](size_t index) const; iterator begin() noexcept { return iterator(this); } iterator end() noexcept { return iterator(this, -1); } const_iterator begin() const noexcept { return cbegin(); } const_iterator end() const noexcept { return cend(); } const_iterator cbegin() const noexcept { return const_iterator(this); } const_iterator cend() const noexcept { return const_iterator(this, -1); } reference front() { return *begin(); } const_reference front() const { return *cbegin(); } reference back() { auto tmp = end(); --tmp; return *tmp; } const_reference back() const { auto tmp = cend(); --tmp; return *tmp; } private: template iterator insert_iterator(const_iterator pos, Args... args) { iterator result(this); auto insert_pos = std::distance(m_data.m_array->begin(), pos.m_it.m_array_it); m_data.m_array->insert(m_data.m_array->begin() + insert_pos, std::forward(args)...); result.m_it.m_array_it = m_data.m_array->begin() + insert_pos; return result; } public: void clear() noexcept; iterator insert(const_iterator pos, const element& val); iterator insert(const_iterator pos, element&& val) { return insert(pos, val); } iterator insert(const_iterator pos, size_type cnt, const element& val); iterator insert(const_iterator pos, const_iterator first, const_iterator last); iterator insert(const_iterator pos, initializer_list_t lst); void insert(const_iterator first, const_iterator last); void push_back(element&& val); void push_back(const element& val); template std::pair emplace(Args&&... args) { if (is_null()) { m_type = value_type::object; m_data = value_type::object; } else if (not is_object()) throw std::runtime_error("Cannot emplace with json value of type " + type_name()); validate(); auto r = m_data.m_object->emplace(std::forward(args)...); auto i = begin(); i.m_it.m_object_it = r.first; return { i, r.second }; } template void emplace_back(Args&&... args) { if (not (is_null() or is_array())) throw std::runtime_error("Cannot use emplace_back with " + type_name()); if (is_null()) { m_type = value_type::array; m_data = value_type::array; } m_data.m_array->emplace_back(std::forward(args)...); } template or std::is_same_v, int> = 0> Iterator erase(Iterator pos) { if (pos.m_obj != this) throw std::runtime_error("Invalid iterator"); auto result = end(); switch (m_type) { case value_type::array: result.m_it.m_array_it = m_data.m_array->erase(pos.m_it.m_array_it); break; case value_type::object: result.m_it.m_object_it = m_data.m_object->erase(pos.m_it.m_object_it); break; case value_type::null: throw std::runtime_error("Cannot erase in null values"); default: if (pos.m_it.m_p != 0) throw std::runtime_error("Iterator out of range"); if (m_type == value_type::string) { std::allocator alloc; std::allocator_traits::destroy(alloc, m_data.m_string); std::allocator_traits::deallocate(alloc, m_data.m_string, 1); m_data.m_string = nullptr; } m_type = value_type::null; break; } return result; } template or std::is_same_v, int> = 0> Iterator erase(Iterator first, Iterator last) { if (first.m_obj != this or last.m_obj != this) throw std::runtime_error("Invalid iterator"); auto result = end(); switch (m_type) { case value_type::array: result.m_it.m_array_it = m_data.m_array->erase(first.m_it.m_array_it, last.m_it.m_array_it); break; case value_type::object: result.m_it.m_object_it = m_data.m_object->erase(first.m_it.m_object_it, last.m_it.m_object_it); break; case value_type::null: throw std::runtime_error("Cannot erase in null values"); default: if (first.m_it.m_p != 0 or last.m_it.m_p != 0) throw std::runtime_error("Iterator out of range"); if (m_type == value_type::string) { std::allocator alloc; std::allocator_traits::destroy(alloc, m_data.m_string); std::allocator_traits::deallocate(alloc, m_data.m_string, 1); m_data.m_string = nullptr; } m_type = value_type::null; break; } return result; } size_type erase(const typename object_type::key_type& key) { if (is_object()) return m_data.m_object->erase(key); throw std::runtime_error("Cannot use erase() with " + type_name()); } void erase(const size_type index) { if (is_array()) { if (index >= size()) throw std::runtime_error("Index out of range"); m_data.m_array->erase(m_data.m_array->begin() + static_cast(index)); } else throw std::runtime_error("Cannot use erase() with " + type_name()); } void swap(reference other) noexcept ( std::is_nothrow_move_constructible_v and std::is_nothrow_move_assignable_v and std::is_nothrow_move_constructible_v and std::is_nothrow_move_assignable_v ) { std::swap(m_type, other.m_type); std::swap(m_data, other.m_data); validate(); } template const_iterator find(T&& key) const { auto result = cend(); if (is_object()) result.m_it.m_object_it = m_data.m_object->find(std::forward(key)); else if (is_array()) result.m_it.m_array_it = std::find(m_data.m_array->begin(), m_data.m_array->end(), std::forward(key)); return result; } bool contains(element test) const; // TODO: no reverse iterators yet iteration_proxy items() noexcept { return iteration_proxy(*this); } iteration_proxy items() const noexcept { return iteration_proxy(*this); } bool empty() const; size_t size() const; size_t max_size() const noexcept; friend bool operator==(const_reference& lhs, const_reference& rhs); template, int> = 0> friend bool operator==(const_reference& lhs, const T& rhs) { return lhs == element(rhs); } template, int> = 0> friend bool operator==(const T& lhs, const_reference& rhs) { return element(lhs) == rhs; } friend bool operator!=(const_reference& lhs, const_reference& rhs); template, int> = 0> friend bool operator!=(const_reference& lhs, const T& rhs) { return lhs != element(rhs); } template, int> = 0> friend bool operator!=(const T& rhs, const_reference& lhs) { return element(lhs) == rhs; } friend bool operator<(const_reference& lhs, const_reference& rhs); template, int> = 0> friend bool operator<(const_reference& lhs, const T& rhs) { return lhs < element(rhs); } template, int> = 0> friend bool operator<(const T& lhs, const_reference& rhs) { return element(lhs) < rhs; } friend bool operator<=(const_reference& lhs, const_reference& rhs) { return not (rhs < lhs); } template, int> = 0> friend bool operator<=(const_reference& lhs, const T& rhs) { return lhs <= element(rhs); } template, int> = 0> friend bool operator<=(const T& lhs, const_reference& rhs) { return element(lhs) <= rhs; } friend bool operator>(const_reference& lhs, const_reference& rhs) { return not (lhs <= rhs); } template, int> = 0> friend bool operator>(const_reference& lhs, const T& rhs) { return lhs > element(rhs); } template, int> = 0> friend bool operator>(const T& lhs, const_reference& rhs) { return element(lhs) > rhs; } friend bool operator>=(const_reference& lhs, const_reference& rhs) { return not (lhs < rhs); } template, int> = 0> friend bool operator>=(const_reference& lhs, const T& rhs) { return lhs >= element(rhs); } template, int> = 0> friend bool operator>=(const T& lhs, const_reference& rhs) { return element(lhs) >= rhs; } // arithmetic operators element& operator-(); friend element operator+(const_reference& lhs, const_reference& rhs); template, int> = 0> friend element operator+(const_reference& lhs, const T& rhs) { return lhs + element(rhs); } template, int> = 0> friend element operator+(const T& lhs, const_reference& rhs) { return element(lhs) + rhs; } friend element operator-(const_reference& lhs, const_reference& rhs); template, int> = 0> friend element operator-(const_reference& lhs, const T& rhs) { return lhs - element(rhs); } template, int> = 0> friend element operator-(const T& lhs, const_reference& rhs) { return element(lhs) - rhs; } friend element operator*(const_reference& lhs, const_reference& rhs); template, int> = 0> friend element operator*(const_reference& lhs, const T& rhs) { return lhs * element(rhs); } template, int> = 0> friend element operator*(const T& lhs, const_reference& rhs) { return element(lhs) * rhs; } friend element operator/(const_reference& lhs, const_reference& rhs); template, int> = 0> friend element operator/(const_reference& lhs, const T& rhs) { return lhs / element(rhs); } template, int> = 0> friend element operator/(const T& lhs, const_reference& rhs) { return element(lhs) / rhs; } friend element operator%(const_reference& lhs, const_reference& rhs); template, int> = 0> friend element operator%(const_reference& lhs, const T& rhs) { return lhs % element(rhs); } template, int> = 0> friend element operator%(const T& lhs, const_reference& rhs) { return element(lhs) % rhs; } private: // get_impl_ptr object_type* get_impl_ptr(object_type*) noexcept { return is_object() ? m_data.m_object : nullptr; } constexpr const object_type* get_impl_ptr(const object_type*) const noexcept { return is_object() ? m_data.m_object : nullptr; } array_type* get_impl_ptr(array_type*) noexcept { return is_array() ? m_data.m_array : nullptr; } constexpr const array_type* get_impl_ptr(const array_type*) const noexcept { return is_array() ? m_data.m_array : nullptr; } string_type* get_impl_ptr(string_type*) noexcept { return is_string() ? m_data.m_string : nullptr; } constexpr const string_type* get_impl_ptr(const string_type*) const noexcept { return is_string() ? m_data.m_string : nullptr; } int_type* get_impl_ptr(int_type*) noexcept { return is_number_int() ? &m_data.m_int : nullptr; } constexpr const int_type* get_impl_ptr(const int_type*) const noexcept { return is_number_int() ? &m_data.m_int : nullptr; } float_type* get_impl_ptr(float_type*) noexcept { return is_number_float() ? &m_data.m_float : nullptr; } constexpr const float_type* get_impl_ptr(const float_type*) const noexcept { return is_number_float() ? &m_data.m_float : nullptr; } boolean_type* get_impl_ptr(boolean_type*) noexcept { return is_boolean() ? &m_data.m_boolean : nullptr; } constexpr const boolean_type* get_impl_ptr(const boolean_type*) const noexcept { return is_boolean() ? &m_data.m_boolean : nullptr; } public: // access to data // these return a pointer to the internal storage template, int> = 0> auto get_ptr() noexcept -> decltype(std::declval().get_impl_ptr(std::declval

())) { return get_impl_ptr(static_cast

(nullptr)); } template and std::is_const_v>, int> = 0> constexpr auto get_ptr() const noexcept -> decltype(std::declval().get_impl_ptr(std::declval

())) { return get_impl_ptr(static_cast

(nullptr)); } template>, std::enable_if_t, int> = 0> T as() const noexcept(noexcept(element_serializer::from_element(std::declval(), std::declval()))) { static_assert(std::is_default_constructible_v, "Type must be default constructible to use with get()"); U ret = {}; if (not is_null()) element_serializer::from_element(*this, ret); return ret; } friend std::ostream& operator<<(std::ostream& os, const element& v); friend void serialize(std::ostream& os, const element& data); // friend void serialize(std::ostream& os, const element& data, int indent, int level = 0); private: void validate() const { assert(m_type != value_type::object or m_data.m_object != nullptr); assert(m_type != value_type::array or m_data.m_array != nullptr); assert(m_type != value_type::string or m_data.m_string != nullptr); } public: value_type m_type = value_type::null; element_data m_data = {}; }; template<> std::string element::as() const; template<> bool element::as() const; namespace detail { class element_reference { public: element_reference(element&& value) : m_owned(std::move(value)), m_reference(&m_owned), m_rvalue(true) {} element_reference(const element& value) : m_reference(const_cast(&value)), m_rvalue(false) {} element_reference(std::initializer_list init) : m_owned(init), m_reference(&m_owned), m_rvalue(true) {} template ::value, int> = 0> element_reference(Args&& ... args) : m_owned(std::forward(args)...), m_reference(&m_owned), m_rvalue(true) {} element_reference(element_reference&&) = default; element_reference(const element_reference&) = delete; element_reference& operator=(const element_reference&) = delete; element_reference& operator=(element_reference&&) = delete; ~element_reference() = default; element data() const { if (m_rvalue) return std::move(*m_reference); return *m_reference; } element const& operator*() const { return *static_cast(m_reference); } element const* operator->() const { return static_cast(m_reference); } private: element m_owned; element* m_reference = nullptr; bool m_rvalue; }; } // detail // working around a nuisance in g++ < 9: default for parameter init = {} is not accepted inline element element::object() { return element::object({}); } inline element element::array() { return element::array({}); } } // zeep::json libzeep-5.1.7/include/zeep/json/element_fwd.hpp0000664000175000017500000000203514176701531021366 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// forward declarations required for zeep::json::element, the JSON object in libzeep #include #include namespace zeep::json { class element; namespace detail { enum class value_type : std::uint8_t { null, object, array, string, number_int, number_float, boolean }; inline bool operator<(value_type lhs, value_type rhs) noexcept { static constexpr std::array order = { 0, // null 3, // object 4, // array 5, // string 2, // number_int 2, // number_float 1 // boolean }; const auto lix = static_cast(lhs); const auto rix = static_cast(rhs); return lix < order.size() and rix < order.size() and order[lix] < order[rix]; } class element_reference; } template struct element_serializer; }libzeep-5.1.7/include/zeep/json/factory.hpp0000664000175000017500000000766514176701531020562 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// factory classes for constructing zeep::json::element objects #include #include #include #include #include namespace zeep::json::detail { // Factory class to construct elements template struct factory {}; template<> struct factory { template static void construct(J& j, bool b) { j.m_type = value_type::boolean; j.m_data = b; j.validate(); } }; template<> struct factory { template static void construct(J& j, const std::string& s) { j.m_type = value_type::string; j.m_data = s; j.validate(); } template static void construct(J& j, std::string&& s) { j.m_type = value_type::string; j.m_data = std::move(s); j.validate(); } template static void construct(J& j, const std::wstring& s) { j.m_type = value_type::string; std::wstring_convert> myconv; j.m_data = myconv.to_bytes(s); j.validate(); } template static void construct(J& j, std::wstring&& s) { j.m_type = value_type::string; std::wstring_convert> myconv; j.m_data = myconv.to_bytes(s); j.validate(); } }; template<> struct factory { template static void construct(J& j, double d) { j.m_type = value_type::number_float; j.m_data = d; j.validate(); } }; template<> struct factory { template static void construct(J& j, int64_t i) { j.m_type = value_type::number_int; j.m_data = i; j.validate(); } }; template<> struct factory { template static void construct(J& j, const typename J::array_type& arr) { j.m_type = value_type::array; j.m_data = arr; j.validate(); } template static void construct(J& j, typename J::array_type&& arr) { j.m_type = value_type::array; j.m_data = std::move(arr); j.validate(); } template static void construct(J& j, const std::vector& arr) { j.m_type = value_type::array; j.m_data = value_type::array; j.m_data.m_array->reserve(arr.size()); std::copy(arr.begin(), arr.end(), std::back_inserter(*j.m_data.m_array)); j.validate(); } template, int> = 0> static void construct(J& j, const std::vector& arr) { j.m_type = value_type::array; j.m_data = value_type::array; j.m_data.m_array->resize(arr.size()); std::copy(arr.begin(), arr.end(), j.m_data.m_array->begin()); j.validate(); } template, int> = 0> static void construct(J& j, const T(&arr)[N]) { j.m_type = value_type::array; j.m_data = value_type::array; j.m_data.m_array->resize(N); std::copy(arr, arr + N, j.m_data.m_array->begin()); j.validate(); } }; template<> struct factory { template static void construct(J& j, const typename J::object_type& obj) { j.m_type = value_type::object; j.m_data = obj; j.validate(); } template static void construct(J& j, typename J::object_type&& obj) { j.m_type = value_type::object; j.m_data = std::move(obj); j.validate(); } template, int> = 0> static void construct(J& j, const M& obj) { using std::begin; using std::end; j.m_type = value_type::object; j.m_data.m_object = j.template create(begin(obj), end(obj)); j.validate(); } }; } libzeep-5.1.7/include/zeep/json/from_element.hpp0000664000175000017500000001274014176701531021555 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// various implementations of the from_element function that return the data contained in a zeep::json::element (JSON) object #include #include namespace zeep::json::detail { template void from_element(const E& e, std::nullptr_t& n) { if (not e.is_null()) throw std::runtime_error("Type should have been null but was " + e.type_name()); n = nullptr; } template and not std::is_same_v, int> = 0> void get_number(const E& e, T& v) { switch (e.type()) { case value_type::number_int: v = static_cast(*e.template get_ptr()); break; case value_type::number_float: v = static_cast(*e.template get_ptr()); break; default: throw std::runtime_error("Type should have been number but was " + e.type_name()); break; } } template void from_element(const E& e, typename E::boolean_type& b) { if (not e.is_boolean()) throw std::runtime_error("Type should have been boolean but was" + e.type_name()); b = *e.template get_ptr(); } // template // void from_element(const E& e, typename E::string_type& s) // { // if (not e.is_string()) // throw std::runtime_error("Type should have been string but was " + e.type_name()); // s = *e.template get_ptr(); // } template void from_element(const E& e, std::string& s) { if (not e.is_string()) throw std::runtime_error("Type should have been string but was " + e.type_name()); s = *e.template get_ptr(); } template void from_element(const E& e, typename E::int_type& i) { get_number(e, i); } template void from_element(const E& e, typename E::float_type& f) { get_number(e, f); } template and not std::is_same_v and not std::is_same_v and not std::is_same_v, int> = 0> void from_element(const E& e, A& v) { switch (e.type()) { case value_type::boolean: v = static_cast(*e.template get_ptr()); break; case value_type::number_int: v = static_cast(*e.template get_ptr()); break; case value_type::number_float: v = static_cast(*e.template get_ptr()); break; default: throw std::runtime_error("Type should have been number but was " + e.type_name()); break; } } template, int> = 0> void from_element(const E& e, Enum &en) { if (value_serializer::empty()) { typename std::underlying_type_t v; get_number(e, v); en = static_cast(v); } else { if (not e.is_string()) throw std::runtime_error("Type should have been string but was " + e.type_name()); auto s = e.template get_ptr(); en = value_serializer::from_string(*s); } } // arrays // nice trick to enforce order in template selection template struct priority_tag : priority_tag < N - 1 > {}; template<> struct priority_tag<0> {}; template void from_element_array_impl(const E& e, typename E::array_type& arr, priority_tag<3>) { arr = *e.template get_ptr(); } template auto from_element_array_impl(const E& e, std::array& arr, priority_tag<2>) -> decltype(e.template as(), void()) { for (size_t i = 0; i < N; ++i) arr[i] = e.at(i).template as(); } template auto from_element_array_impl(const E& e, A& arr, priority_tag<1>) -> decltype( arr.reserve(std::declval()), e.template as(), void() ) { arr.reserve(e.size()); std::transform(e.begin(), e.end(), std::inserter(arr, std::end(arr)), [](const E& i) { return i.template as(); }); } template void from_element_array_impl(const E& e, A& arr, priority_tag<0>) { std::transform(e.begin(), e.end(), std::inserter(arr, std::end(arr)), [](const E& i) { return i.template as(); }); } template, int> = 0> void from_element(const E& e, A& arr) { if (not e.is_array()) throw std::runtime_error("Type should have been array but was " + e.type_name()); from_element_array_impl(e, arr, priority_tag<3>{}); } struct from_element_fn { template auto operator()(const element& j, T& val) const noexcept(noexcept(from_element(j, val))) -> decltype(from_element(j, val), void()) { return from_element(j, val); } }; namespace { constexpr const auto& from_element = typename ::zeep::json::detail::from_element_fn{}; } } libzeep-5.1.7/include/zeep/json/iterator.hpp0000664000175000017500000002445514176701531020740 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// generic iterator classes used by zeep::json::element #include namespace zeep::json::detail { template class iteration_proxy; template class iteration_proxy_value; // First a base for the iterator, both iterator and const iterator use this. template class iterator_impl { public: friend iterator_impl, typename std::remove_const_t, const E>>; friend E; friend iteration_proxy; friend iteration_proxy_value; using iterator_category = std::bidirectional_iterator_tag; using value_type = typename E::value_type; using difference_type = typename E::difference_type; using pointer = typename std::conditional_t, typename E::const_pointer, typename E::pointer>; using reference = typename std::conditional_t, typename E::const_reference, typename E::reference>; using object_type = typename E::object_type; using array_type = typename E::array_type; static_assert(is_element_v>, "The iterator_impl template only accepts element classes"); public: iterator_impl() = default; ~iterator_impl() {} explicit iterator_impl(pointer obj) noexcept : m_obj(obj) { assert(m_obj); switch (m_obj->m_type) { case value_type::array: m_it.m_array_it = m_obj->m_data.m_array->begin(); break; case value_type::object: m_it.m_object_it = m_obj->m_data.m_object->begin(); break; default: m_it.m_p = 0; break; } } iterator_impl(pointer obj, int) noexcept : m_obj(obj) { assert(m_obj); switch (m_obj->m_type) { case value_type::array: m_it.m_array_it = m_obj->m_data.m_array->end(); break; case value_type::object: m_it.m_object_it = m_obj->m_data.m_object->end(); break; case value_type::null: m_it.m_p = 0; break; default: m_it.m_p = 1; break; } } iterator_impl(const iterator_impl &i) : m_obj(i.m_obj) , m_it(i.m_it) { } iterator_impl operator--(int) { auto result(*this); operator--(); return result; } iterator_impl &operator--() { assert(m_obj); switch (m_obj->m_type) { case value_type::array: std::advance(m_it.m_array_it, -1); break; case value_type::object: std::advance(m_it.m_object_it, -1); break; default: --m_it.m_p; break; } return *this; } iterator_impl operator++(int) { auto result(*this); operator++(); return result; } iterator_impl &operator++() { assert(m_obj); switch (m_obj->m_type) { case value_type::array: std::advance(m_it.m_array_it, +1); break; case value_type::object: std::advance(m_it.m_object_it, +1); break; default: ++m_it.m_p; break; } return *this; } reference operator*() const { assert(m_obj); switch (m_obj->m_type) { case value_type::array: assert(m_it.m_array_it != m_obj->m_data.m_array->end()); return *m_it.m_array_it; break; case value_type::object: assert(m_it.m_object_it != m_obj->m_data.m_object->end()); return m_it.m_object_it->second; break; case value_type::null: throw std::runtime_error("Cannot get value"); default: if (m_it.m_p == 0) return *m_obj; throw std::runtime_error("Cannot get value"); } } pointer operator->() const { assert(m_obj); switch (m_obj->m_type) { case value_type::array: assert(m_it.m_array_it != m_obj->m_data.m_array->end()); return &(*m_it.m_array_it); break; case value_type::object: assert(m_it.m_object_it != m_obj->m_data.m_object->end()); return &(m_it.m_object_it->second); break; case value_type::null: throw std::runtime_error("Cannot get value"); default: if (m_it.m_p == 0) return m_obj; throw std::runtime_error("Cannot get value"); } } bool operator==(const iterator_impl &other) const { if (m_obj != other.m_obj) throw std::runtime_error("Containers are not the same"); assert(m_obj); switch (m_obj->m_type) { case value_type::array: return m_it.m_array_it == other.m_it.m_array_it; case value_type::object: return m_it.m_object_it == other.m_it.m_object_it; default: return m_it.m_p == other.m_it.m_p; } } bool operator!=(const iterator_impl &other) const { return not operator==(other); } bool operator<(const iterator_impl &other) const { if (m_obj != other.m_obj) throw std::runtime_error("Containers are not the same"); assert(m_obj); switch (m_obj->m_type) { case value_type::array: return m_it.m_array_it < other.m_it.m_array_it; case value_type::object: throw std::runtime_error("Cannot compare order of object iterators"); default: return m_it.m_p < other.m_it.m_p; } } bool operator<=(const iterator_impl &other) const { return not other.operator<(*this); } bool operator>(const iterator_impl &other) const { return not operator<=(other); } bool operator>=(const iterator_impl &other) const { return not operator<(other); } iterator_impl &operator+=(difference_type i) { assert(m_obj); switch (m_obj->m_type) { case value_type::array: std::advance(m_it.m_array_it, i); case value_type::object: throw std::runtime_error("Cannot use offsets with object iterators"); default: m_it.m_p += i; } return *this; } iterator_impl &operator-=(difference_type i) { operator+=(-i); return *this; } iterator_impl operator+(difference_type i) const { auto result = *this; result += i; return result; } friend iterator_impl operator+(difference_type i, const iterator_impl &iter) { auto result = iter; result += i; return result; } iterator_impl operator-(difference_type i) const { auto result = *this; result -= i; return result; } friend iterator_impl operator-(difference_type i, const iterator_impl &iter) { auto result = iter; result -= i; return result; } difference_type operator-(const iterator_impl &other) const { assert(m_obj); switch (m_obj->m_type) { case value_type::array: return m_it.m_array_it - other.m_it.m_array_it; case value_type::object: throw std::runtime_error("Cannot use offsets with object iterators"); default: return m_it.m_p - other.m_it.m_p; } } reference operator[](difference_type i) const { assert(m_obj); switch (m_obj->m_type) { case value_type::array: *std::next(m_it.m_array_it, i); case value_type::object: throw std::runtime_error("Cannot use offsets with object iterators"); default: if (m_it.m_p == -i) return *m_obj; throw std::runtime_error("Cannot get value"); } } const typename object_type::key_type &key() const { assert(m_obj); if (not m_obj->is_object()) throw std::runtime_error("Can only use key() on object iterators"); return m_it.m_object_it->first; } reference value() const { return operator*(); } private: pointer m_obj = nullptr; // Ahw... MSVC does not allow a union here... // union struct { typename E::array_type::iterator m_array_it; typename E::object_type::iterator m_object_it; difference_type m_p; } m_it = {}; }; // iterator_proxy_value is used for range based for loops, so you can still get key/value template class iteration_proxy_value { public: using difference_type = std::ptrdiff_t; using value_type = iteration_proxy_value; using pointer = value_type *; using reference = value_type &; using iterator_category = std::input_iterator_tag; public: explicit iteration_proxy_value(Iterator iter) noexcept : m_anchor(iter) { } iteration_proxy_value &operator*() { return *this; } iteration_proxy_value &operator++() { ++m_anchor; ++m_index; return *this; } bool operator==(const iteration_proxy_value &other) const { return m_anchor == other.m_anchor; } bool operator!=(const iteration_proxy_value &other) const { return m_anchor != other.m_anchor; } const std::string &key() const { assert(m_anchor.m_obj != nullptr); switch (m_anchor.m_obj->m_type) { case ::zeep::json::detail::value_type::array: if (m_index != m_index_last) { m_index_str = std::to_string(m_index); m_index_last = m_index; } return m_index_str; break; case ::zeep::json::detail::value_type::object: return m_anchor.key(); default: return k_empty; } } typename Iterator::reference value() const { return m_anchor.value(); } // support for structured binding template decltype(auto) get() const { if constexpr (N == 0) return key(); else if constexpr (N == 1) return value(); } private: Iterator m_anchor; size_t m_index = 0; mutable size_t m_index_last = 0; mutable std::string m_index_str = "0"; const std::string k_empty; }; template class iteration_proxy { private: typename Iterator::reference m_container; public: explicit iteration_proxy(typename Iterator::reference cont) noexcept : m_container(cont) { } iteration_proxy_value begin() noexcept { return iteration_proxy_value(m_container.begin()); } iteration_proxy_value end() noexcept { return iteration_proxy_value(m_container.end()); } }; } // namespace zeep::json::detail namespace std { template struct tuple_size<::zeep::json::detail::iteration_proxy_value> : public std::integral_constant { }; template struct tuple_element<0, ::zeep::json::detail::iteration_proxy_value> { using proxy_type = typename ::zeep::json::detail::iteration_proxy_value; using type = decltype(std::declval().key()); }; template struct tuple_element<1, ::zeep::json::detail::iteration_proxy_value> { using proxy_type = typename ::zeep::json::detail::iteration_proxy_value; using type = decltype(std::declval().value()); }; // template // struct tuple_element> // { // public: // using proxy_type = typename ::zeep::json::detail::iteration_proxy_value; // using type = decltype(std::declval().get()); // }; } // namespace stdlibzeep-5.1.7/include/zeep/json/parser.hpp0000664000175000017500000000132714176701531020374 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // expression language support // #pragma once /// \file /// The definition of the JSON parser in libzeep #include #include namespace zeep::json { void parse_json(const std::string& json, json::element& object); void parse_json(std::istream& is, json::element& object); namespace literals { zeep::json::element operator""_json(const char* s, size_t len); } } // namespace zeep::json libzeep-5.1.7/include/zeep/json/serializer.hpp0000664000175000017500000001726714176701531021263 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the serializer classes that help serialize data into and out of zeep::json::element (JSON) objects #include #include #include namespace zeep::json { template struct serializer { using element_type = E; template struct serializer_impl {}; template struct serializer_impl and is_type_with_value_serializer_v>> { using value_serializer = zeep::value_serializer; static void serialize(const T& data, element_type& e) { e = value_serializer::to_string(data); } }; template struct serializer_impl>> { static void serialize(const T& data, element_type& e) { serializer sr; const_cast(data).serialize(sr, 0); e.swap(sr.m_elem); } }; template struct serializer_impl and not is_serializable_array_type_v and not json::detail::is_serializable_map_type_v>> { static void serialize(const T& data, element_type& e) { e = data; } }; template struct serializer_impl>> { static void serialize(const T& data, element_type& e) { using value_serializer_impl = serializer_impl; e = element_type::value_type::array; for (auto& i: data) { element_type ei; value_serializer_impl::serialize(i, ei); e.push_back(ei); } } }; template struct serializer_impl>> { static void serialize(const T& data, element_type& e) { using value_serializer_impl = serializer_impl; e = element_type::value_type::object; for (auto& i: data) { element_type ei; value_serializer_impl::serialize(i.second, ei); e.emplace(i.first, ei); } } }; template struct serializer_impl>> { static void serialize(const T& data, element_type& e) { using value_serializer_impl = serializer_impl; if (data) value_serializer_impl::serialize(*data, e); else e = {}; } }; serializer() {} template serializer& operator&(name_value_pair&& nvp) { serialize(nvp.name(), nvp.value()); return *this; } template void serialize(const char* name, const T& data) { using value_serializer_impl = serializer_impl; element_type e; value_serializer_impl::serialize(data, e); m_elem.emplace(std::make_pair(name, e)); } template static void serialize(E& e, const T& v) { using value_serializer_impl = serializer_impl; value_serializer_impl::serialize(v, e); } element_type m_elem; }; template struct deserializer { using element_type = E; template struct deserializer_impl {}; template struct deserializer_impl and is_type_with_value_serializer_v>> { using value_serializer = zeep::value_serializer; static void deserialize(T& data, const element_type& e) { data = value_serializer::from_string(e.template as()); } }; template struct deserializer_impl>> { static void deserialize(T& data, const element_type& e) { deserializer sr(e); data.serialize(sr, 0); } }; template struct deserializer_impl and not is_serializable_array_type_v and not detail::is_serializable_map_type_v>> { static void deserialize(T& data, const element_type& e) { data = e.template as(); } }; template struct deserializer_impl>> { static void deserialize(T& data, const element_type& e) { using value_deserializer_impl = deserializer_impl; data.clear(); for (auto& i: e) { typename T::value_type v; value_deserializer_impl::deserialize(v, i); data.push_back(v); } } }; template struct deserializer_impl>> { static void deserialize(T& data, const element_type& e) { using value_deserializer_impl = deserializer_impl; data.clear(); for (auto& i: e.items()) { typename T::mapped_type v; value_deserializer_impl::deserialize(v, i.value()); data[i.key()] = v; } } }; template struct deserializer_impl>> { static void deserialize(T& data, element_type& e) { using value_deserializer_impl = deserializer_impl; typename T::value_type v; value_deserializer_impl::deserialize(v, e); data.emplace(std::move(v)); } }; deserializer(const element_type& elem) : m_elem(elem) {} template deserializer& operator&(name_value_pair nvp) { deserialize(nvp.name(), nvp.value()); return *this; } template void deserialize(const char* name, T& data) { if (not m_elem.is_object() or m_elem.empty()) return; using value_deserializer_impl = deserializer_impl; auto value = m_elem[name]; if (value.is_null()) return; value_deserializer_impl::deserialize(data, value); } template static void deserialize(const E& e, T& v) { using value_deserializer_impl = deserializer_impl; value_deserializer_impl::deserialize(v, e); } const element_type& m_elem; }; template void to_element(J& e, T& v) { serializer::serialize(e, v); } template void from_element(const J& e, T& v) { deserializer>::deserialize(e, v); } namespace detail { struct to_element_fn { template auto operator()(element& j, T&& val) const noexcept(noexcept(to_element(j, std::forward(val)))) -> decltype(to_element(j, std::forward(val)), void()) { return to_element(j, std::forward(val)); } }; namespace { constexpr const auto& to_element = typename ::zeep::json::detail::to_element_fn{}; } } template struct element_serializer { template static auto to_element(element& j, T&& v) noexcept(noexcept(::zeep::json::detail::to_element(j, std::forward(v)))) -> decltype(::zeep::json::detail::to_element(j, std::forward(v))) { ::zeep::json::detail::to_element(j, std::forward(v)); } template static auto from_element(const element& j, T& v) noexcept(noexcept(::zeep::json::detail::from_element(j, v))) -> decltype(::zeep::json::detail::from_element(j, v)) { ::zeep::json::detail::from_element(j, v); } }; // template // struct element_serializer>> // { // static void to_element(element& j, T v) // { // j = zeep::value_serializer::instance().to_string(v); // } // template // static void from_element(const J& j, T& v) // { // v = zeep::value_serializer::instance().from_string(j.template as()); // } // }; } libzeep-5.1.7/include/zeep/json/to_element.hpp0000664000175000017500000000741214176701531021234 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// various implementations of the to_element function that intializes a zeep::json::element object with some value #include #include #include namespace zeep::json::detail { template, int> = 0> void to_element(element& v, T b) { factory::construct(v, b); } template, int> = 0> void to_element(J& j, const T(&arr)[N]) { factory::construct(j, std::move(arr)); } template, int> = 0> void to_element(E& v, const T& s) { factory::construct(v, s); } template inline void to_element(E& v, const std::string& s) { factory::construct(v, s); } template inline void to_element(E& v, const std::wstring& s) { factory::construct(v, s); } template void to_element(E& v, std::string&& s) { factory::construct(v, std::move(s)); } template void to_element(E& v, std::wstring&& s) { factory::construct(v, std::move(s)); } template, int> = 0> void to_element(element& v, T f) { factory::construct(v, f); } template and not std::is_same_v, int> = 0> void to_element(element& v, T i) { factory::construct(v, i); } template, int> = 0> void to_element(element& v, T e) { if (value_serializer::empty()) { using int_type = typename std::underlying_type_t; factory::construct(v, static_cast(e)); } else factory::construct(v, value_serializer::to_string(e)); } template, int> = 0> void to_element(element& j, const std::vector& v) { factory::construct(j, v); } template and not is_compatible_object_type_v and not is_compatible_string_type_v and not is_element_v, int> = 0> void to_element(element& j, const T& arr) { factory::construct(j, arr); } template, int> = 0> void to_element(element& j, const std::valarray& arr) { factory::construct(j, std::move(arr)); } template void to_element(element& j, const typename J::array_type& arr) { factory::construct(j, std::move(arr)); } template, int> = 0> void to_element(J& j, const T(&arr)[N]) { factory::construct(j, std::move(arr)); } template, int> = 0> void to_element(element& j, const T& obj) { factory::construct(j, std::move(obj)); } template void to_element(J& j, const J& obj) { factory::construct(j, std::move(obj)); } template>> void to_element(element& j, const std::optional& v) { if (v) to_element(j, *v); } } // zeep::json::detail libzeep-5.1.7/include/zeep/json/type_traits.hpp0000664000175000017500000002010014176701531021435 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// various templated classes that help selecting the right conversion routines when (de-)serializing zeep::json::element (JSON) objects #include #include #include #include namespace zeep::json::detail { template struct is_element : std::false_type {}; template<> struct is_element : std::true_type {}; template inline constexpr bool is_element_v = is_element::value; template using mapped_type_t = typename T::mapped_type; template using key_type_t = typename T::key_type; template using value_type_t = typename T::value_type; template using iterator_t = typename T::iterator; template using iterator_category_t = typename T::iterator_category; template using difference_type_t = typename T::difference_type; template using reference_t = typename T::reference; template using pointer_t = typename T::pointer; template struct is_iterator_traits : std::false_type {}; template struct is_iterator_traits> { private: using traits = std::iterator_traits; public: static constexpr auto value = std::experimental::is_detected_v and std::experimental::is_detected_v and std::experimental::is_detected_v and std::experimental::is_detected_v and std::experimental::is_detected_v; }; template inline constexpr bool is_iterator_traits_v = is_iterator_traits::value; template using to_element_function = decltype(T::to_element(std::declval()...)); template using from_element_function = decltype(T::from_element(std::declval()...)); template struct has_to_element : std::false_type {}; template struct has_to_element>> { using serializer = element_serializer; static constexpr bool value = std::experimental::is_detected_exact_v; }; template inline constexpr bool has_to_element_v = has_to_element::value; template struct has_from_element : std::false_type {}; template struct has_from_element>> { using serializer = element_serializer; static constexpr bool value = std::experimental::is_detected_exact_v; }; template inline constexpr bool has_from_element_v = has_from_element::value; template struct is_compatible_array_type : std::false_type {}; template struct is_compatible_array_type and std::experimental::is_detected_v and std::is_constructible_v>> : std::true_type {}; template inline constexpr bool is_compatible_array_type_v = is_compatible_array_type::value; template struct is_constructible_array_type : std::false_type {}; template struct is_constructible_array_type and std::experimental::is_detected_v and is_complete_type_v> >> { static constexpr bool value = not is_iterator_traits_v> and ( std::is_same_v or has_from_element_v ); }; template inline constexpr bool is_constructible_array_type_v = is_constructible_array_type::value; template struct is_object_type : std::false_type {}; template struct is_object_type and std::experimental::is_detected_v>> { using map_t = typename J::object_type; static constexpr bool value = std::is_constructible_v and std::is_constructible_v; }; template inline constexpr bool is_object_type_v = is_object_type::value; // any compatible type template struct is_compatible_type : std::false_type {}; template struct is_compatible_type>> { static constexpr bool value = has_to_element_v; }; template inline constexpr bool is_compatible_type_v = is_compatible_type::value; // compatible string template struct is_compatible_string_type : std::false_type {}; template struct is_compatible_string_type>> { static constexpr bool value = std::is_constructible_v; }; template inline constexpr bool is_compatible_string_type_v = is_compatible_string_type::value; // compatible object template struct is_compatible_object_type : std::false_type {}; template struct is_compatible_object_type and std::experimental::is_detected_v>> { using map_t = typename J::object_type; static constexpr bool value = std::is_constructible_v and (std::is_same_v or has_from_element_v); }; template inline constexpr bool is_compatible_object_type_v = is_compatible_object_type::value; template struct is_serializable_map_type : std::false_type {}; template struct is_serializable_map_type and std::experimental::is_detected_v and std::experimental::is_detected_v and not detail::is_compatible_string_type_v>> { static constexpr bool value = std::is_same_v and ( detail::is_compatible_type_v or has_serialize_v ); }; template inline constexpr bool is_serializable_map_type_v = is_serializable_map_type::value; template using has_value_or_result = decltype(std::declval().value_or(std::declval())); template struct is_serializable_optional_type : std::false_type {}; template struct is_serializable_optional_type and std::is_same_v,typename T::value_type> and not detail::is_compatible_string_type_v>> { static constexpr bool value = detail::is_compatible_type_v or has_serialize_v; }; template inline constexpr bool is_serializable_optional_type_v = is_serializable_optional_type::value; } libzeep-5.1.7/include/zeep/nvp.hpp0000664000175000017500000000210314176701531016723 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /*! \file zeep/nvp.hpp \brief File containing the name_value_pair class */ #include namespace zeep { /// \brief class used in describing members having a name and a value /// /// This class is very similar to the one used in boost::serialization, /// it is used to bind a name to a member variable. template class name_value_pair { public: name_value_pair(const char* name, T& value) : m_name(name), m_value(value) {} const char* name() const { return m_name; } T& value() const { return m_value; } const T& const_value() const { return m_value; } private: const char* m_name; T& m_value; }; template name_value_pair make_nvp(const char* name, T& v) { return name_value_pair(name, v); } #define ZEEP_SERIALIZATION_NVP(name) zeep::name_value_pair(#name, name) } // namespace zeep libzeep-5.1.7/include/zeep/streambuf.hpp0000664000175000017500000000531114176701531020114 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2020 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// A simple std::streambuf implementation that wraps around const char* data. #include #include #include #include namespace zeep { // -------------------------------------------------------------------- /// \brief A simple class to use const char buffers as streambuf /// /// It is very often useful to have a streambuf class that can wrap /// wrap around a const char* pointer. class char_streambuf : public std::streambuf { public: /// \brief constructor taking a \a buffer and a \a length char_streambuf(const char* buffer, size_t length) : m_begin(buffer), m_end(buffer + length), m_current(buffer) { assert(std::less_equal()(m_begin, m_end)); } /// \brief constructor taking a \a buffer using the standard strlen to determine the length char_streambuf(const char* buffer) : m_begin(buffer), m_end(buffer + strlen(buffer)), m_current(buffer) { } char_streambuf(const char_streambuf&) = delete; char_streambuf &operator=(const char_streambuf&) = delete; private: int_type underflow() { if (m_current == m_end) return traits_type::eof(); return traits_type::to_int_type(*m_current); } int_type uflow() { if (m_current == m_end) return traits_type::eof(); return traits_type::to_int_type(*m_current++); } int_type pbackfail(int_type ch) { if (m_current == m_begin or (ch != traits_type::eof() and ch != m_current[-1])) return traits_type::eof(); return traits_type::to_int_type(*--m_current); } std::streamsize showmanyc() { assert(std::less_equal()(m_current, m_end)); return m_end - m_current; } pos_type seekoff(std::streambuf::off_type off, std::ios_base::seekdir dir, std::ios_base::openmode /*which*/) { switch (dir) { case std::ios_base::beg: m_current = m_begin + off; break; case std::ios_base::end: m_current = m_end + off; break; case std::ios_base::cur: m_current += off; break; default: break; } if (m_current < m_begin) m_current = m_begin; if (m_current > m_end) m_current = m_end; return m_current - m_begin; } pos_type seekpos(std::streambuf::pos_type pos, std::ios_base::openmode /*which*/) { m_current = m_begin + pos; if (m_current < m_begin) m_current = m_begin; if (m_current > m_end) m_current = m_end; return m_current - m_begin; } private: const char* const m_begin; const char* const m_end; const char* m_current; }; } // namespace zeep libzeep-5.1.7/include/zeep/type-traits.hpp0000664000175000017500000001220414176701531020410 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of various classes that help classify data used to select the correct conversion routines #include #if __has_include() #include #else #include #endif #include #if (not defined(__cpp_lib_experimental_detect) or (__cpp_lib_experimental_detect < 201505)) and (not defined(_LIBCPP_VERSION) or _LIBCPP_VERSION < 5000) // This code is copied from: // https://ld2015.scusa.lsu.edu/cppreference/en/cpp/experimental/is_detected.html namespace std { template< class... > using void_t = void; namespace experimental { namespace detail { template class Op, class... Args> struct detector { using value_t = false_type; using type = Default; }; template class Op, class... Args> struct detector>, Op, Args...> { // Note that std::void_t is a c++17 feature using value_t = true_type; using type = Op; }; } // namespace detail struct nonesuch { nonesuch() = delete; ~nonesuch() = delete; nonesuch(nonesuch const&) = delete; void operator=(nonesuch const&) = delete; }; template class Op, class... Args> using is_detected = typename detail::detector::value_t; template class Op, class... Args> constexpr inline bool is_detected_v = is_detected::value; template class Op, class... Args> using detected_t = typename detail::detector::type; template class Op, class... Args> using detected_or = detail::detector; template class Op, class... Args> using is_detected_exact = std::is_same>; template class Op, class... Args> constexpr inline bool is_detected_exact_v = is_detected_exact::value; } } #endif /// \brief Templates to help selecting the correct serialization class. namespace zeep { template using value_type_t = typename T::value_type; template using key_type_t = typename T::key_type; template using mapped_type_t = typename T::mapped_type; template using iterator_t = typename T::iterator; template using iterator_category_t = typename T::iterator_category; template using difference_type_t = typename T::difference_type; template using reference_t = typename T::reference; template using pointer_t = typename T::pointer; template struct is_complete_type : std::false_type {}; template struct is_complete_type : std::true_type {}; template inline constexpr bool is_complete_type_v = is_complete_type::value; template using std_string_npos_t = decltype(T::npos); template using serialize_value_t = decltype(std::declval&>().from_string(std::declval())); template using serialize_function = decltype(std::declval().serialize(std::declval(), std::declval())); template struct has_serialize : std::false_type {}; template struct has_serialize>> { static constexpr bool value = std::experimental::is_detected_v; }; template inline constexpr bool has_serialize_v = has_serialize::value; template struct is_serializable_type { using value_type = std::remove_const_t>; static constexpr bool value = std::experimental::is_detected_v or has_serialize_v; }; template inline constexpr bool is_serializable_type_v = is_serializable_type::value; template inline constexpr bool is_type_with_value_serializer_v = std::experimental::is_detected_v; template struct is_serializable_array_type : std::false_type {}; template struct is_serializable_array_type and std::experimental::is_detected_v and not std::experimental::is_detected_v>> { static constexpr bool value = is_serializable_type_v; }; template inline constexpr bool is_serializable_array_type_v = is_serializable_array_type::value; } libzeep-5.1.7/include/zeep/unicode-support.hpp0000664000175000017500000002014714176701531021270 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// various definitions of data types and routines used to work with Unicode encoded text #include #include #include #include #include namespace zeep { /// \brief typedef of our own unicode type /// /// We use our own unicode type since wchar_t might be too small. /// This type should be able to contain a UCS4 encoded character. using unicode = char32_t; /// \brief the (admittedly limited) set of supported text encodings in libzeep /// /// these are the supported encodings. Perhaps we should extend this list a bit? enum class encoding_type { ASCII, ///< 7-bit ascii UTF8, ///< UTF-8 UTF16BE, ///< UTF-16 Big Endian UTF16LE, ///< UTF 16 Little Endian ISO88591 ///< Default single byte encoding, is a subset of utf-8 }; /// \brief utf-8 is not single byte e.g. constexpr bool is_single_byte_encoding(encoding_type enc) { return enc == encoding_type::ASCII or enc == encoding_type::ISO88591 or enc == encoding_type::UTF8; } /// Convert a string from UCS4 to UTF-8 std::string wstring_to_string(const std::wstring& s); /// manipulate UTF-8 encoded strings void append(std::string& s, unicode ch); unicode pop_last_char(std::string& s); template std::tuple get_first_char(Iter ptr, Iter end); /// \brief our own implementation of iequals: compares \a a with \a b case-insensitive /// /// This is a limited use function, works only reliably with ASCII. But that's OK. inline bool iequals(const std::string& a, const std::string& b) { bool equal = a.length() == b.length(); for (std::string::size_type i = 0; equal and i < a.length(); ++i) equal = std::toupper(a[i]) == std::toupper(b[i]); return equal; } // inlines /// \brief Append a single unicode character to an utf-8 string inline void append(std::string& s, unicode uc) { if (uc < 0x080) s += (static_cast(uc)); else if (uc < 0x0800) { char ch[2] = { static_cast(0x0c0 | (uc >> 6)), static_cast(0x080 | (uc & 0x3f)) }; s.append(ch, 2); } else if (uc < 0x00010000) { char ch[3] = { static_cast(0x0e0 | (uc >> 12)), static_cast(0x080 | ((uc >> 6) & 0x3f)), static_cast(0x080 | (uc & 0x3f)) }; s.append(ch, 3); } else { char ch[4] = { static_cast(0x0f0 | (uc >> 18)), static_cast(0x080 | ((uc >> 12) & 0x3f)), static_cast(0x080 | ((uc >> 6) & 0x3f)), static_cast(0x080 | (uc & 0x3f)) }; s.append(ch, 4); } } /// \brief remove the last unicode character from an utf-8 string inline unicode pop_last_char(std::string& s) { unicode result = 0; if (not s.empty()) { std::string::iterator ch = s.end() - 1; if ((*ch & 0x0080) == 0) { result = *ch; s.erase(ch); } else { int o = 0; do { result |= (*ch & 0x03F) << o; o += 6; --ch; } while (ch != s.begin() and (*ch & 0x0C0) == 0x080); switch (o) { case 6: result |= (*ch & 0x01F) << 6; break; case 12: result |= (*ch & 0x00F) << 12; break; case 18: result |= (*ch & 0x007) << 18; break; } s.erase(ch, s.end()); } } return result; } // I used to have this comment here: // // this code only works if the input is valid utf-8 // // That was a bad idea.... // /// \brief return the first unicode and the advanced pointer from a string template std::tuple get_first_char(Iter ptr, Iter end) { unicode result = static_cast(*ptr); ++ptr; if (result > 0x07f) { unsigned char ch[3]; if ((result & 0x0E0) == 0x0C0) { if (ptr >= end) throw zeep::exception("Invalid utf-8"); ch[0] = static_cast(*ptr); ++ptr; if ((ch[0] & 0x0c0) != 0x080) throw zeep::exception("Invalid utf-8"); result = ((result & 0x01F) << 6) | (ch[0] & 0x03F); } else if ((result & 0x0F0) == 0x0E0) { if (ptr + 1 >= end) throw zeep::exception("Invalid utf-8"); ch[0] = static_cast(*ptr); ++ptr; ch[1] = static_cast(*ptr); ++ptr; if ((ch[0] & 0x0c0) != 0x080 or (ch[1] & 0x0c0) != 0x080) throw zeep::exception("Invalid utf-8"); result = ((result & 0x00F) << 12) | ((ch[0] & 0x03F) << 6) | (ch[1] & 0x03F); } else if ((result & 0x0F8) == 0x0F0) { if (ptr + 2 >= end) throw zeep::exception("Invalid utf-8"); ch[0] = static_cast(*ptr); ++ptr; ch[1] = static_cast(*ptr); ++ptr; ch[2] = static_cast(*ptr); ++ptr; if ((ch[0] & 0x0c0) != 0x080 or (ch[1] & 0x0c0) != 0x080 or (ch[2] & 0x0c0) != 0x080) throw zeep::exception("Invalid utf-8"); result = ((result & 0x007) << 18) | ((ch[0] & 0x03F) << 12) | ((ch[1] & 0x03F) << 6) | (ch[2] & 0x03F); } } return std::make_tuple(result, ptr); } // -------------------------------------------------------------------- inline std::string to_hex(uint32_t i) { char s[sizeof(i) * 2 + 3]; char* p = s + sizeof(s); *--p = 0; const char kHexChars[] = "0123456789abcdef"; while (i) { *--p = kHexChars[i & 0x0F]; i >>= 4; } *--p = 'x'; *--p = '0'; return p; } // -------------------------------------------------------------------- /// \brief A simple implementation of trim, removing white space from start and end of \a s inline void trim(std::string& s) { std::string::iterator b = s.begin(); while (b != s.end() and *b > 0 and std::isspace(*b)) ++b; std::string::iterator e = s.end(); while (e > b and *(e - 1) > 0 and std::isspace(*(e - 1))) --e; if (b != s.begin() or e != s.end()) s = { b, e }; } // -------------------------------------------------------------------- /// \brief Simplistic implementation of starts_with inline bool starts_with(std::string_view s, std::string_view p) { return s.compare(0, p.length(), p) == 0; } // -------------------------------------------------------------------- /// \brief Simplistic implementation of ends_with inline bool ends_with(std::string_view s, std::string_view p) { return s.length() >= p.length() and s.compare(s.length() - p.length(), p.length(), p) == 0; } // -------------------------------------------------------------------- /// \brief Simplistic implementation of contains inline bool contains(std::string_view s, std::string_view p) { return s.find(p) != std::string_view::npos; } // -------------------------------------------------------------------- /// \brief Simplistic implementation of split, with std:string in the vector inline void split(std::vector& v, std::string_view s, std::string_view p, bool compress = false) { v.clear(); std::string_view::size_type i = 0; const auto e = s.length(); while (i <= e) { auto n = s.find(p, i); if (n > e) n = e; if (n > i or compress == false) v.emplace_back(s.substr(i, n - i)); if (n == std::string_view::npos) break; i = n + p.length(); } } // -------------------------------------------------------------------- /// \brief Simplistic to_lower function, works for one byte charsets only... inline void to_lower(std::string& s, const std::locale& loc = std::locale()) { for (char& ch: s) ch = std::tolower(ch, loc); } // -------------------------------------------------------------------- /// \brief Simplistic join function template > std::string join(const Container& v, std::string_view d) { std::string result; if (not v.empty()) { auto i = v.begin(); for (;;) { result += *i++; if (i == v.end()) break; result += d; } } return result; } // -------------------------------------------------------------------- /// \brief Simplistic replace_all inline void replace_all(std::string& s, std::string_view p, std::string_view r) { std::string::size_type i = 0; for (;;) { auto l = s.find(p, i); if (l == std::string::npos) break; s.replace(l, p.length(), r); i = l + r.length(); } } } // namespace xml libzeep-5.1.7/include/zeep/value-serializer.hpp0000664000175000017500000004201014176701531021404 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /*! \file zeep/value-serializer.hpp \brief File containing the common serialization code in libzeep Serialization in libzeep is used by both the XML and the JSON sub libraries. Code that is common is found here. */ #include #include #include #include #include namespace zeep { // -------------------------------------------------------------------- /// \brief A template boilerplate for conversion of basic types to or /// from strings. /// /// Each specialization should provide a static to_string and a from_string /// method as well as a type_name method. This type_name is used in e.g. /// constructing WSDL files. template struct value_serializer; template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:boolean"; } static std::string to_string(bool value) { return value ? "true" : "false"; } static bool from_string(const std::string& value) { return value == "true" or value == "1" or value == "yes"; } }; template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:string"; } static std::string to_string(const std::string& value) { return value; } static std::string from_string(const std::string& value){ return value; } }; template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:byte"; } static std::string to_string(int8_t value) { return std::to_string(value); } static int8_t from_string(const std::string& value) { return static_cast(std::stoi(value)); } }; template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:unsignedByte"; } static std::string to_string(uint8_t value) { return std::to_string(value); } static uint8_t from_string(const std::string& value) { return static_cast(std::stoul(value)); } }; template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:short"; } static std::string to_string(int16_t value) { return std::to_string(value); } static int16_t from_string(const std::string& value) { return static_cast(std::stoi(value)); } }; template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:unsignedShort"; } static std::string to_string(uint16_t value) { return std::to_string(value); } static uint16_t from_string(const std::string& value) { return static_cast(std::stoul(value)); } }; template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:int"; } static std::string to_string(int32_t value) { return std::to_string(value); } static int32_t from_string(const std::string& value) { return std::stoi(value); } }; template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:unsignedInt"; } static std::string to_string(uint32_t value) { return std::to_string(value); } static uint32_t from_string(const std::string& value) { return static_cast(std::stoul(value)); } }; template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:long"; } static std::string to_string(int64_t value) { return std::to_string(value); } static int64_t from_string(const std::string& value) { return static_cast(std::stoll(value)); } }; template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:unsignedLong"; } static std::string to_string(uint64_t value) { return std::to_string(value); } static uint64_t from_string(const std::string& value) { return static_cast(std::stoull(value)); } }; template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:float"; } // static std::string to_string(float value) { return std::to_string(value); } static std::string to_string(float value) { std::ostringstream s; s << value; return s.str(); } static float from_string(const std::string& value) { return std::stof(value); } }; template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:double"; } // static std::string to_string(double value) { return std::to_string(value); } static std::string to_string(double value) { std::ostringstream s; s << value; return s.str(); } static double from_string(const std::string& value) { return std::stod(value); } }; /// \brief value_serializer for enum values /// /// This class is used to (de-)serialize enum values. To map enum /// values to a string you should use the singleton instance /// accessible through instance() and then call the operator() /// members assinging each of the enum values with their respective /// string. /// /// A recent addition is the init() call to initialize the instance template struct value_serializer>> { std::string m_type_name; using value_map_type = std::map; using value_map_value_type = typename value_map_type::value_type; value_map_type m_value_map; /// \brief Initialize a new instance of value_serializer for this enum, with name and a set of name/value pairs static void init(const char* name, std::initializer_list values) { instance(name).m_value_map = value_map_type(values); } /// \brief Initialize a new anonymous instance of value_serializer for this enum with a set of name/value pairs static void init(std::initializer_list values) { instance().m_value_map = value_map_type(values); } static value_serializer& instance(const char* name = nullptr) { static value_serializer s_instance; if (name and s_instance.m_type_name.empty()) s_instance.m_type_name = name; return s_instance; } value_serializer& operator()(T v, const std::string& name) { m_value_map[v] = name; return *this; } value_serializer& operator()(const std::string& name, T v) { m_value_map[v] = name; return *this; } static const char* type_name() { return instance().m_type_name; } static std::string to_string(T value) { return instance().m_value_map[value]; } static T from_string(const std::string& value) { T result = {}; for (auto& t: instance().m_value_map) if (t.second == value) { result = t.first; break; } return result; } static bool empty() { return instance().m_value_map.empty(); } }; // -------------------------------------------------------------------- // date/time support /// \brief to_string/from_string for boost::posix_time::ptime /// boost::posix_time::ptime values are always assumed to be UTC template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:dateTime"; } /// to_string the boost::posix_time::ptime as YYYY-MM-DDThh:mm:ssZ (zero UTC offset) static std::string to_string(const boost::posix_time::ptime& v) { return boost::posix_time::to_iso_extended_string(v).append("Z"); } /// from_string according to ISO8601 rules. /// If Zulu time is specified, then the parsed xsd:dateTime is returned. /// If an UTC offset is present, then the offset is subtracted from the xsd:dateTime, this yields UTC. /// If no UTC offset is present, then the xsd:dateTime is assumed to be local time and converted to UTC. static boost::posix_time::ptime from_string(const std::string& s) { // We accept 3 general formats: // 1: date fields separated with dashes, time fields separated with colons, eg. 2013-02-17T15:25:20,502104+01:00 // 2: date fields not separated, time fields separated with colons, eg. 20130217T15:25:20,502104+01:00 // 3: date fields not separated, time fields not separated, eg. 20130217T152520,502104+01:00 // Apart from the separators, the 3 regexes are basically the same, i.e. they have the same fields // Note: std::regex is threadsafe, so we can declare these statically // Format 1: // ^(-?\d{4})-(\d{2})-(\d{2})T(\d{2})(:(\d{2})(:(\d{2})([.,](\d+))?)?)?((Z)|([-+])(\d{2})(:(\d{2}))?)?$ // ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^^ ^ ^ ^ ^ // | | | | | | | | | | || | | | | // | | | | | | | | | | || | | | [16] UTC minutes offset // | | | | | | | | | | || | | [15] have UTC minutes offset? // | | | | | | | | | | || | [14] UTC hour offset // | | | | | | | | | | || [13] UTC offset sign // | | | | | | | | | | |[12] Zulu time // | | | | | | | | | | [11] have time zone? // | | | | | | | | | [10] fractional seconds // | | | | | | | | [9] have fractional seconds // | | | | | | | [8] seconds // | | | | | | [7] have seconds? // | | | | | [6] minutes // | | | | [5] have minutes? // | | | [4] hours // | | [3] day // | [2] month // [1] year static std::regex re1("^(-?\\d{4})-(\\d{2})-(\\d{2})T(\\d{2})(:(\\d{2})(:(\\d{2})([.,](\\d+))?)?)?((Z)|([-+])(\\d{2})(:(\\d{2}))?)?$"); // Format 2: // ^(-?\d{4})(\d{2})(\d{2})T(\d{2})(:(\d{2})(:(\d{2})([.,]\d+)?)?)?((Z)|([-+])(\d{2})(:(\d{2}))?)?$ static std::regex re2("^(-?\\d{4})(\\d{2})(\\d{2})T(\\d{2})(:(\\d{2})(:(\\d{2})([.,]\\d+)?)?)?((Z)|([-+])(\\d{2})(:(\\d{2}))?)?$"); // Format 3: // ^(-?\d{4})(\d{2})(\d{2})T(\d{2})((\d{2})((\d{2})([.,]\d+)?)?)?((Z)|([-+])(\d{2})(:(\d{2}))?)?$ static std::regex re3("^(-?\\d{4})(\\d{2})(\\d{2})T(\\d{2})((\\d{2})((\\d{2})([.,]\\d+)?)?)?((Z)|([-+])(\\d{2})(:(\\d{2}))?)?$"); static const int f_year = 1; static const int f_month = 2; static const int f_day = 3; static const int f_hours = 4; static const int f_have_minutes = 5; static const int f_minutes = 6; static const int f_have_seconds = 7; static const int f_seconds = 8; static const int f_have_frac = 9; static const int f_frac = 10; static const int f_have_tz = 11; static const int f_zulu = 12; static const int f_offs_sign = 13; static const int f_offs_hours = 14; static const int f_have_offs_minutes = 15; static const int f_offs_minutes = 16; std::smatch m; if (not std::regex_match(s, m, re1)) { if (not std::regex_match(s, m, re2)) { if (not std::regex_match(s, m, re3)) { throw exception("Bad dateTime format"); } } } boost::gregorian::date d( static_cast(std::stoi(m[f_year])) , static_cast(std::stoi(m[f_month])) , static_cast(std::stoi(m[f_day])) ); int hours = std::stoi(m[f_hours]); int minutes = 0, seconds = 0; if (m.length(f_have_minutes)) { minutes = std::stoi(m[f_minutes]); if (m.length(f_have_seconds)) { seconds = std::stoi(m[f_seconds]); } } boost::posix_time::time_duration t(hours, minutes, seconds); if (m.length(f_have_frac)) { double frac = std::stod("0." + m[f_frac].str()); t += boost::posix_time::microseconds(static_cast((frac + .5) * 1e6)); } boost::posix_time::ptime result = boost::posix_time::ptime(d, t); if (m.length(f_have_tz)) { if (not m.length(f_zulu)) { std::string sign = m[f_offs_sign]; hours = std::stoi(m[f_offs_hours]); minutes = 0; if (m.length(f_have_offs_minutes)) { minutes = std::stoi(m[f_offs_minutes]); } boost::posix_time::time_duration offs(hours, minutes, 0); if (sign == "+") { result -= offs; } else { result += offs; } } } else { // Boost has no clear way of instantiating the *current* timezone, so // it's not possible to convert from local to UTC, using boost::local_time classes // For now, settle on using mktime... std::tm tm = boost::posix_time::to_tm(result); tm.tm_isdst = -1; std::time_t t2 = mktime(&tm); result = boost::posix_time::from_time_t(t2); } return result; } }; /// \brief to_string/from_string for boost::gregorian::date /// boost::gregorian::date values are assumed to be floating, i.e. we don't accept timezone info in dates template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:date"; } /// to_string the boost::gregorian::date as YYYY-MM-DD static std::string to_string(const boost::gregorian::date& v) { return boost::gregorian::to_iso_extended_string(v); } /// from_string boost::gregorian::date according to ISO8601 rules, but without timezone. static boost::gregorian::date from_string(const std::string& s) { // We accept 2 general formats: // 1: date fields separated with dashes, eg. 2013-02-17 // 2: date fields not separated, eg. 20130217 // Apart from the separators, the 2 regexes are basically the same, i.e. they have the same fields // Note: std::regex is threadsafe, so we can declare these statically // Format 1: // ^(-?\d{4})-(\d{2})-(\d{2})$ // ^ ^ ^ // | | | // | | | // | | [3] day // | [2] month // [1] year static std::regex re1("^(-?\\d{4})-(\\d{2})-(\\d{2})$"); // Format 2: // ^(-?\d{4})(\d{2})(\d{2})$ static std::regex re2("^(-?\\d{4})(\\d{2})(\\d{2})$"); static const int f_year = 1; static const int f_month = 2; static const int f_day = 3; std::smatch m; if (not std::regex_match(s, m, re1)) { if (not std::regex_match(s, m, re2)) { throw exception("Bad date format"); } } return boost::gregorian::date( static_cast(std::stoi(m[f_year])) , static_cast(std::stoi(m[f_month])) , static_cast(std::stoi(m[f_day])) ); } }; /// \brief to_string/from_string for boost::posix_time::time_duration /// boost::posix_time::time_duration values are assumed to be floating, i.e. we don't accept timezone info in times template<> struct value_serializer { static constexpr const char* type_name() { return "xsd:time"; } /// to_string the boost::posix_time::time_duration as hh:mm:ss,ffffff static std::string to_string(const boost::posix_time::time_duration& v) { return boost::posix_time::to_simple_string(v); } /// from_string boost::posix_time::time_duration according to ISO8601 rules, but without timezone. static boost::posix_time::time_duration from_string(const std::string& s) { // We accept 2 general formats: // 1: time fields separated with colons, eg. 15:25:20,502104 // 2: time fields not separated, eg. 152520,502104 // Apart from the separators, the 2 regexes are basically the same, i.e. they have the same fields // Note: std::regex is threadsafe, so we can declare these statically // Format 1: // ^(\d{2})(:(\d{2})(:(\d{2})([.,](\d+))?)?)?$ // ^ ^ ^ ^ ^ ^ ^ // | | | | | | | // | | | | | | [7] fractional seconds // | | | | | [6] have fractional seconds // | | | | [5] seconds // | | | [4] have seconds? // | | [3] minutes // | [2] have minutes? // [1] hours static std::regex re1("^(\\d{2})(:(\\d{2})(:(\\d{2})([.,](\\d+))?)?)?$"); // Format 2: // ^(\d{2})((\d{2})((\d{2})([.,](\d+))?)?)?$ static std::regex re2("^(\\d{2})((\\d{2})((\\d{2})([.,](\\d+))?)?)?$"); static const int f_hours = 1; static const int f_have_minutes = 2; static const int f_minutes = 3; static const int f_have_seconds = 4; static const int f_seconds = 5; static const int f_have_frac = 6; static const int f_frac = 7; std::smatch m; if (not std::regex_match(s, m, re1)) { if (not std::regex_match(s, m, re2)) { throw exception("Bad time format"); } } int hours = std::stoi(m[f_hours]); int minutes = 0, seconds = 0; if (m.length(f_have_minutes)) { minutes = std::stoi(m[f_minutes]); if (m.length(f_have_seconds)) { seconds = std::stoi(m[f_seconds]); } } boost::posix_time::time_duration result = boost::posix_time::time_duration(hours, minutes, seconds); if (m.length(f_have_frac)) { double frac = std::stod(std::string(".").append(std::string(m[f_frac]))); result += boost::posix_time::microseconds(static_cast((frac + .5) * 1e6)); } return result; } }; } // namespace zeep libzeep-5.1.7/include/zeep/xml/0000775000175000017500000000000014176701531016213 5ustar maartenmaartenlibzeep-5.1.7/include/zeep/xml/character-classification.hpp0000664000175000017500000000156214176701531023655 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// routines for classifying characters in an XML context #include #include #include namespace zeep::xml { /// some character classification routines bool is_name_start_char(unicode uc); bool is_name_char(unicode uc); bool is_valid_xml_1_0_char(unicode uc); bool is_valid_xml_1_1_char(unicode uc); bool is_valid_system_literal_char(unicode uc); bool is_valid_system_literal(const std::string& s); bool is_valid_public_id_char(unicode uc); bool is_valid_public_id(const std::string& s); } // namespace zeep::xml libzeep-5.1.7/include/zeep/xml/doctype.hpp0000664000175000017500000002072614176701531020402 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// various classes and definitions for handling and using XML DOCTYPE definitions #include #include #include #include #include #include namespace zeep::xml::doctype { // -------------------------------------------------------------------- // doctype support with full validation. class element_; class attlist; class entity; class attribute_; using entity_list = std::vector; using element_list = std::vector; using attribute_list = std::vector; // -------------------------------------------------------------------- enum class ContentSpecType { Empty, Any, Mixed, Children }; // -------------------------------------------------------------------- // validation of elements is done by the validator classes struct content_spec_base; using content_spec_ptr = content_spec_base*; using content_spec_list = std::list; struct state_base; using state_ptr = state_base*; class validator { public: validator(content_spec_base* allowed); validator(const element_* e); validator(const validator& other) = delete; validator& operator=(const validator& other) = delete; ~validator(); bool allow(const std::string& name); ContentSpecType get_content_spec() const; bool done(); private: state_ptr m_state; content_spec_ptr m_allowed; bool m_done; }; // -------------------------------------------------------------------- struct content_spec_base { content_spec_base(const content_spec_base&) = delete; content_spec_base& operator=(const content_spec_base&) = delete; virtual ~content_spec_base() {} virtual state_ptr create_state() const = 0; virtual bool element_content() const { return false; } ContentSpecType get_content_spec() const { return m_content_spec; } protected: content_spec_base(ContentSpecType contentSpec) : m_content_spec(contentSpec) {} ContentSpecType m_content_spec; }; struct content_spec_any : public content_spec_base { content_spec_any() : content_spec_base(ContentSpecType::Any) {} virtual state_ptr create_state() const; }; struct content_spec_empty : public content_spec_base { content_spec_empty() : content_spec_base(ContentSpecType::Empty) {} virtual state_ptr create_state() const; }; struct content_spec_element : public content_spec_base { content_spec_element(const std::string& name) : content_spec_base(ContentSpecType::Children), m_name(name) {} virtual state_ptr create_state() const; virtual bool element_content() const { return true; } std::string m_name; }; struct content_spec_repeated : public content_spec_base { content_spec_repeated(content_spec_ptr allowed, char repetion) : content_spec_base(allowed->get_content_spec()), m_allowed(allowed), m_repetition(repetion) { assert(allowed); } ~content_spec_repeated(); virtual state_ptr create_state() const; virtual bool element_content() const; content_spec_ptr m_allowed; char m_repetition; }; struct content_spec_seq : public content_spec_base { content_spec_seq(content_spec_ptr a) : content_spec_base(a->get_content_spec()) { add(a); } ~content_spec_seq(); void add(content_spec_ptr a); virtual state_ptr create_state() const; virtual bool element_content() const; content_spec_list m_allowed; }; struct content_spec_choice : public content_spec_base { content_spec_choice(bool mixed) : content_spec_base(mixed ? ContentSpecType::Mixed : ContentSpecType::Children), m_mixed(mixed) {} content_spec_choice(content_spec_ptr a, bool mixed) : content_spec_base(mixed ? ContentSpecType::Mixed : a->get_content_spec()), m_mixed(mixed) { add(a); } ~content_spec_choice(); void add(content_spec_ptr a); virtual state_ptr create_state() const; virtual bool element_content() const; content_spec_list m_allowed; bool m_mixed; }; // -------------------------------------------------------------------- enum class AttributeType { CDATA, ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS, Notation, Enumerated }; enum class AttributeDefault { None, Required, Implied, Fixed, Default }; class attribute_ { public: attribute_(const std::string& name, AttributeType type) : m_name(name), m_type(type), m_default(AttributeDefault::None), m_external(false) {} attribute_(const std::string& name, AttributeType type, const std::vector &enums) : m_name(name), m_type(type), m_default(AttributeDefault::None), m_enum(enums), m_external(false) {} const std::string& name() const { return m_name; } bool validate_value(std::string& value, const entity_list& entities) const; void set_default(AttributeDefault def, const std::string& value) { m_default = def; m_default_value = value; } std::tuple get_default() const { return std::make_tuple(m_default, m_default_value); } AttributeType get_type() const { return m_type; } AttributeDefault get_default_type() const { return m_default; } const std::vector& get_enums() const { return m_enum; } void set_external(bool external) { m_external = external; } bool is_external() const { return m_external; } private: // routines used to check _and_ reformat attribute value strings bool is_name(std::string& s) const; bool is_names(std::string& s) const; bool is_nmtoken(std::string& s) const; bool is_nmtokens(std::string& s) const; bool is_unparsed_entity(const std::string& s, const entity_list& l) const; std::string m_name; AttributeType m_type; AttributeDefault m_default; std::string m_default_value; std::vector m_enum; bool m_external; }; // -------------------------------------------------------------------- class element_ { public: element_(const element_ &) = delete; element_& operator=(const element_ &) = delete; element_(const std::string& name, bool declared, bool external) : m_name(name), m_allowed(nullptr), m_declared(declared) {} ~element_(); const attribute_list& get_attributes() const { return m_attlist; } void add_attribute(attribute_* attr); const attribute_* get_attribute(const std::string& name) const; const std::string& name() const { return m_name; } bool is_declared() const { return m_declared; } bool empty() const; void set_allowed(content_spec_ptr allowed); content_spec_ptr get_allowed() const { return m_allowed; } private: std::string m_name; attribute_list m_attlist; content_spec_ptr m_allowed; bool m_declared; }; // -------------------------------------------------------------------- class entity { public: entity(const entity &) = delete; entity& operator=(const entity &) = delete; const std::string& name() const { return m_name; } const std::string& get_replacement() const { return m_replacement; } const std::string& get_path() const { return m_path; } bool is_parsed() const { return m_parsed; } const std::string& get_ndata() const { return m_ndata; } void set_ndata(const std::string& ndata) { m_ndata = ndata; } bool is_external() const { return m_external; } bool is_externally_defined() const { return m_externally_defined; } void set_externally_defined(bool externally_defined) { m_externally_defined = externally_defined; } protected: entity(const std::string& name, const std::string& replacement, bool external, bool parsed) : m_name(name), m_replacement(replacement), m_parameter(false), m_parsed(parsed), m_external(external), m_externally_defined(false) {} entity(const std::string& name, const std::string& replacement, const std::string& path) : m_name(name), m_replacement(replacement), m_path(path), m_parameter(true), m_parsed(true), m_external(true), m_externally_defined(false) {} std::string m_name; std::string m_replacement; std::string m_ndata; std::string m_path; bool m_parameter; bool m_parsed; bool m_external; bool m_externally_defined; }; class general_entity : public entity { public: general_entity(const std::string& name, const std::string& replacement, bool external = false, bool parsed = true) : entity(name, replacement, external, parsed) {} }; class parameter_entity : public entity { public: parameter_entity(const std::string& name, const std::string& replacement, const std::string& path) : entity(name, replacement, path) {} }; } // namespace zeep::xml::doctype libzeep-5.1.7/include/zeep/xml/document.hpp0000664000175000017500000002521714176701531020551 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::xml::document class #include #include #include #include namespace zeep::xml { /// zeep::xml::document is the class that contains a parsed XML file. /// You can create an empty document and add nodes to it, or you can /// create it by specifying a string containing XML or an std::istream /// to parse. /// /// If you use an std::fstream to read a file, be sure to open the file /// ios::binary. Otherwise, the detection of text encoding might go wrong /// or the content can become corrupted. /// /// Default is to parse CDATA sections into zeep::xml::text nodes. If you /// want to preserve CDATA sections in the DOM tree, you have to call /// set_preserve_cdata before reading the file. /// /// By default a document is not validated. But you can turn on validation /// by using the appropriate constructor or read method, or by setting /// set_validating explicitly. The DTD's will be loaded from the base dir /// specified, but you can change this by assigning a external_entity_ref_handler. /// /// A document has one zeep::xml::root_node element. This root element /// can have only one zeep::xml::element child node. struct doc_type { std::string m_root; std::string m_pubid; /// pubid is empty for SYSTEM DOCTYPE std::string m_dtd; }; class document : public element { public: /// \brief Constructor for an empty document. document(); /// \brief Copy constructor document(const document& doc); /// \brief Move constructor document(document&& other); /// \brief Copy operator= document& operator=(const document& doc); /// \brief Move operator= document& operator=(document&& other); /// \brief Constructor that will parse the XML passed in argument using default settings \a s document(const std::string& s); /// \brief Constructor that will parse the XML passed in argument using default settings \a is document(std::istream& is); /// \brief Constructor that will parse the XML passed in argument \a is. This /// constructor will also validate the input using DTD's found in \a base_dir document(std::istream& is, const std::string& base_dir); virtual ~document(); /// options for parsing /// validating uses a DTD if it is defined bool is_validating() const { return m_validating; } void set_validating(bool validate) { m_validating = validate; } /// validating_ns: when validating take the NS 1.0 specification into account bool is_validating_ns() const { return m_validating_ns; } void set_validating_ns(bool validate) { m_validating_ns = validate; } /// preserve cdata, preserves CDATA sections instead of converting them /// into text nodes. bool preserves_cdata() const { return m_preserve_cdata; } /// \brief if \a p is true, the CDATA sections will be preserved when parsing XML, if \a p is false, the content of the CDATA will be treated as text void set_preserve_cdata(bool p) { m_preserve_cdata = p; } /// \brief collapse means replacing e.g. `` with `` bool collapses_empty_tags() const { return m_fmt.collapse_tags; } /// \brief if \a c is true, empty tags will be replaced, i.e. write `` instead of `` void set_collapse_empty_tags(bool c) { m_fmt.collapse_tags = c; } /// \brief collapse 'empty elements' according to HTML rules bool write_html() const { return m_fmt.html; } /// \brief if \a c is true, 'empty elements' will be collapsed according to HTML rules void set_write_html(bool f) { m_fmt.html = f; } /// \brief whether to write out comments bool suppresses_comments() const { return m_fmt.suppress_comments; } /// \brief if \a s is true, comments will not be written void set_suppress_comments(bool s) { m_fmt.suppress_comments = s; } /// \brief whether to escape white space bool escapes_white_space() const { return m_fmt.escape_white_space; } /// \brief if \a e is true, white space will be written as XML entities void set_escape_white_space(bool e) { m_fmt.escape_white_space = e; } /// \brief whether to escape double quotes bool escapes_double_quote() const { return m_fmt.escape_double_quote; } /// \brief if \a e is true, double quotes will be written as " void set_escape_double_quote(bool e) { m_fmt.escape_double_quote = e; } /// \brief whether to place a newline after a prolog bool wraps_prolog() const { return m_wrap_prolog; } /// \brief if \a w is true, a newline will be written after the XML prolog void set_wrap_prolog(bool w) { m_wrap_prolog = w; } /// \brief Get the doctype as parsed doc_type get_doctype() const { return m_doctype; } /// \brief Set the doctype to write out void set_doctype(const std::string& root, const std::string& pubid, const std::string& dtd) { set_doctype({root, pubid, dtd}); } /// Set the doctype to write out void set_doctype(const doc_type& doctype) { m_doctype = doctype; m_write_doctype = true; } /// \brief whether to write a XML prolog bool writes_xml_decl() const { return m_write_xml_decl; } /// \brief if \a w is true, an XML prolog will be written void set_write_xml_decl(bool w) { m_write_xml_decl = w; } /// \brief whether to write a DOCTYPE bool writes_doctype() const { return m_write_doctype; } /// \brief if \a f is true a DOCTYPE will be written void set_write_doctype(bool f) { m_write_doctype = f; } /// \brief Check the doctype to see if this is supposed to be HTML5 bool is_html5() const; /// \brief Write out the document friend std::ostream& operator<<(std::ostream& os, const document& doc); /// \brief Read in a document friend std::istream& operator>>(std::istream& is, document& doc); /// \brief Serialization support template void serialize(const char* name, const T& data); ///< Serialize \a data into a document containing \a name as root node /// \brief Serialization support template void deserialize(const char* name, T& data); ///< Deserialize root node with name \a name into \a data. /// Compare two xml documents bool operator==(const document& doc) const; bool operator!=(const document& doc) const { return not operator==(doc); } /// If you want to validate the document using DTD files stored on disk, you can specifiy this directory prior to reading /// the document. void set_base_dir(const std::string& path); /// If you want to be able to load external documents other than trying to read them from disk /// you can set a callback here. template void set_entity_loader(Callback&& cb) { m_external_entity_ref_loader = cb; } encoding_type get_encoding() const; ///< The text encoding as detected in the input. void set_encoding(encoding_type enc); ///< The text encoding to use for output float get_version() const; ///< XML version, should be either 1.0 or 1.1 void set_version(float v); ///< XML version, should be either 1.0 or 1.1 virtual element* root() { return this; } virtual const element* root() const { return this; } virtual node* child() { return empty() ? nullptr : &front(); } virtual const node* child() const { return empty() ? nullptr : &front(); } protected: virtual node_iterator insert_impl(const_iterator pos, node* n); void XmlDeclHandler(encoding_type encoding, bool standalone, float version); void StartElementHandler(const std::string& name, const std::string& uri, const parser::attr_list_type& atts); void EndElementHandler(const std::string& name, const std::string& uri); void CharacterDataHandler(const std::string& data); void ProcessingInstructionHandler(const std::string& target, const std::string& data); void CommentHandler(const std::string& comment); void StartCdataSectionHandler(); void EndCdataSectionHandler(); void StartNamespaceDeclHandler(const std::string& prefix, const std::string& uri); void EndNamespaceDeclHandler(const std::string& prefix); void DoctypeDeclHandler(const std::string& root, const std::string& publicId, const std::string& uri); void NotationDeclHandler(const std::string& name, const std::string& sysid, const std::string& pubid); std::istream* external_entity_ref(const std::string& base, const std::string& pubid, const std::string& sysid); void parse(std::istream& data); // /// \brief To read a document and process elements on the go, use this streaming input function. // /// If the \a proc callback retuns false, processing is terminated. The \a doc_root parameter of // /// the callback is the leading xml up to the first element. // void process_document_elements(std::istream& data, const std::string& element_xpath, // std::function cb); /// The default for libzeep is to locate the external reference based /// on sysid and base_dir. Only local files are loaded this way. /// You can specify a entity loader here if you want to be able to load /// DTD files from another source. std::function m_external_entity_ref_loader; virtual void write(std::ostream& os, format_info fmt) const; std::string m_dtd_dir; // some content information doc_type m_doctype; bool m_validating; bool m_validating_ns = false; bool m_preserve_cdata; bool m_has_xml_decl; encoding_type m_encoding; float m_version; bool m_standalone; bool m_wrap_prolog = true; bool m_write_doctype = false; bool m_write_xml_decl = false; format_info m_fmt; struct notation { std::string m_name; std::string m_sysid; std::string m_pubid; }; element* m_cur = nullptr; // construction cdata* m_cdata = nullptr; // only defined in a CDATA section std::vector> m_namespaces; std::list m_notations; size_t m_root_size_at_first_notation = 0; // for processing instructions that occur before a notation }; namespace literals { document operator""_xml(const char* text, size_t length); } template void document::serialize(const char* name, const T& data) { serializer sr(*this); sr.serialize_element(name, data); } template void document::deserialize(const char* name, T& data) { if (child() == nullptr) throw zeep::exception("empty document"); if (child()->name() != name) throw zeep::exception("root mismatch"); deserializer sr(*this); sr.deserialize_element(name, data); } } // namespace zeep::xml libzeep-5.1.7/include/zeep/xml/node.hpp0000664000175000017500000013076514176701531017665 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// the core of the libzeep XML library defining the main classes in the DOM API #include #include #include #include #include #include namespace zeep::xml { class node; class element; class text; class attribute; class name_space; class comment; class cdata; class processing_instruction; class document; template class basic_node_list; using node_set = std::list; using element_set = std::list; // -------------------------------------------------------------------- /// \brief specification of how XML data should be written out struct format_info { bool indent = false; bool indent_attributes = false; bool collapse_tags = true; bool suppress_comments = false; bool escape_white_space = false; bool escape_double_quote = true; bool html = false; ///< This flag can be used to collapse only 'empty elements' size_t indent_width = 0; size_t indent_level = 0; float version = 1.0f; }; // -------------------------------------------------------------------- /// Node is the abstract base class for all data contained in zeep XML documents. /// The DOM tree consists of nodes that are linked to each other, each /// node can have a parent and siblings pointed to by the next and /// previous members. All nodes in a DOM tree share a common root node. /// /// Nodes can have a name, and the XPath specification requires that a node can /// have a so-called expanded-name. This name consists of a local-name and a /// namespace which is a URI. And we can have a QName which is a concatenation of /// a prefix (that points to a namespace URI) and a local-name separated by a colon. /// /// To reduce storage requirements, names are stored in nodes as qnames, if at all. /// the convenience functions name() and prefix() parse the qname(). ns() returns /// the namespace URI for the node, if it can be resolved. /// /// Nodes inherit the namespace of their parent unless they override it which means /// resolving prefixes and namespaces is done hierarchically /// /// Nodes are stored in a node_list, a generic list class that resembles std::list class node { public: friend class element; friend class document; template friend class basic_node_list; friend class node_list; using parent_type = element; virtual ~node(); /// content of a xml:lang attribute of this element, or its nearest ancestor virtual std::string lang() const; /// Nodes can have a name, and the XPath specification requires that a node can /// have a so-called expanded-name. This name consists of a local-name and a /// namespace which is a URI. And we can have a QName which is a concatenation of /// a prefix (that points to a namespace URI) and a local-name separated by a colon. /// /// To reduce storage requirements, names are stored in nodes as qnames, if at all. virtual std::string get_qname() const; virtual void set_qname(const std::string& /*qn*/) { assert(false); } /// \brief set the qname with two parameters, if \a prefix is empty the qname will be simply \a name /// otherwise the name will be `prefix:name` /// \param prefix The namespace prefix to use /// \param name The actual name to use virtual void set_qname(const std::string& prefix, const std::string& name) { set_qname(prefix.empty() ? name : prefix + ':' + name); } virtual std::string name() const; ///< The name for the node as parsed from the qname. virtual std::string get_prefix() const; ///< The prefix for the node as parsed from the qname. virtual std::string get_ns() const; ///< Returns the namespace URI for the node, if it can be resolved. virtual std::string namespace_for_prefix(const std::string& prefix) const; ///< Return the namespace URI for a prefix virtual std::pair prefix_for_namespace(const std::string& uri) const; ///< Return the prefix for a namespace URI virtual std::string prefix_tag(const std::string& tag, const std::string& uri) const; ///< Prefix the \a tag with the namespace prefix for \a uri /// return all content concatenated, including that of children. virtual std::string str() const = 0; /// Set text, what really happens depends on the type of the subclass implementing this method virtual void set_text(const std::string& value) = 0; // -------------------------------------------------------------------- // low level routines // basic access // All nodes should have a single root node virtual element* root(); ///< The root node for this node virtual const element* root() const; ///< The root node for this node element* parent() { return m_parent; } ///< The parent node for this node const element* parent() const { return m_parent; } ///< The parent node for this node node* next() { return m_next; } ///< The next sibling const node* next() const { return m_next; } ///< The next sibling node* prev() { return m_prev; } ///< The previous sibling const node* prev() const { return m_prev; } ///< The previous sibling /// Compare the node with \a n virtual bool equals(const node* n) const; /// debug routine virtual void validate(); /// return an exact copy of this node, including all data in sub nodes virtual node* clone() const = 0; /// return a copy of this node, including all data in sub nodes, but /// in contrast with clone the data is moved from this node to the cloned /// node. This node will be empty afterwards. virtual node* move() = 0; /// \brief low level routine for writing out XML /// /// This method is usually called by operator<<(std::ostream&, zeep::xml::document&) virtual void write(std::ostream& os, format_info fmt) const = 0; protected: friend class element; node() = default; node(const node& n) = delete; node(node&& n) = delete; node& operator=(const node& n) = delete; node& operator=(node&& n) = delete; virtual void insert_sibling(node* n, node* before); virtual void remove_sibling(node* n); void parent(element* p); void next(node* n); void prev(node* n); protected: element* m_parent = nullptr; node* m_next = nullptr; node* m_prev = nullptr; }; // -------------------------------------------------------------------- /// internal node base class for storing text class node_with_text : public node { public: node_with_text() {} node_with_text(const std::string& s) : m_text(s) {} /// \brief return the text content virtual std::string str() const { return m_text; } /// \brief return the text content, same as str() virtual std::string get_text() const { return m_text; } /// \brief set the text content virtual void set_text(const std::string& text) { m_text = text; } protected: std::string m_text; }; // -------------------------------------------------------------------- /// A node containing a XML comment class comment : public node_with_text { public: comment() {} comment(comment&& c) noexcept : node_with_text(std::move(c.m_text)){} comment(const std::string& text) : node_with_text(text) {} /// \brief compare nodes for equality virtual bool equals(const node* n) const; virtual node* clone() const; virtual node* move(); protected: virtual void write(std::ostream& os, format_info fmt) const; }; // -------------------------------------------------------------------- /// A node containing a XML processing instruction (like e.g. \) class processing_instruction : public node_with_text { public: processing_instruction() {} processing_instruction(processing_instruction&& pi) noexcept : node_with_text(std::move(pi.m_text)) , m_target(std::move(pi.m_target)) {} /// \brief constructor with parameters /// /// This constructs a processing instruction with the specified parameters /// \param target The target, this will follow the /// \param text The text inside this node, e.g. the PHP code. processing_instruction(const std::string& target, const std::string& text) : node_with_text(text), m_target(target) {} /// \brief return the qname which is the same as the target in this case virtual std::string get_qname() const { return m_target; } /// \brief return the target std::string get_target() const { return m_target; } /// \brief set the target void set_target(const std::string& target) { m_target = target; } /// \brief compare nodes for equality virtual bool equals(const node* n) const; virtual node* clone() const; virtual node* move(); protected: virtual void write(std::ostream& os, format_info fmt) const; private: std::string m_target; }; // -------------------------------------------------------------------- /// A node containing text. class text : public node_with_text { public: text() {} text(text&& t) noexcept : node_with_text(std::move(t.m_text)) {} text(const std::string& text) : node_with_text(text) {} /// \brief append \a text to the stored text void append(const std::string& text) { m_text.append(text); } /// \brief compare nodes for equality virtual bool equals(const node* n) const; /// \brief returns true if this text contains only whitespace characters bool is_space() const; virtual node* clone() const; virtual node* move(); protected: virtual void write(std::ostream& os, format_info fmt) const; }; // -------------------------------------------------------------------- /// A node containing the contents of a CDATA section. Normally, these nodes are /// converted to text nodes but you can specify to preserve them when parsing a /// document. class cdata : public text { public: cdata() {} cdata(cdata&& cd) noexcept : text(std::move(cd)) {} cdata(const std::string& s) : text(s) {} /// \brief compare nodes for equality virtual bool equals(const node* n) const; virtual node* clone() const; virtual node* move(); protected: virtual void write(std::ostream& os, format_info fmt) const; }; // -------------------------------------------------------------------- /// An attribute is a node, has an element as parent, but is not a child of this parent (!) class attribute : public node { public: friend class element; using parent_type = element; attribute(const attribute& attr) : node(), m_qname(attr.m_qname), m_value(attr.m_value), m_id(attr.m_id) {} attribute(attribute&& attr) noexcept : node(), m_qname(std::move(attr.m_qname)), m_value(std::move(attr.m_value)), m_id(attr.m_id) {} attribute(const std::string& qname, const std::string& value, bool id = false) : m_qname(qname), m_value(value), m_id(id) {} attribute& operator=(attribute&& attr) noexcept { std::swap(m_qname, attr.m_qname); std::swap(m_value, attr.m_value); m_id = attr.m_id; return *this; } bool operator==(const attribute& a) const { return m_qname == a.m_qname and m_value == a.m_value; } bool operator!=(const attribute& a) const { return not operator==(a); } bool operator<(const attribute& ns) const { return m_qname < ns.m_qname; } virtual std::string get_qname() const { return m_qname; } virtual void set_qname(const std::string& qn) { m_qname = qn; } virtual void set_qname(const std::string& prefix, const std::string& name) { node::set_qname(prefix, name); } /// \brief Is this attribute an xmlns attribute? bool is_namespace() const { return m_qname.compare(0, 5, "xmlns") == 0 and (m_qname[5] == 0 or m_qname[5] == ':'); } std::string value() const { return m_value; } void value(const std::string& v) { m_value = v; } /// \brief same as value, but checks to see if this really is a namespace attribute std::string uri() const; virtual std::string str() const { return m_value; } virtual void set_text(const std::string& value) { m_value = value; } /// \brief compare nodes for equality virtual bool equals(const node* n) const; /// \brief returns whether this attribute is an ID attribute, as defined in an accompanying DTD virtual bool is_id() const { return m_id; } /// \brief support for structured binding template decltype(auto) get() const { if constexpr (N == 0) return name(); else if constexpr (N == 1) return value(); } void swap(attribute& a) { std::swap(m_qname, a.m_qname); std::swap(m_value, a.m_value); } virtual node* clone() const; virtual node* move(); protected: virtual void write(std::ostream& os, format_info fmt) const; private: std::string m_qname, m_value; bool m_id; }; // -------------------------------------------------------------------- /// \brief generic iterator class. /// /// We can have iterators that point to nodes, elements and attributes. /// Iterating over nodes is simply following next/prev. But iterating /// elements is a bit more difficult, since you then have to skip nodes /// in between that are not an element, like comments or text. template> class iterator_impl { public: friend class element; template friend class basic_node_list; template friend class iterator_impl; friend class node_list; using node_type = NodeType; using container_node_type = std::remove_cv_t; using container_type = basic_node_list; using iterator_category = std::bidirectional_iterator_tag; using value_type = node_type; using difference_type = std::ptrdiff_t; using pointer = value_type*; using reference = value_type&; iterator_impl() = default; iterator_impl(const iterator_impl& i) = default; /// \brief copy constructor, kind of template iterator_impl(const iterator_impl& i) : m_container(i.m_container) , m_current(i.m_current) , m_at_end(i.m_at_end) { skip(); if (m_current == nullptr) m_at_end = true; } /// \brief create iterator pointing to begin of parent element iterator_impl(const container_type& container) : m_container(&container), m_at_end(false) { m_current = m_container->m_head; skip(); m_at_end = m_current == nullptr; } /// \brief create iterator pointing to end of parent element iterator_impl(const container_type& container, node_type* current) : m_container(&container), m_current(const_cast*>(current)), m_at_end(true) { assert(current == nullptr or dynamic_cast(current) != nullptr); #if DEBUG if (m_current != nullptr) { const node* n; for (n = m_container->m_head; n != nullptr; n = n->next()) { if (n == m_current) break; } assert(n == current); } #endif } /// \brief constructor taking a node pointer iterator_impl(node_type* current) : m_container(¤t->parent()->nodes()) , m_current(const_cast*>(current)) , m_at_end(current == nullptr) { assert(current == nullptr or dynamic_cast(current) != nullptr); #if DEBUG if (m_current != nullptr) { const node* n; for (n = m_container->m_head; n != nullptr; n = n->next()) { if (n == m_current) break; } assert(n == current); } #endif } iterator_impl(iterator_impl&& i) noexcept : m_container(i.m_container) , m_current(i.m_current) , m_at_end(i.m_at_end) { i.m_container = nullptr; i.m_current = nullptr; i.m_at_end = true; } template, element> and std::is_base_of_v, int> = 0> iterator_impl(const Iterator& i) : m_container(const_cast(i.m_container)) , m_current(i.m_current) , m_at_end(i.m_at_end) {} iterator_impl& operator=(const iterator_impl& i) { if (this != &i) { m_container = i.m_container; m_current = i.m_current; m_at_end = i.m_at_end; } return *this; } iterator_impl& operator=(iterator_impl&& i) noexcept { if (this != &i) { m_container = i.m_container; i.m_container = nullptr; m_current = i.m_current; i.m_current = nullptr; m_at_end = i.m_at_end; i.m_at_end = true; } return *this; } template, int> = 0> iterator_impl& operator=(const Iterator& i) { m_container = i.m_container; m_current = i.m_current; m_at_end = i.m_at_end; return *this; } reference operator*() { return *current(); } pointer operator->() const { return current(); } iterator_impl& operator++() { if (not m_at_end and m_current == nullptr and m_container != nullptr) m_current = m_container->m_head; else if (m_current != nullptr) { m_current = m_current->next(); skip(); } m_at_end = m_current == nullptr; return *this; } iterator_impl operator++(int) { iterator_impl iter(*this); operator++(); return iter; } iterator_impl& operator--() { if (m_container != nullptr) { if (m_at_end) { m_current = m_container->m_tail; m_at_end = false; } else { while (m_current != nullptr) { m_current = m_current->prev(); if (dynamic_cast(m_current) != nullptr) break; } } } return *this; } iterator_impl operator--(int) { iterator_impl iter(*this); operator--(); return iter; } bool operator==(const iterator_impl& other) const { return m_container == other.m_container and m_at_end == other.m_at_end and m_current == other.m_current; } bool operator!=(const iterator_impl& other) const { return not operator==(other); } template bool operator==(const RNodeType* n) const { return m_current == n; } template bool operator!=(const RNodeType n) const { return m_current != n; } iterator_impl& operator+=(difference_type i) { if (i > 0) while (i-- > 0) operator++(); else while (i++ < 0) operator--(); return *this; } iterator_impl& operator-=(difference_type i) { operator+=(-i); return *this; } iterator_impl operator+(difference_type i) const { auto result = *this; result += i; return result; } friend iterator_impl operator+(difference_type i, const iterator_impl& iter) { auto result = iter; result += i; return result; } iterator_impl operator-(difference_type i) const { auto result = *this; result -= i; return result; } friend iterator_impl operator-(difference_type i, const iterator_impl& iter) { auto result = iter; result -= i; return result; } difference_type operator-(const iterator_impl& other) const { return std::distance(*this, other); } operator pointer() const { return current(); } operator pointer() { return current(); } private: // node_type* current() { return dynamic_cast(m_current); } node_type* current() const { return dynamic_cast(m_current); } inline void skip() {} const container_type* m_container = nullptr; node* m_current = nullptr; bool m_at_end = true; }; template<> void iterator_impl::skip(); template<> void iterator_impl::skip(); // -------------------------------------------------------------------- /// \brief basic_node_list, a base class for containers of nodes /// /// We have two container classes (node_list specializations) /// One is for attributes and name_spaces. The other is the /// node_list for nodes in elements. However, this list can /// present itself as node_list for elements hiding all other /// node types. template class basic_node_list { public: template friend class iterator_impl; friend class element; using node_type = NodeType; // element is a container of elements using value_type = node_type; using allocator_type = std::allocator; using size_type = size_t; using difference_type = ptrdiff_t; using reference = value_type&; using const_reference = const value_type&; using pointer = value_type*; using const_pointer = const value_type*; protected: basic_node_list(element& e) : m_element(e), m_head(nullptr), m_tail(nullptr) { } public: virtual ~basic_node_list() { delete m_head; } bool operator==(const basic_node_list& l) const { bool result = true; auto a = begin(), b = l.begin(); for (; result and a != end() and b != l.end(); ++a, ++b) result = a->equals(b.current()); return result and a == end() and b == l.end(); } bool operator!=(const basic_node_list& l) const { return not operator==(l); } using iterator = iterator_impl; using const_iterator = iterator_impl; iterator begin() { return iterator(*this); } iterator end() { return iterator(*this, nullptr); } const_iterator cbegin() { return const_iterator(*this); } const_iterator cend() { return const_iterator(*this, nullptr); } const_iterator begin() const { return const_iterator(*this); } const_iterator end() const { return const_iterator(*this, nullptr); } value_type& front() { return *begin(); } const value_type& front() const { return *begin(); } value_type& back() { auto tmp = end(); --tmp; return *tmp; } const value_type& back() const { auto tmp = end(); --tmp; return *tmp; } bool empty() const { return m_head == nullptr; } size_t size() const { return std::distance(begin(), end()); } void clear() { delete m_head; m_head = m_tail = nullptr; } void swap(basic_node_list& l) noexcept { std::swap(m_head, l.m_head); std::swap(m_tail, l.m_tail); for (auto& n: *this) n.m_parent = &m_element; for (auto& n: l) n.m_parent = &l.m_element; } /// \brief sort the (direct) nodes in this list using \a comp as comparator template void sort(Compare comp) { for (auto a = begin(); a + 1 != end(); ++a) { for (auto b = a + 1; b != end(); ++b) { if (comp(*b, *a)) a->swap(*b); } } } protected: // proxy methods for every insertion iterator insert_impl(const_iterator pos, node_type* n) { assert(n != nullptr); assert(n->next() == nullptr); assert(n->prev() == nullptr); // assert(&pos.m_container == this); if (n == nullptr) throw exception("Invalid pointer passed to insert"); if (n->parent() != nullptr or n->next() != nullptr or n->prev() != nullptr) throw exception("attempt to add a node that already has a parent or siblings"); n->parent(&m_element); // insert at end, most often this is the case if (pos.m_current == nullptr) { if (m_head == nullptr) m_tail = m_head = n; else { m_tail->insert_sibling(n, nullptr); m_tail = n; } } else { assert(m_head != nullptr); if (pos.m_current == m_head) { n->m_next = m_head; m_head->m_prev = n; m_head = n; } else m_head->insert_sibling(n, pos.m_current); } // #if defined(DEBUG) // validate(); // #endif return iterator(*this, n); } iterator erase_impl(const_iterator pos) { if (pos == cend()) return pos; if (pos->m_parent != &m_element) throw exception("attempt to remove node whose parent is invalid"); node_type* n = const_cast(&*pos); node_type* cur; if (m_head == n) { m_head = static_cast(m_head->m_next); if (m_head != nullptr) m_head->m_prev = nullptr; else m_tail = nullptr; n->m_next = n->m_prev = n->m_parent = nullptr; delete n; cur = m_head; } else { cur = static_cast(n->m_next); if (m_tail == n) m_tail = static_cast(n->m_prev); node* p = m_head; while (p != nullptr and p->m_next != n) p = p->m_next; if (p != nullptr and p->m_next == n) { p->m_next = n->m_next; if (p->m_next != nullptr) p->m_next->m_prev = p; n->m_next = n->m_prev = n->m_parent = nullptr; } else throw exception("remove for a node not found in the list"); delete n; } // #if defined(DEBUG) // validate(); // #endif return iterator(*this, cur); } private: element& m_element; node_type* m_head = nullptr; node_type* m_tail = nullptr; }; // -------------------------------------------------------------------- /// \brief implementation of basic_node_list for node objects class node_list : public basic_node_list { public: using basic_list = basic_node_list; using iterator = typename basic_list::iterator; using const_iterator = typename basic_list::const_iterator; node_list(element& e) : basic_list(e) { } node_list(element& e, const node_list& l) : basic_list(e) { for (auto& n: l) emplace_back(n); } node_list(element& e, node_list&& l) : basic_list(e) { for (auto&& n: l) emplace_back(std::move(n)); } using basic_list::clear; using basic_list::begin; using basic_list::end; node_list& operator=(const node_list& l) { if (this != &l) { clear(); for (auto& n: l) emplace_back(n); } return *this; } node_list& operator=(node_list&& l) noexcept { if (this != &l) { clear(); swap(l); } return *this; } bool operator==(const node_list& l) const { bool result = true; auto a = begin(), b = l.begin(); for (; result and a != end() and b != l.end(); ++a, ++b) result = a->equals(b.current()); return result and a == end() and b == l.end(); } bool operator!=(const node_list& l) const { return not operator==(l); } // insert a copy of e void insert(const_iterator pos, const node& e) { insert_impl(pos, e.clone()); } // insert a copy of e, moving its data void insert(const_iterator pos, node&& e) { insert_impl(pos, e.move()); } // iterator insert(const_iterator pos, size_t count, const value_type& n); template iterator insert(const_iterator pos, InputIter first, InputIter last) { for (auto i = first; i != last; ++i, ++pos) insert(pos, i->clone()); return pos; } template iterator insert(const_iterator pos, std::initializer_list nodes) { for (auto& n: nodes) pos = insert_impl(pos, n.move()); return pos; } iterator emplace(const_iterator pos, const node& n) { auto i = insert_impl(pos, n.clone()); return iterator(*this, i); } iterator emplace(const_iterator pos, node&& n) { auto i = insert_impl(pos, n.move()); return iterator(*this, i); } iterator erase(const_iterator pos) { return erase_impl(pos); } iterator erase(iterator first, iterator last) { while (first != last) { auto next = first; ++next; erase(first); first = next; } return last; } // iterator erase(const_iterator first, const_iterator last); void push_front(const node& e) { emplace(begin(), e); } void push_front(node&& e) { emplace(begin(), std::forward(e)); } template node& emplace_front(Args&&... args) { return *emplace(begin(), std::forward(args)...); } void pop_front() { erase(begin()); } void push_back(const node& e) { emplace(end(), e); } void push_back(node&& e) { emplace(end(), std::forward(e)); } template, int> = 0> ENodeType& emplace_back(const ENodeType& n) { auto i = insert_impl(end(), static_cast(n.clone())); return static_cast(*i); } template, int> = 0> ENodeType& emplace_back(ENodeType&& n) { auto i = insert_impl(end(), static_cast(n.move())); return static_cast(*i); } template node& emplace_back(Args&&... args) { return *emplace(end(), std::forward(args)...); } void pop_back() { erase(std::prev(end())); } }; // -------------------------------------------------------------------- /// \brief set of attributes and name_spaces. Is a node_list but with a set interface class attribute_set : public basic_node_list { public: using node_list = basic_node_list; using node_type = typename node_list::node_type; using iterator = typename node_list::iterator; using const_iterator = typename node_list::const_iterator; using size_type = std::size_t; attribute_set(element& e) : node_list(e) {} attribute_set(element& e, attribute_set&& as) : node_list(e) { for (auto& a: as) emplace(std::move(a)); } attribute_set(element& e, const attribute_set& as) : node_list(e) { for (auto& a: as) emplace(a); } using node_list::clear; attribute_set& operator=(const attribute_set& l) { if (this != &l) { clear(); for (auto& n: l) emplace(n); } return *this; } attribute_set& operator=(attribute_set&& l) noexcept { if (this != &l) { clear(); swap(l); } return *this; } /// \brief attribute_set is a bit like a std::map and the key type is a std::string using key_type = std::string; /// \brief return true if the attribute with name \a key is defined bool contains(const key_type& key) const { return find(key) != nullptr; } /// \brief return const_iterator to the attribute with name \a key const_iterator find(const key_type& key) const { const node_type* result = nullptr; for (auto& a: *this) { if (a.get_qname() == key) { result = &a; break; } } return const_iterator(*this, result); } /// \brief return iterator to the attribute with name \a key iterator find(const key_type& key) { return const_cast(*this).find(key); } /// \brief emplace a newly constructed attribute with argumenst \a args template std::pair emplace(Args... args) { node_type a(std::forward(args)...); return emplace(std::move(a)); } /// \brief emplace an attribute move constructed from \a a /// \return returns a std::pair with an iterator pointing to the inserted attribute /// and a boolean indicating if this attribute was inserted instead of replaced. std::pair emplace(node_type&& a) { key_type key = a.get_qname(); bool inserted = false; auto i = find(key); if (i != node_list::end()) *i = std::move(a); // move assign value of a else { i = node_list::insert_impl(node_list::end(), static_cast(a.move())); inserted = true; } return std::make_pair(i, inserted); } /// \brief remove attribute at position \a pos iterator erase(const_iterator pos) { return node_list::erase_impl(pos); } /// \brief remove attributes between \a first and \a last iterator erase(iterator first, iterator last) { while (first != last) { auto next = first; ++next; erase(first); first = next; } return last; } /// \brief remove attribute with name \a key size_type erase(const key_type key) { size_type result = 0; auto i = find(key); if (i != node_list::end()) { erase(i); result = 1; } return result; } }; // -------------------------------------------------------------------- /// \brief the element class modelling a XML element /// /// element is the most important zeep::xml::node object. It encapsulates a /// XML element as found in the XML document. It has a qname, can have children, /// attributes and a namespace. class element : public node { public: template friend class iterator_impl; template friend class basic_node_list; friend class node_list; friend class node; // element is a container of elements using value_type = element; using allocator_type = std::allocator; using size_type = size_t; using difference_type = ptrdiff_t; using reference = element&; using const_reference = const element&; using pointer = element*; using const_pointer = const element*; element(); element(const std::string& qname); /// \brief constructor taking a \a qname and a list of \a attributes element(const std::string& qname, std::initializer_list attributes); element(const element& e); element(element&& e); element& operator=(const element& e); element& operator=(element&& e); ~element(); using node::set_qname; virtual std::string get_qname() const { return m_qname; } virtual void set_qname(const std::string& qn) { m_qname = qn; } /// content of a xml:lang attribute of this element, or its nearest ancestor virtual std::string lang() const; /// content of the xml:id attribute, or the attribute that was defined to be /// of type ID by the DOCTYPE. std::string id() const; bool operator==(const element& e) const { return equals(&e); } bool operator!=(const element& e) const { return not equals(&e); } virtual bool equals(const node* n) const; void swap(element& e) noexcept; // -------------------------------------------------------------------- // children node_list& nodes() { return m_nodes; } const node_list& nodes() const { return m_nodes; } using iterator = iterator_impl; using const_iterator = iterator_impl; iterator begin() { return iterator(m_nodes.begin()); } iterator end() { return iterator(m_nodes.end()); } const_iterator begin() const { return const_iterator(m_nodes.begin()); } const_iterator end() const { return const_iterator(m_nodes.end()); } const_iterator cbegin() { return const_iterator(m_nodes.begin()); } const_iterator cend() { return const_iterator(m_nodes.end()); } element& front() { return *begin(); } const element& front() const { return *begin(); } element& back() { return *(end() - 1); } const element& back() const { return *(end() - 1); } using node_iterator = node_list::iterator; using const_node_iterator = node_list::const_iterator; /// \brief insert a copy of \a e void insert(const_iterator pos, const element& e) { emplace(pos, e); } /// \brief insert a copy of \a e at position \a pos, moving its data void insert(const_iterator pos, element&& e) { emplace(pos, std::forward(e)); } // iterator insert(const_iterator pos, size_t count, const value_type& n); /// \brief insert copies of the nodes from \a first to \a last at position \a pos template iterator insert(const_iterator pos, InputIter first, InputIter last) { difference_type offset = pos - cbegin(); for (auto i = first; i != last; ++i, ++pos) insert(pos, *i); return begin() + offset; } /// \brief insert copies of the nodes in \a nodes at position \a pos iterator insert(const_iterator pos, std::initializer_list nodes) { return insert(pos, nodes.begin(), nodes.end()); } /// \brief insert the data of node \a n at position \a pos, using move semantics iterator emplace(const_iterator pos, text&& n) { return insert_impl(pos, new text(std::forward(n))); } /// \brief insert the data of node \a n at position \a pos, using move semantics iterator emplace(const_iterator pos, cdata&& n) { return insert_impl(pos, new cdata(std::forward(n))); } /// \brief insert the data of node \a n at position \a pos, using move semantics iterator emplace(const_iterator pos, comment&& n) { return insert_impl(pos, new comment(std::forward(n))); } /// \brief insert the data of node \a n at position \a pos, using move semantics iterator emplace(const_iterator pos, processing_instruction&& n) { return insert_impl(pos, new processing_instruction(std::forward(n))); } /// \brief emplace a newly constructed element at \a pos using argument \a arg template inline iterator emplace(const_iterator pos, Arg&& arg) { static_assert( std::is_same_v, element> or not std::is_base_of_v, "Use the nodes() member of element to add nodes other than element"); return insert_impl(pos, new element(std::forward(arg))); } /// \brief emplace a newly constructed element at \a pos using arguments \a args template inline iterator emplace(const_iterator pos, Args&&... args) { return insert_impl(pos, new element(std::forward(args)...)); } /// \brief emplace a newly constructed element at \a pos using name \a name and attributes \a attrs inline iterator emplace(const_iterator pos, const std::string& name, std::initializer_list attrs) { return insert_impl(pos, new element(name, std::forward>(attrs))); } /// \brief emplace an element at the front using arguments \a args template inline element& emplace_front(Args&&... args) { return *emplace(begin(), std::forward(args)...); } /// \brief emplace a newly constructed element at the front using name \a name and attributes \a attrs inline element& emplace_front(const std::string& name, std::initializer_list attrs) { return *emplace(begin(), name, std::forward>(attrs)); } /// \brief emplace an element at the back using arguments \a args template inline element& emplace_back(Args&&... args) { return *emplace(end(), std::forward(args)...); } /// \brief emplace a newly constructed element at the back using name \a name and attributes \a attrs inline element& emplace_back(const std::string& name, std::initializer_list attrs) { return *emplace(end(), name, std::forward>(attrs)); } /// \brief erase the node at \a pos inline iterator erase(const_node_iterator pos) { return m_nodes.erase_impl(pos); } /// \brief erase the nodes from \a first to \a last iterator erase(iterator first, iterator last) { while (first != last) { auto next = first; ++next; erase(first); first = next; } return last; } /// \brief erase the first node inline void pop_front() { erase(begin()); } /// \brief erase the last node inline void pop_back() { erase(end() - 1); } /// \brief move the element \a e to the front of this element. inline void push_front(element&& e) { emplace(begin(), std::forward(e)); } /// \brief copy the element \a e to the front of this element. inline void push_front(const element& e) { emplace(begin(), e); } /// \brief move the element \a e to the back of this element. inline void push_back(element&& e) { emplace(end(), std::forward(e)); } /// \brief copy the element \a e to the back of this element. inline void push_back(const element& e) { emplace(end(), e); } /// \brief remove all nodes void clear(); size_t size() const { return std::distance(begin(), end()); } bool empty() const { return size() == 0; } // -------------------------------------------------------------------- // attribute support /// \brief return the set of attributes for this element attribute_set& attributes() { return m_attributes; } /// \brief return the set of attributes for this element const attribute_set& attributes() const { return m_attributes; } // -------------------------------------------------------------------- /// \brief write the element to \a os friend std::ostream& operator<<(std::ostream& os, const element& e); friend class document; /// \brief will return the concatenation of str() from all child nodes virtual std::string str() const; /// \brief return the URI of the namespace for \a prefix virtual std::string namespace_for_prefix(const std::string& prefix) const; /// \brief return the prefix for the XML namespace with uri \a uri. /// \return The result is a pair of a std::string containing the actual prefix value /// and a boolean indicating if the namespace was found at all, needed since empty prefixes /// are allowed. virtual std::pair prefix_for_namespace(const std::string& uri) const; /// \brief move this element and optionally everyting beneath it to the /// specified namespace/prefix /// /// \param prefix The new prefix name /// \param uri The new namespace uri /// \param recursive Apply this to the child nodes as well /// \param including_attributes Move the attributes to this new namespace as well void move_to_name_space(const std::string& prefix, const std::string& uri, bool recursive, bool including_attributes); /// \brief return the concatenation of the content of all enclosed zeep::xml::text nodes std::string get_content() const; /// \brief replace all existing child text nodes with a new single text node containing \a content void set_content(const std::string& content); /// \brief return the value of attribute name \a qname or the empty string if not found std::string get_attribute(const std::string& qname) const; /// \brief set the value of attribute named \a qname to the value \a value void set_attribute(const std::string& qname, const std::string& value); /// \brief The set_text method replaces any text node with the new text (call set_content) virtual void set_text(const std::string& s); /// The add_text method checks if the last added child is a text node, /// and if so, it appends the string to this node's value. Otherwise, /// it adds a new text node child with the new text. void add_text(const std::string& s); /// To combine all adjecent child text nodes into one void flatten_text(); /// xpath wrappers /// TODO: create recursive iterator and use it as return type here /// \brief return the elements that match XPath \a path. /// /// If you need to find other classes than xml::element, of if your XPath /// contains variables, you should create a zeep::xml::xpath object and use /// its evaluate method. element_set find(const std::string& path) const { return find(path.c_str()); } /// \brief return the first element that matches XPath \a path. /// /// If you need to find other classes than xml::element, of if your XPath /// contains variables, you should create a zeep::xml::xpath object and use /// its evaluate method. element* find_first(const std::string& path) const { return find_first(path.c_str()); } /// \brief return the elements that match XPath \a path. /// /// If you need to find other classes than xml::element, of if your XPath /// contains variables, you should create a zeep::xml::xpath object and use /// its evaluate method. element_set find(const char* path) const; /// \brief return the first element that matches XPath \a path. /// /// If you need to find other classes than xml::element, of if your XPath /// contains variables, you should create a zeep::xml::xpath object and use /// its evaluate method. element* find_first(const char* path) const; // debug routine virtual void validate(); protected: virtual node* clone() const; virtual node* move(); virtual void write(std::ostream& os, format_info fmt) const; // bottleneck to validate insertions (e.g. document may have only one child element) virtual node_iterator insert_impl(const_iterator pos, node* n) { return m_nodes.insert_impl(pos, n); } private: std::string m_qname; node_list m_nodes; attribute_set m_attributes; }; // -------------------------------------------------------------------- template<> inline void iterator_impl::skip() { while (m_current != nullptr) { if (dynamic_cast(m_current) != nullptr) break; m_current = m_current->next(); } } template<> inline void iterator_impl::skip() { while (m_current != nullptr) { if (dynamic_cast(m_current) != nullptr) break; m_current = m_current->next(); } } // -------------------------------------------------------------------- /// \brief This method fixes namespace attribute when transferring an element /// from one document to another (replaces prefixes e.g.) /// /// When moving an element from one document to another, we need to fix the /// namespaces, make sure the destination has all the namespace specifications /// required by the element and make sure the prefixes used are correct. /// \param e The element that is being transferred /// \param source The (usually) document element that was the source /// \param dest The (usually) document element that is the destination void fix_namespaces(element& e, element& source, element& dest); } // namespace zeep::xml // -------------------------------------------------------------------- // structured binding support namespace std { template<> struct tuple_size<::zeep::xml::attribute> : public std::integral_constant {}; template<> struct tuple_element<0, ::zeep::xml::attribute> { using type = decltype(std::declval<::zeep::xml::attribute>().name()); }; template<> struct tuple_element<1, ::zeep::xml::attribute> { using type = decltype(std::declval<::zeep::xml::attribute>().value()); }; // template // struct tuple_element // { // public: // using type = decltype(std::declval<::zeep::xml2::detail::attribute>().get()); // }; } libzeep-5.1.7/include/zeep/xml/parser.hpp0000664000175000017500000001110114176701531020212 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the libzeep XML parser, a recursive descent parser #include #include #include #include #include #include namespace zeep::xml { namespace detail { struct attr { std::string m_ns; std::string m_name; std::string m_value; bool m_id; // whether the attribute is defined as type ID in its ATTLIST decl }; } // namespace detail /// If an invalid_exception is thrown, it means the XML document is not valid: it does /// not conform the DTD specified in the XML document. /// This is only thrown when validation is enabled. /// /// The what() member of the exception object will contain an explanation. class invalid_exception : public zeep::exception { public: invalid_exception(const std::string& msg) : exception(msg) {} ~invalid_exception() throw() {} }; /// If an not_wf_exception is thrown, it means the XML document is not well formed. /// Often this means syntax errors, missing \< or \> characters, non matching open /// and close tags, etc. /// /// The what() member of the exception object will contain an explanation. class not_wf_exception : public zeep::exception { public: not_wf_exception(const std::string& msg) : exception(msg) {} ~not_wf_exception() throw() {} }; /// zeep::xml::parser is a SAX parser. After construction, you should assign /// call back handlers for the SAX events and then call parse(). class parser { public: using attr_type = detail::attr; using attr_list_type = std::list; parser(std::istream& is); parser(const std::string& s); virtual ~parser(); std::function xml_decl_handler; std::function start_element_handler; std::function end_element_handler; std::function character_data_handler; std::function processing_instruction_handler; std::function comment_handler; std::function start_cdata_section_handler; std::function end_cdata_section_handler; std::function start_namespace_decl_handler; std::function end_namespace_decl_handler; std::function doctype_decl_handler; std::function notation_decl_handler; std::functionexternal_entity_ref_handler; std::function report_invalidation_handler; void parse(bool validate, bool validate_ns); protected: friend struct parser_imp; virtual void xml_decl(encoding_type encoding, bool standalone, float version); virtual void doctype_decl(const std::string& root, const std::string& publicId, const std::string& uri); virtual void start_element(const std::string& name, const std::string& uri, const attr_list_type& atts); virtual void end_element(const std::string& name, const std::string& uri); virtual void character_data(const std::string& data); virtual void processing_instruction(const std::string& target, const std::string& data); virtual void comment(const std::string& data); virtual void start_cdata_section(); virtual void end_cdata_section(); virtual void start_namespace_decl(const std::string& prefix, const std::string& uri); virtual void end_namespace_decl(const std::string& prefix); virtual void notation_decl(const std::string& name, const std::string& systemId, const std::string& publicId); virtual void report_invalidation(const std::string& msg); virtual std::istream* external_entity_ref(const std::string& base, const std::string& pubid, const std::string& uri); struct parser_imp *m_impl; std::istream *m_istream; }; } // namespace zeep::xml libzeep-5.1.7/include/zeep/xml/serialize.hpp0000664000175000017500000004156214176701531020723 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the serializer classes used to (de-)serialize XML data. #include #include #include #include #include #include #include #include namespace zeep::xml { struct serializer; struct deserializer; template struct element_nvp : public name_value_pair { explicit element_nvp(const char* name, T& v) : name_value_pair(name, v) {} element_nvp(const element_nvp& rhs) : name_value_pair(rhs) {} }; template struct attribute_nvp : public name_value_pair { explicit attribute_nvp(const char* name, T& v) : name_value_pair(name, v) {} attribute_nvp(const attribute_nvp& rhs) : name_value_pair(rhs) {} }; template inline element_nvp make_element_nvp(const char* name, T& v) { return element_nvp(name, v); } template inline attribute_nvp make_attribute_nvp(const char* name, T& v) { return attribute_nvp(name, v); } #define ZEEP_ELEMENT_NAME_VALUE(name) zeep::xml::make_element_nvp(#name, name) #define ZEEP_ATTRIBUTE_NAME_VALUE(name) zeep::xml::make_attribute_nvp(#name, name) /// serializer, deserializer and schema_creator are classes that can be used /// to initiate the serialization. They are the Archive classes that are /// the first parameter to the templated function 'serialize' in the classes /// that can be serialized. (See boost::serialization for more info). /// serializer is the class that initiates the serialization process. struct serializer { serializer(element& node) : m_node(node) {} template serializer& operator&(const name_value_pair& rhs) { return serialize_element(rhs.name(), rhs.value()); } template serializer& operator&(const element_nvp& rhs) { return serialize_element(rhs.name(), rhs.value()); } template serializer& operator&(const attribute_nvp& rhs) { return serialize_attribute(rhs.name(), rhs.value()); } template serializer& serialize_element(const T& data); template serializer& serialize_element(const char* name, const T& data); template serializer& serialize_attribute(const char* name, const T& data); element& m_node; }; /// deserializer is the class that initiates the deserialization process. struct deserializer { deserializer(const element& node) : m_node(node) {} template deserializer& operator&(const name_value_pair& rhs) { return deserialize_element(rhs.name(), rhs.value()); } template deserializer& operator&(const element_nvp& rhs) { return deserialize_element(rhs.name(), rhs.value()); } template deserializer& operator&(const attribute_nvp& rhs) { return deserialize_attribute(rhs.name(), rhs.value()); } template deserializer& deserialize_element(T& data); template deserializer& deserialize_element(const char* name, T& data); template deserializer& deserialize_attribute(const char* name, T& data); const element& m_node; }; using type_map = std::map; /// schema_creator is used by zeep::dispatcher to create schema files. struct schema_creator { schema_creator(type_map& types, element& node) : m_node(node), m_types(types) {} template schema_creator& operator&(const name_value_pair& rhs) { return add_element(rhs.name(), rhs.value()); } template schema_creator& operator&(const element_nvp& rhs) { return add_element(rhs.name(), rhs.value()); } template schema_creator& operator&(const attribute_nvp& rhs) { return add_attribute(rhs.name(), rhs.value()); } template schema_creator& add_element(const char* name, const T& value); template schema_creator& add_attribute(const char* name, const T& value); element& m_node; type_map& m_types; std::string m_prefix = "ns"; }; // -------------------------------------------------------------------- template struct type_serializer { using value_type = typename std::remove_const_t>; using value_serializer_type = value_serializer; static constexpr const char* type_name() { return value_serializer_type::type_name(); } static std::string serialize_value(const T& value) { return value_serializer_type::to_string(value); } static T deserialize_value(const std::string& value) { return value_serializer_type::from_string(value); } static void serialize_child(element& n, const char* name, const value_type& value) { assert(name); if (strlen(name) == 0 or strcmp(name, ".") == 0) n.set_content(value_serializer_type::to_string(value)); else n.emplace_back(name).set_content(value_serializer_type::to_string(value)); } static void deserialize_child(const element& n, const char* name, value_type& value) { assert(name); value = {}; if (strlen(name) == 0 or strcmp(name, ".") == 0) value = value_serializer_type::from_string(n.get_content()); else { auto e = std::find_if(n.begin(), n.end(), [name](auto& e) { return e.name() == name; }); if (e != n.end()) value = value_serializer_type::from_string(e->get_content()); } } static element schema(const std::string& name, const std::string& prefix) { return { "xsd:element", { { "name", name }, { "type", prefix + ':' + type_name() }, { "minOccurs", "1" }, { "maxOccurs", "1" } } }; } static void register_type(type_map& types) { } }; template struct type_serializer { using value_type = std::remove_cv_t>; using type_serializer_type = type_serializer; static constexpr const char* type_name() { return type_serializer_type::type_name(); } static void serialize_child(element& n, const char* name, const value_type(&value)[N]) { assert(name); for (const value_type& v : value) type_serializer_type::serialize_child(n, name, v); } static void deserialize_child(const element& n, const char* name, value_type(&value)[N]) { assert(name); size_t ix = 0; for (auto& e: n) { if (e.name() != name) continue; value_type v = {}; type_serializer_type::deserialize_child(e, ".", v); value[ix] = std::move(v); ++ix; if (ix >= N) break; } } static element schema(const std::string& name, const std::string& prefix) { element result = type_serializer_type::schema(name, prefix); result.set_attribute("minOccurs", std::to_string(N)); result.set_attribute("maxOccurs", std::to_string(N)); return result; } static void register_type(type_map& types) { type_serializer_type::register_type(types); } }; template struct type_serializer>> : public value_serializer { using value_type = T; using value_serializer_type = value_serializer; using value_serializer_type::type_name; static std::string serialize_value(const T& value) { return value_serializer_type::to_string(value); } static T deserialize_value(const std::string& value) { return value_serializer_type::from_string(value); } static void serialize_child(element& n, const char* name, const value_type& value) { assert(name); if (strlen(name) == 0 or strcmp(name, ".") == 0) n.set_content(value_serializer_type::to_string(value)); else n.emplace_back(name).set_content(value_serializer_type::to_string(value)); } static void deserialize_child(const element& n, const char* name, value_type& value) { assert(name); value = value_type(); if (std::strlen(name) == 0 or std::strcmp(name, ".") == 0) value = value_serializer_type::from_string(n.get_content()); else { auto e = std::find_if(n.begin(), n.end(), [name](auto& e) { return e.name() == name; }); if (e != n.end()) value = value_serializer_type::from_string(e->get_content()); } } static element schema(const std::string& name, const std::string& prefix) { return { "xsd:element", { { "name", name }, { "type", prefix + ':' + type_name() }, { "minOccurs", "1" }, { "maxOccurs", "1" } } }; } static void register_type(type_map& types) { element n("xsd:simpleType", { { "name", type_name() } }); element restriction("xsd:restriction", { { "base", "xsd:string" } }); for (auto& e: value_serializer_type::instance().m_name_mapping) { restriction.emplace_back( "xsd:enumeration", { { "value", e.second } }); } n.emplace_back(std::move(restriction)); types.emplace(type_name(), std::move(n)); } }; template struct type_serializer>> { using value_type = typename std::remove_const_t>; // the name of this type std::string m_type_name; static const char* type_name() { return instance().m_type_name.c_str(); } void type_name(const std::string& name) { m_type_name = name; } static type_serializer& instance() { static type_serializer s_instance{typeid(value_type).name()}; return s_instance; } static void serialize_child(element& n, const char* name, const value_type& value) { assert(name); if (strlen(name) == 0 or strcmp(name, ".") == 0) { serializer sr(n); const_cast(value).serialize(sr, 0Ul); } else { element& e = n.emplace_back(name); serializer sr(e); const_cast(value).serialize(sr, 0Ul); } } static void deserialize_child(const element& n, const char* name, value_type& value) { assert(name); value = value_type(); if (strlen(name) == 0 or strcmp(name, ".") == 0) { deserializer sr(n); value.serialize(sr, 0UL); } else { auto e = std::find_if(n.begin(), n.end(), [name](auto& e) { return e.name() == name; }); if (e != n.end()) { deserializer sr(*e); value.serialize(sr, 0UL); } } } static element schema(const std::string& name, const std::string& prefix) { return { "xsd:element", { { "name", name }, { "type", prefix + ':' + type_name() }, { "minOccurs", "1" }, { "maxOccurs", "1" } } }; } static void register_type(type_map& types) { element sequence("xsd:sequence"); schema_creator schema(types, sequence); value_type v; schema.add_element("type", v); element type("xsd:complexType"); type.emplace_back(std::move(sequence)); types.emplace(type_name(), std::move(type)); } }; template struct type_serializer> { using value_type = T; using container_type = std::optional; using type_serializer_type = type_serializer; static constexpr const char* type_name() { return type_serializer_type::type_name(); } static void serialize_child(element& n, const char* name, const container_type& value) { assert(name); if (value) type_serializer_type::serialize_child(n, name, *value); } static void deserialize_child(const element& n, const char* name, container_type& value) { assert(name); for (auto& e: n) { if (e.name() != name) continue; value_type v = {}; type_serializer_type::deserialize_child(e, ".", v); value.emplace(std::move(v)); } } static element schema(const std::string& name, const std::string& prefix) { return { "xsd:element", { { "name", name }, { "type", prefix + ':' + type_name() }, { "minOccurs", "0" }, { "maxOccurs", "1" } } }; } static void register_type(type_map& types) { type_serializer_type::register_type(types); } }; // nice trick to enforce order in template selection template struct priority_tag : priority_tag < N - 1 > {}; template<> struct priority_tag<0> {}; template struct type_serializer>> { using container_type = typename std::remove_const_t>; using value_type = value_type_t; using type_serializer_type = type_serializer; static constexpr const char* type_name() { return type_serializer_type::type_name(); } static void serialize_child(element& n, const char* name, const container_type& value) { assert(name); for (const value_type& v : value) type_serializer_type::serialize_child(n, name, v); } template static auto deserialize_array(const element& n, const char* name, std::array& value, priority_tag<2>) { assert(name); size_t ix = 0; for (auto& e: n) { if (e.name() != name) continue; value_type v = {}; type_serializer_type::deserialize_child(e, ".", v); value[ix] = std::move(v); ++ix; if (ix >= N) break; } } template static auto deserialize_array(const element& n, const char* name, A& arr, priority_tag<1>) -> decltype( arr.reserve(std::declval()), void() ) { arr.reserve(n.size()); assert(name); for (auto& e: n) { if (e.name() != name) continue; value_type v = {}; type_serializer_type::deserialize_child(e, ".", v); arr.emplace_back(std::move(v)); } } static void deserialize_array(const element& n, const char* name, container_type& arr, priority_tag<0>) { assert(name); for (auto& e: n) { if (e.name() != name) continue; value_type v = {}; type_serializer_type::deserialize_child(e, ".", v); arr.emplace_back(std::move(v)); } } static void deserialize_child(const element& n, const char* name, container_type& value) { type_serializer::deserialize_array(n, name, value, priority_tag<2>{}); } }; // And finally, the implementation of serializer, deserializer and schema_creator. template serializer& serializer::serialize_element(const T& value) { using value_type = typename std::remove_const_t>; using type_serializer = type_serializer; type_serializer::serialize_child(m_node, "", value); return *this; } template serializer& serializer::serialize_element(const char* name, const T& value) { using value_type = typename std::remove_const_t>; using type_serializer = type_serializer; type_serializer::serialize_child(m_node, name, value); return *this; } template serializer& serializer::serialize_attribute(const char* name, const T& value) { using value_type = typename std::remove_const_t>; using type_serializer = type_serializer; m_node.attributes().emplace(name, type_serializer::serialize_value(value)); return *this; } template deserializer& deserializer::deserialize_element(T& value) { using value_type = typename std::remove_const_t>; using type_serializer = type_serializer; type_serializer::deserialize_child(m_node, "", value); return *this; } template deserializer& deserializer::deserialize_element(const char* name, T& value) { using value_type = typename std::remove_const_t>; using type_serializer = type_serializer; type_serializer::deserialize_child(m_node, name, value); return *this; } template deserializer& deserializer::deserialize_attribute(const char* name, T& value) { using value_type = typename std::remove_const_t>; using type_serializer = type_serializer; std::string attr = m_node.get_attribute(name); if (not attr.empty()) value = type_serializer::deserialize_value(attr); return *this; } template schema_creator& schema_creator::add_element(const char* name, const T& value) { using value_type = typename std::remove_const_t>; using type_serializer = type_serializer; m_node.emplace(type_serializer::schema(name, m_prefix)); std::string type_name = type_serializer::type_name(); // might be known already if (m_types.find(type_name) == m_types.end()) type_serializer::register_type(m_types); return *this; } template schema_creator& schema_creator::add_attribute(const char* name, const T& value) { using value_type = typename std::remove_const_t>; using type_serializer = type_serializer; std::string type_name = type_serializer::type_name(); assert(m_node.parent() != nullptr); m_node.parent()->emplace_back( element("xsd:attribute", { { "name", name }, { "type", type_name } })); if (m_types.find(type_name) == m_types.end()) type_serializer::register_type(m_types); return *this; } } libzeep-5.1.7/include/zeep/xml/xpath.hpp0000664000175000017500000000446714176701531020063 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// definition of the zeep::xml::xpath class, implementing a XPath 1.0 compatible search facility #include #include namespace zeep::xml { class document; // -------------------------------------------------------------------- /// XPath's can contain variables. And variables can contain all kinds of data /// like strings, numbers and even node_sets. If you want to use variables, /// you can define a context, add your variables to it and then pass it on /// in the xpath::evaluate method. class context { public: context(); virtual ~context(); void set(const std::string& name, const std::string& value); void set(const std::string& name, double value); template or std::is_same_v, int> = 0> T get(const std::string& name); private: context(const context &); context& operator=(const context &); friend class xpath; struct context_imp* m_impl; }; // -------------------------------------------------------------------- /// The actual xpath implementation. It expects an xpath in the constructor and /// this path _must_ be UTF-8 encoded. class xpath { public: xpath(const std::string& path); xpath(const char* path); xpath(const xpath& rhs); xpath& operator=(const xpath &); virtual ~xpath(); /// evaluate returns a node_set. If you're only interested in zeep::xml::element /// results, you should call the evaluate() instantiation. template std::list evaluate(const node& root) const { context ctxt; return evaluate(root, ctxt); } /// The second evaluate method is used for xpaths that contain variables. template std::list evaluate(const node& root, context& ctxt) const; /// Returns true if the \a n node matches the XPath bool matches(const node* n) const; /// debug routine, dumps the parse tree to stdout void dump(); private: struct xpath_imp* m_impl; }; } // namespace zeep::xml libzeep-5.1.7/lib-http/0000775000175000017500000000000014176701531014550 5ustar maartenmaartenlibzeep-5.1.7/lib-http/src/0000775000175000017500000000000014176701531015337 5ustar maartenmaartenlibzeep-5.1.7/lib-http/src/connection.cpp0000664000175000017500000000634714176701531020214 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include namespace zeep::http { // Needed for CLang/libc++ on FreeBSD 10 connection* get_pointer(const std::shared_ptr& p) { return p.get(); } connection::connection(boost::asio::io_context& service, basic_server& handler) : m_socket(service), m_server(handler), m_bufs(m_buffer.prepare(4096)) { } void connection::start() { m_bufs = m_buffer.prepare(4096); m_socket.async_read_some(m_bufs, [self=shared_from_this()](boost::system::error_code ec, size_t bytes_transferred) { self->handle_read(ec, bytes_transferred); }); } void connection::handle_read(boost::system::error_code ec, size_t bytes_transferred) { if (not ec) { if (bytes_transferred > 0) m_buffer.commit(bytes_transferred); auto result = m_request_parser.parse(m_buffer); if (result) { auto req = m_request_parser.get_request(); req.set_local_endpoint(m_socket); m_request_parser.reset(); m_server.handle_request(m_socket, req, m_reply); // by now, a client might have taken over our socket, in that case, simply drop out if (not m_socket.is_open()) return; m_reply.set_version(req.get_version()); if (req.keep_alive()) { m_reply.set_header("Connection", "Keep-Alive"); m_reply.set_header("Keep-Alive", "timeout=5, max=100"); m_keep_alive = true; } auto buffers = m_reply.to_buffers(); boost::asio::async_write(m_socket, buffers, [self=shared_from_this()](boost::system::error_code ec, size_t bytes_transferred) { self->handle_write(ec, bytes_transferred); }); } else if (not result) { m_reply = reply::stock_reply(bad_request); auto buffers = m_reply.to_buffers(); boost::asio::async_write(m_socket, buffers, [self=shared_from_this()](boost::system::error_code ec, size_t bytes_transferred) { self->handle_write(ec, bytes_transferred); }); } else { m_bufs = m_buffer.prepare(4096); m_socket.async_read_some(m_bufs, [self=shared_from_this()](boost::system::error_code ec, size_t bytes_transferred) { self->handle_read(ec, bytes_transferred); }); } } } void connection::handle_write(boost::system::error_code ec, size_t bytes_transferred) { if (not ec) { auto buffers = m_reply.data_to_buffers(); if (not buffers.empty()) { boost::asio::async_write(m_socket, buffers, [self=shared_from_this()](boost::system::error_code ec, size_t bytes_transferred) { self->handle_write(ec, bytes_transferred); }); } else if (m_keep_alive) { m_request_parser.reset(); m_reply.reset(); if (m_buffer.in_avail()) handle_read({}, 0); // special case else { m_bufs = m_buffer.prepare(4096); m_socket.async_read_some(m_bufs, [self=shared_from_this()](boost::system::error_code ec, size_t bytes_transferred) { self->handle_read(ec, bytes_transferred); }); } } else m_socket.close(); } } } libzeep-5.1.7/lib-http/src/controller-rsrc.cpp0000664000175000017500000002514414176701531021203 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include namespace fs = std::filesystem; // -------------------------------------------------------------------- // We have a special, private version of mrsrc here. To be able to create // shared libraries and still be able to link when there's no mrc used. namespace mrsrc { /// \brief Internal data structure as generated by mrc struct rsrc_imp { unsigned int m_next; unsigned int m_child; unsigned int m_name; unsigned int m_size; unsigned int m_data; }; } #if _MSC_VER extern "C" const mrsrc::rsrc_imp* gResourceIndexDefault[1] = {}; extern "C" const char* gResourceDataDefault[1] = {}; extern "C" const char* gResourceNameDefault[1] = {}; extern "C" const mrsrc::rsrc_imp gResourceIndex[]; extern "C" const char gResourceData[]; extern "C" const char gResourceName[]; #pragma comment(linker, "/alternatename:gResourceIndex=gResourceIndexDefault") #pragma comment(linker, "/alternatename:gResourceData=gResourceDataDefault") #pragma comment(linker, "/alternatename:gResourceName=gResourceNameDefault") #else extern const __attribute__((weak)) mrsrc::rsrc_imp gResourceIndex[]; extern const __attribute__((weak)) char gResourceData[]; extern const __attribute__((weak)) char gResourceName[]; #endif namespace mrsrc { class rsrc_data { public: static rsrc_data& instance() { static rsrc_data s_instance; return s_instance; } const rsrc_imp* index() const { return m_index; } const char* data(unsigned int offset) const { return m_data + offset; } const char* name(unsigned int offset) const { return m_name + offset; } private: rsrc_data() { if (gResourceIndex and gResourceIndex and gResourceName) { m_index = gResourceIndex; m_data = gResourceData; m_name = gResourceName; } } rsrc_imp m_dummy = {}; const rsrc_imp* m_index = &m_dummy; const char* m_data = ""; const char* m_name = ""; }; /// \brief Class mrsrc::rsrc contains a pointer to the data in the /// resource, as well as offering an iterator interface to its /// children. class rsrc { public: rsrc() : m_impl(rsrc_data::instance().index()) {} rsrc(const rsrc& other) : m_impl(other.m_impl) {} rsrc& operator=(const rsrc& other) { m_impl = other.m_impl; return *this; } rsrc(std::filesystem::path path); std::string name() const { return rsrc_data::instance().name(m_impl->m_name); } const char* data() const { return rsrc_data::instance().data(m_impl->m_data); } unsigned long size() const { return m_impl->m_size; } explicit operator bool() const { return m_impl != NULL and m_impl->m_size > 0; } template class iterator_t { public: using iterator_category = std::input_iterator_tag; using value_type = RSRC; using difference_type = std::ptrdiff_t; using pointer = value_type*; using reference = value_type&; iterator_t(const rsrc_imp* cur) : m_cur(cur) {} iterator_t(const iterator_t& i) : m_cur(i.m_cur) { } iterator_t& operator=(const iterator_t& i) { m_cur = i.m_cur; return *this; } reference operator*() { return m_cur; } pointer operator->() { return& m_cur; } iterator_t& operator++() { if (m_cur.m_impl->m_next) m_cur.m_impl = rsrc_data::instance().index() + m_cur.m_impl->m_next; else m_cur.m_impl = nullptr; return *this; } iterator_t operator++(int) { auto tmp(*this); this->operator++(); return tmp; } bool operator==(const iterator_t& rhs) const { return m_cur.m_impl == rhs.m_cur.m_impl; } bool operator!=(const iterator_t& rhs) const { return m_cur.m_impl != rhs.m_cur.m_impl; } private: value_type m_cur; }; using iterator = iterator_t; iterator begin() const { const rsrc_imp* impl = nullptr; if (m_impl and m_impl->m_child) impl = rsrc_data::instance().index() + m_impl->m_child; return iterator(impl); } iterator end() const { return iterator(nullptr); } private: rsrc(const rsrc_imp* imp) : m_impl(imp) {} const rsrc_imp *m_impl; }; inline rsrc::rsrc(std::filesystem::path p) { m_impl = rsrc_data::instance().index(); // using std::filesytem::path would have been natural here of course... auto pb = p.begin(); auto pe = p.end(); while (m_impl != nullptr and pb != pe) { auto name = *pb++; const rsrc_imp* impl = nullptr; for (rsrc child: *this) { if (child.name() == name) { impl = child.m_impl; break; } } m_impl = impl; } if (pb != pe) // not found m_impl = nullptr; } // -------------------------------------------------------------------- template class basic_streambuf : public std::basic_streambuf { public: typedef CharT char_type; typedef Traits traits_type; typedef typename traits_type::int_type int_type; typedef typename traits_type::pos_type pos_type; typedef typename traits_type::off_type off_type; /// \brief constructor taking a \a path to the resource in memory basic_streambuf(const std::string& path) : m_rsrc(path) { init(); } /// \brief constructor taking a \a rsrc basic_streambuf(const rsrc& rsrc) : m_rsrc(rsrc) { init(); } basic_streambuf(const basic_streambuf&) = delete; basic_streambuf(basic_streambuf&& rhs) : basic_streambuf(rhs.m_rsrc) { } basic_streambuf& operator=(const basic_streambuf&) = delete; basic_streambuf& operator=(basic_streambuf&& rhs) { swap(rhs); return *this; } void swap(basic_streambuf& rhs) { std::swap(m_begin, rhs.m_begin); std::swap(m_end, rhs.m_end); std::swap(m_current, rhs.m_current); } private: void init() { m_begin = reinterpret_cast(m_rsrc.data()); m_end = reinterpret_cast(m_rsrc.data() + m_rsrc.size()); m_current = m_begin; } int_type underflow() { if (m_current == m_end) return traits_type::eof(); return traits_type::to_int_type(*m_current); } int_type uflow() { if (m_current == m_end) return traits_type::eof(); return traits_type::to_int_type(*m_current++); } int_type pbackfail(int_type ch) { if (m_current == m_begin or (ch != traits_type::eof() and ch != m_current[-1])) return traits_type::eof(); return traits_type::to_int_type(*--m_current); } std::streamsize showmanyc() { assert(std::less_equal()(m_current, m_end)); return m_end - m_current; } pos_type seekoff(off_type off, std::ios_base::seekdir dir, std::ios_base::openmode which) { switch (dir) { case std::ios_base::beg: m_current = m_begin + off; break; case std::ios_base::end: m_current = m_end + off; break; case std::ios_base::cur: m_current += off; break; default: break; } if (m_current < m_begin) m_current = m_begin; if (m_current > m_end) m_current = m_end; return m_current - m_begin; } pos_type seekpos(pos_type pos, std::ios_base::openmode which) { m_current = m_begin + pos; if (m_current < m_begin) m_current = m_begin; if (m_current > m_end) m_current = m_end; return m_current - m_begin; } private: rsrc m_rsrc; const char_type* m_begin; const char_type* m_end; const char_type* m_current; }; using streambuf = basic_streambuf>; // -------------------------------------------------------------------- // class mrsrc::istream template class basic_istream : public std::basic_istream { public: typedef CharT char_type; typedef Traits traits_type; typedef typename traits_type::int_type int_type; typedef typename traits_type::pos_type pos_type; typedef typename traits_type::off_type off_type; private: using __streambuf_type = basic_streambuf; using __istream_type = std::basic_istream; __streambuf_type m_buffer; public: basic_istream(const std::string& path) : __istream_type(&m_buffer) , m_buffer(path) { this->init(&m_buffer); } basic_istream(rsrc& resource) : __istream_type(&m_buffer) , m_buffer(resource)\ { this->init(&m_buffer); } basic_istream(const basic_istream&) = delete; basic_istream(basic_istream&& rhs) : __istream_type(std::move(rhs)) , m_buffer(std::move(rhs.m_buffer)) { __istream_type::set_rdbuf(&m_buffer); } basic_istream& operator=(const basic_istream& ) = delete; basic_istream& operator=(basic_istream&& rhs) { __istream_type::operator=(std::move(rhs)); m_buffer = std::move(rhs.m_buffer); return *this; } void swap(basic_istream& rhs) { __istream_type::swap(rhs); m_buffer.swap(rhs.m_buffer); } __streambuf_type* rdbuf() const { return const_cast<__streambuf_type*>(&m_buffer); } }; using istream = basic_istream>; } // -------------------------------------------------------------------- namespace zeep::http { // ----------------------------------------------------------------------- #if _MSC_VER and not defined(WIN32_LEAN_AND_MEAN) #define WIN32_LEAN_AND_MEAN #include #endif rsrc_loader::rsrc_loader(const std::string&) { #if _MSC_VER char exePath[MAX_PATH] = {}; if (::GetModuleFileNameA(NULL, exePath, MAX_PATH) > 0) mRsrcWriteTime = fs::last_write_time(exePath); #else char exePath[PATH_MAX + 1]; int r = readlink("/proc/self/exe", exePath, PATH_MAX); if (r > 0) { exePath[r] = 0; mRsrcWriteTime = fs::last_write_time(exePath); } #endif } /// return last_write_time of \a file fs::file_time_type rsrc_loader::file_time(const std::string& file, std::error_code& ec) noexcept { fs::file_time_type result = {}; ec = {}; mrsrc::rsrc rsrc(file); if (rsrc) result = mRsrcWriteTime; else ec = std::make_error_code(std::errc::no_such_file_or_directory); return result; } // basic loader, returns error in ec if file was not found std::istream* rsrc_loader::load_file(const std::string& file, std::error_code& ec) noexcept { mrsrc::rsrc resource(file); std::istream* result = nullptr; ec = {}; if (resource) result = new mrsrc::istream(resource); else ec = std::make_error_code(std::errc::no_such_file_or_directory); return result; } } // namespace zeep::http libzeep-5.1.7/lib-http/src/controller.cpp0000664000175000017500000000542514176701531020234 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include namespace zeep::http { thread_local request* controller::s_request = nullptr; controller::controller(const std::string& prefix_path) : m_prefix_path(prefix_path) { while (not m_prefix_path.empty()) { // strip leading slashes if (m_prefix_path.front() == '/') { m_prefix_path.erase(m_prefix_path.begin()); continue; } // and trailing slashes if (m_prefix_path.back() == '/') { m_prefix_path.pop_back(); continue; } break; } } controller::~controller() { } bool controller::dispatch_request(boost::asio::ip::tcp::socket& socket, request& req, reply& rep) { bool result = false; try { s_request = &req; result = handle_request(req, rep); s_request = nullptr; } catch (...) { s_request = nullptr; throw; } return result; } bool controller::path_matches_prefix(const std::string& path) const { bool result = m_prefix_path.empty(); if (not result) { std::string::size_type offset = 0; while (offset < path.length() and path[offset] == '/') ++offset; result = path.compare(offset, m_prefix_path.length(), m_prefix_path) == 0; if (result) result = path.length() == m_prefix_path.length() + offset or path[offset + m_prefix_path.length()] == '/'; } return result; } std::string controller::get_prefixless_path(const request& req) const { uri uri(req.get_uri()); auto result = uri.is_absolute() ? uri.get_path().lexically_relative("/") : uri.get_path(); if (not m_prefix_path.empty()) { result = result.lexically_relative(m_prefix_path); if (not result.empty() and result.begin()->string() == "..") { // assert(false); throw std::logic_error("Controller does not have the prefix path for this request"); } } return result == "." ? "" : result.generic_string(); } json::element controller::get_credentials() const { json::element credentials; if (s_request != nullptr) credentials = s_request->get_credentials(); return credentials; } std::string controller::get_remote_address() const { std::string result; if (s_request != nullptr) result = s_request->get_remote_address(); return result; } bool controller::has_role(const std::string& role) const { auto credentials = get_credentials(); return credentials.is_object() and credentials["role"].is_array() and credentials["role"].contains(role); } std::string controller::get_header(const char *name) const { return s_request ? s_request->get_header(name) : ""; } } libzeep-5.1.7/lib-http/src/crypto.cpp0000664000175000017500000007612514176701531017376 0ustar maartenmaarten// Copyright Maarten L. Hekkelman. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include #include namespace zeep { // -------------------------------------------------------------------- // encoding/decoding const char kBase64CharTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; const uint8_t kBase64IndexTable[128] = { 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 62, // + 128, // not used 128, // not used 128, // not used 63, // / 52, // 0 53, // 1 54, // 2 55, // 3 56, // 4 57, // 5 58, // 6 59, // 7 60, // 8 61, // 9 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 0, // A 1, // B 2, // C 3, // D 4, // E 5, // F 6, // G 7, // H 8, // I 9, // J 10, // K 11, // L 12, // M 13, // N 14, // O 15, // P 16, // Q 17, // R 18, // S 19, // T 20, // U 21, // V 22, // W 23, // X 24, // Y 25, // Z 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used 26, // a 27, // b 28, // c 29, // d 30, // e 31, // f 32, // g 33, // h 34, // i 35, // j 36, // k 37, // l 38, // m 39, // n 40, // o 41, // p 42, // q 43, // r 44, // s 45, // t 46, // u 47, // v 48, // w 49, // x 50, // y 51, // z 128, // not used 128, // not used 128, // not used 128, // not used 128, // not used }; inline uint8_t sextet(char ch) { if (ch < '+' or ch > 'z' or kBase64IndexTable[static_cast(ch)] >= 128) throw invalid_base64(); return kBase64IndexTable[static_cast(ch)]; } std::string encode_base64(std::string_view data, size_t wrap_width) { std::string::size_type n = data.length(); std::string::size_type m = 4 * (n / 3); if (n % 3) m += 4; if (wrap_width != 0) m += (m / wrap_width) + 1; std::string result; result.reserve(m); auto ch = data.begin(); size_t l = 0; while (n > 0) { char s[4] = { '=', '=', '=', '=' }; switch (n) { case 1: { uint8_t i = *ch++; s[0] = kBase64CharTable[i >> 2]; s[1] = kBase64CharTable[(i << 4) bitand 0x03f]; n -= 1; break; } case 2: { uint8_t i1 = *ch++; uint8_t i2 = *ch++; s[0] = kBase64CharTable[i1 >> 2]; s[1] = kBase64CharTable[(i1 << 4 bitor i2 >> 4) bitand 0x03f]; s[2] = kBase64CharTable[(i2 << 2) bitand 0x03f]; n -= 2; break; } default: { uint8_t i1 = *ch++; uint8_t i2 = *ch++; uint8_t i3 = *ch++; s[0] = kBase64CharTable[i1 >> 2]; s[1] = kBase64CharTable[(i1 << 4 bitor i2 >> 4) bitand 0x03f]; s[2] = kBase64CharTable[(i2 << 2 bitor i3 >> 6) bitand 0x03f]; s[3] = kBase64CharTable[i3 bitand 0x03f]; n -= 3; break; } } if (wrap_width == 0) result.append(s, s + 4); else { for (size_t i = 0; i < 4; ++i) { if (l == wrap_width) { result.append(1, '\n'); l = 0; } result.append(1, s[i]); ++l; } } } if (wrap_width != 0) result.append(1, '\n'); assert(result.length() == m); return result; } std::string decode_base64(std::string_view data) { size_t n = data.length(); size_t m = 3 * (n / 4); std::string result; result.reserve(m); auto i = data.begin(); while (i != data.end()) { uint8_t sxt[4] = {}; int b = 0, c = 3; while (b < 4) { if (i == data.end()) break; char ch = *i++; switch (ch) { case ' ': case '\t': case '\n': case '\r': break; case '=': if (b == 2 and *i++ == '=') { c = 1; b = 4; } else if (b == 3) { c = 2; b = 4; } else throw invalid_base64(); break; default: sxt[b] = sextet(ch); ++b; break; } } if (b == 4) { result.append(1, static_cast(sxt[0] << 2 bitor sxt[1] >> 4)); if (c >= 2) result.append(1, static_cast(sxt[1] << 4 bitor sxt[2] >> 2)); if (c == 3) result.append(1, static_cast(sxt[2] << 6 bitor sxt[3])); } else if (b != 0) throw invalid_base64(); } return result; } std::string encode_base64url(std::string_view data) { std::string result = encode_base64(data); while (not result.empty() and result.back() == '=') result.pop_back(); for (auto p = result.find('+'); p != std::string::npos; p = result.find('+', p + 1)) result.replace(p, 1, 1, '-'); for (auto p = result.find('/'); p != std::string::npos; p = result.find('/', p + 1)) result.replace(p, 1, 1, '_'); return result; } std::string decode_base64url(std::string data) { for (auto p = data.find('-'); p != std::string::npos; p = data.find('-', p + 1)) data.replace(p, 1, 1, '+'); for (auto p = data.find('_'); p != std::string::npos; p = data.find('_', p + 1)) data.replace(p, 1, 1, '/'); switch (data.length() % 4) { case 0: break; case 2: data.append(2, '='); break; case 3: data.append(1, '='); break; default: throw invalid_base64(); } return decode_base64(data); } // -------------------------------------------------------------------- const char kBase32CharTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; const uint8_t kBase32IndexTable[128] = { 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 26, // 2 27, // 3 28, // 4 29, // 5 30, // 6 31, // 7 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 0, // A 1, // B 2, // C 3, // D 4, // E 5, // F 6, // G 7, // H 8, // I 9, // J 10, // K 11, // L 12, // M 13, // N 14, // O 15, // P 16, // Q 17, // R 18, // S 19, // T 20, // U 21, // V 22, // W 23, // X 24, // Y 25, // Z 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used 0, // a 1, // b 2, // c 3, // d 4, // e 5, // f 6, // g 7, // h 8, // i 9, // j 10, // k 11, // l 12, // m 13, // n 14, // o 15, // p 16, // q 17, // r 18, // s 19, // t 20, // u 21, // v 22, // w 23, // x 24, // y 25, // z 32, // not used 32, // not used 32, // not used 32, // not used 32, // not used }; inline size_t quintet(char ch) { if (ch < '2' or ch > 'z' or kBase32IndexTable[static_cast(ch)] >= 32) throw invalid_base32(); return kBase32IndexTable[static_cast(ch)]; } std::string encode_base32(std::string_view data, size_t wrap_width) { std::string::size_type n = data.length(); std::string::size_type m = 8 * (n / 5); if (n % 5) m += 8; if (wrap_width != 0) m += (m / wrap_width) + 1; std::string result; result.reserve(m); auto ch = data.begin(); size_t l = 0; while (n > 0) { char s[8] = { '=', '=', '=', '=', '=', '=', '=', '=' }; switch (n) { case 1: { uint8_t i1 = *ch++; s[0] = kBase32CharTable[(i1 >> 3) bitand 0x01f]; s[1] = kBase32CharTable[(i1 << 2) bitand 0x01f]; n -= 1; break; } case 2: { uint8_t i1 = *ch++; uint8_t i2 = *ch++; // i1 i2 s[0] = kBase32CharTable[(i1 >> 3 ) bitand 0x01f]; // 5 s[1] = kBase32CharTable[(i1 << 2 bitor i2 >> 6) bitand 0x01f]; // 3 2 s[2] = kBase32CharTable[( i2 >> 1) bitand 0x01f]; // 5 s[3] = kBase32CharTable[(i2 << 4 ) bitand 0x01f]; // 1 n -= 2; break; } case 3: { uint8_t i1 = *ch++; uint8_t i2 = *ch++; uint8_t i3 = *ch++; // i1 i2 i3 s[0] = kBase32CharTable[(i1 >> 3 ) bitand 0x01f]; // 5 s[1] = kBase32CharTable[(i1 << 2 bitor i2 >> 6) bitand 0x01f]; // 3 2 s[2] = kBase32CharTable[( i2 >> 1) bitand 0x01f]; // 5 s[3] = kBase32CharTable[(i2 << 4 bitor i3 >> 4) bitand 0x01f]; // 1 4 s[4] = kBase32CharTable[(i3 << 1 ) bitand 0x01f]; // 4 n -= 3; break; } case 4: { uint8_t i1 = *ch++; uint8_t i2 = *ch++; uint8_t i3 = *ch++; uint8_t i4 = *ch++; // i1 i2 i3 i4 s[0] = kBase32CharTable[(i1 >> 3 ) bitand 0x01f]; // 5 s[1] = kBase32CharTable[(i1 << 2 bitor i2 >> 6) bitand 0x01f]; // 3 2 s[2] = kBase32CharTable[( i2 >> 1) bitand 0x01f]; // 5 s[3] = kBase32CharTable[(i2 << 4 bitor i3 >> 4) bitand 0x01f]; // 1 4 s[4] = kBase32CharTable[(i3 << 1 ) bitand 0x01f]; // 4 1 s[5] = kBase32CharTable[( i4 >> 2) bitand 0x01f]; // 5 s[6] = kBase32CharTable[(i4 << 3 ) bitand 0x01f]; // 2 n -= 4; break; } default: { uint8_t i1 = *ch++; uint8_t i2 = *ch++; uint8_t i3 = *ch++; uint8_t i4 = *ch++; uint8_t i5 = *ch++; // i1 i2 i3 i4 i5 s[0] = kBase32CharTable[(i1 >> 3 ) bitand 0x01f]; // 5 s[1] = kBase32CharTable[(i1 << 2 bitor i2 >> 6) bitand 0x01f]; // 3 2 s[2] = kBase32CharTable[( i2 >> 1) bitand 0x01f]; // 5 s[3] = kBase32CharTable[(i2 << 4 bitor i3 >> 4) bitand 0x01f]; // 1 4 s[4] = kBase32CharTable[(i3 << 1 bitor i4 >> 7) bitand 0x01f]; // 4 1 s[5] = kBase32CharTable[( i4 >> 2) bitand 0x01f]; // 5 s[6] = kBase32CharTable[(i4 << 3 bitor i5 >> 5) bitand 0x01f]; // 2 3 s[7] = kBase32CharTable[(i5 ) bitand 0x01f]; // 5 n -= 5; break; } } if (wrap_width == 0) result.append(s, s + 8); else { for (size_t i = 0; i < 8; ++i) { if (l == wrap_width) { result.append(1, '\n'); l = 0; } result.append(1, s[i]); ++l; } } } if (wrap_width != 0) result.append(1, '\n'); assert(result.length() == m); return result; } std::string decode_base32(std::string_view data) { size_t n = data.length(); size_t m = 8 * (n / 5); std::string result; result.reserve(m); auto i = data.begin(); int padding = 0; while (i != data.end() and not padding) { uint8_t qnt[5] = {}; int c = 0; while (c + padding != 8 and i != data.end()) { auto ch = *i++; if (std::isspace(ch)) continue; if (padding) { if (ch != '=') throw invalid_base32(); ++padding; continue; } if (ch == '=') { ++padding; continue; } if (ch < '2' or ch > 'z' or kBase32IndexTable[static_cast(ch)] >= 32) throw invalid_base32(); auto b = kBase32IndexTable[static_cast(ch)]; switch (c++) { case 0: qnt[0] |= b << 3; break; case 1: qnt[0] |= b >> 2; qnt[1] = b << 6; break; case 2: qnt[1] |= b << 1; break; case 3: qnt[1] |= b >> 4; qnt[2] = b << 4; break; case 4: qnt[2] |= b >> 1; qnt[3] = b << 7; break; case 5: qnt[3] |= b << 2; break; case 6: qnt[3] |= b >> 3; qnt[4] = b << 5; break; case 7: qnt[4] |= b; break; } } if (c + padding != 8) throw invalid_base32(); switch (c) { case 2: result.append(qnt, qnt + 1); break; case 4: result.append(qnt, qnt + 2); break; case 5: result.append(qnt, qnt + 3); break; case 7: result.append(qnt, qnt + 4); break; case 8: result.append(qnt, qnt + 5); break; default: throw invalid_base32(); } } while (i != data.end()) { if (not std::isspace(*i++)) throw invalid_base32(); } return result; } // -------------------------------------------------------------------- // hex std::string encode_hex(std::string_view data) { // convert to hex const char kHexChars[] = "0123456789abcdef"; std::string result; result.reserve(data.length() * 2); for (uint8_t b: data) { result += kHexChars[b >> 4]; result += kHexChars[b bitand 0x0f]; } return result; } std::string decode_hex(std::string_view data) { if (data.length() % 2 == 1) throw invalid_hex(); std::string result; result.reserve(data.length() / 2); for (std::string::size_type i = 0; i < data.length(); i += 2) { uint8_t n[2] = {}; for (int j = 0; j < 2; ++j) { auto ch = data[i + j]; if (ch >= '0' and ch <= '9') n[i] = ch - '0'; else if (ch >= 'a' and ch <= 'f') n[i] = ch - 'a' + 10; else if (ch >= 'A' and ch <= 'F') n[i] = ch - 'A' + 10; else throw invalid_hex(); } result.push_back(static_cast(n[0] << 4 bitor n[1])); } return result; } // -------------------------------------------------------------------- // random std::string random_hash() { std::random_device rng; union { uint32_t data[4]; char s[4 * 4]; } v = { { rng(), rng(), rng(), rng() } }; return { v.s, v.s + sizeof(v) }; } // -------------------------------------------------------------------- // hashes // -------------------------------------------------------------------- #if _MSC_VER # pragma warning (disable : 4146) // unary minus operator applied to unsigned type, result still unsigned #endif static inline uint32_t rotl32 (uint32_t n, unsigned int c) { const unsigned int mask = (CHAR_BIT*sizeof(n) - 1); // assumes width is a power of 2. // assert ( (c<=mask) &&"rotate by type width or more"); c &= mask; return (n<>( (-c)&mask )); } static inline uint32_t rotr32 (uint32_t n, unsigned int c) { const unsigned int mask = (CHAR_BIT*sizeof(n) - 1); // assert ( (c<=mask) &&"rotate by type width or more"); c &= mask; return (n>>c) bitor (n<<( (-c)&mask )); } // -------------------------------------------------------------------- struct hash_impl { virtual ~hash_impl() {} virtual void write_bit_length(uint64_t l, uint8_t* b) = 0; virtual void transform(const uint8_t* data) = 0; virtual std::string final() = 0; }; // -------------------------------------------------------------------- #define F1(x,y,z) (z xor (x bitand (y xor z))) #define F2(x,y,z) F1(z, x, y) #define F3(x,y,z) (x xor y xor z) #define F4(x,y,z) (y xor ( x bitor compl z)) #define STEP(F,w,x,y,z,data,s) \ w += F(x, y, z) + data; \ w = rotl32(w, s); \ w += x; struct md5_hash_impl : public hash_impl { using word_type = uint32_t; static const size_t word_count = 4; static const size_t block_size = 64; static const size_t digest_size = word_count * sizeof(word_type); word_type m_h[word_count]; virtual void init() { m_h[0] = 0x67452301; m_h[1] = 0xefcdab89; m_h[2] = 0x98badcfe; m_h[3] = 0x10325476; } virtual void write_bit_length(uint64_t l, uint8_t* p) { for (int i = 0; i < 8; ++i) *p++ = static_cast((l >> (i * 8))); } virtual void transform(const uint8_t* data) { uint32_t a = m_h[0], b = m_h[1], c = m_h[2], d = m_h[3]; uint32_t in[16]; for (int i = 0; i < 16; ++i) { in[i] = static_cast(data[0]) << 0 | static_cast(data[1]) << 8 | static_cast(data[2]) << 16 | static_cast(data[3]) << 24; data += 4; } STEP(F1, a, b, c, d, in[ 0] + 0xd76aa478, 7); STEP(F1, d, a, b, c, in[ 1] + 0xe8c7b756, 12); STEP(F1, c, d, a, b, in[ 2] + 0x242070db, 17); STEP(F1, b, c, d, a, in[ 3] + 0xc1bdceee, 22); STEP(F1, a, b, c, d, in[ 4] + 0xf57c0faf, 7); STEP(F1, d, a, b, c, in[ 5] + 0x4787c62a, 12); STEP(F1, c, d, a, b, in[ 6] + 0xa8304613, 17); STEP(F1, b, c, d, a, in[ 7] + 0xfd469501, 22); STEP(F1, a, b, c, d, in[ 8] + 0x698098d8, 7); STEP(F1, d, a, b, c, in[ 9] + 0x8b44f7af, 12); STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); STEP(F2, a, b, c, d, in[ 1] + 0xf61e2562, 5); STEP(F2, d, a, b, c, in[ 6] + 0xc040b340, 9); STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); STEP(F2, b, c, d, a, in[ 0] + 0xe9b6c7aa, 20); STEP(F2, a, b, c, d, in[ 5] + 0xd62f105d, 5); STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); STEP(F2, b, c, d, a, in[ 4] + 0xe7d3fbc8, 20); STEP(F2, a, b, c, d, in[ 9] + 0x21e1cde6, 5); STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); STEP(F2, c, d, a, b, in[ 3] + 0xf4d50d87, 14); STEP(F2, b, c, d, a, in[ 8] + 0x455a14ed, 20); STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); STEP(F2, d, a, b, c, in[ 2] + 0xfcefa3f8, 9); STEP(F2, c, d, a, b, in[ 7] + 0x676f02d9, 14); STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); STEP(F3, a, b, c, d, in[ 5] + 0xfffa3942, 4); STEP(F3, d, a, b, c, in[ 8] + 0x8771f681, 11); STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); STEP(F3, a, b, c, d, in[ 1] + 0xa4beea44, 4); STEP(F3, d, a, b, c, in[ 4] + 0x4bdecfa9, 11); STEP(F3, c, d, a, b, in[ 7] + 0xf6bb4b60, 16); STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); STEP(F3, d, a, b, c, in[ 0] + 0xeaa127fa, 11); STEP(F3, c, d, a, b, in[ 3] + 0xd4ef3085, 16); STEP(F3, b, c, d, a, in[ 6] + 0x04881d05, 23); STEP(F3, a, b, c, d, in[ 9] + 0xd9d4d039, 4); STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); STEP(F3, b, c, d, a, in[ 2] + 0xc4ac5665, 23); STEP(F4, a, b, c, d, in[ 0] + 0xf4292244, 6); STEP(F4, d, a, b, c, in[ 7] + 0x432aff97, 10); STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); STEP(F4, b, c, d, a, in[ 5] + 0xfc93a039, 21); STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); STEP(F4, d, a, b, c, in[ 3] + 0x8f0ccc92, 10); STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); STEP(F4, b, c, d, a, in[ 1] + 0x85845dd1, 21); STEP(F4, a, b, c, d, in[ 8] + 0x6fa87e4f, 6); STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); STEP(F4, c, d, a, b, in[ 6] + 0xa3014314, 15); STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); STEP(F4, a, b, c, d, in[ 4] + 0xf7537e82, 6); STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); STEP(F4, c, d, a, b, in[ 2] + 0x2ad7d2bb, 15); STEP(F4, b, c, d, a, in[ 9] + 0xeb86d391, 21); m_h[0] += a; m_h[1] += b; m_h[2] += c; m_h[3] += d; } virtual std::string final() { std::string result; result.reserve(digest_size); for (size_t i = 0; i < word_count; ++i) { for (size_t j = 0; j < sizeof(word_type); ++j) { uint8_t b = static_cast(m_h[i] >> (j * 8)); result.push_back(b); } } return result; } }; // -------------------------------------------------------------------- struct sha1_hash_impl : public hash_impl { using word_type = uint32_t; static const size_t word_count = 5; static const size_t block_size = 64; static const size_t digest_size = word_count * sizeof(word_type); word_type m_h[word_count]; virtual void init() { m_h[0] = 0x67452301; m_h[1] = 0xEFCDAB89; m_h[2] = 0x98BADCFE; m_h[3] = 0x10325476; m_h[4] = 0xC3D2E1F0; } virtual void write_bit_length(uint64_t l, uint8_t* b) { #if defined(BYTE_ORDER) and BYTE_ORDER == BIG_ENDIAN memcpy(b, &l, sizeof(l)); #else b[0] = static_cast(l >> 56); b[1] = static_cast(l >> 48); b[2] = static_cast(l >> 40); b[3] = static_cast(l >> 32); b[4] = static_cast(l >> 24); b[5] = static_cast(l >> 16); b[6] = static_cast(l >> 8); b[7] = static_cast(l >> 0); #endif } virtual void transform(const uint8_t* data) { union { uint8_t s[64]; uint32_t w[80]; } w; #if defined(BYTE_ORDER) and BYTE_ORDER == BIG_ENDIAN memcpy(w.s, data, 64); #else auto p = data; for (size_t i = 0; i < 16; ++i) { w.s[i * 4 + 3] = *p++; w.s[i * 4 + 2] = *p++; w.s[i * 4 + 1] = *p++; w.s[i * 4 + 0] = *p++; } #endif for (size_t i = 16; i < 80; ++i) w.w[i] = rotl32(w.w[i - 3] xor w.w[i - 8] xor w.w[i - 14] xor w.w[i - 16], 1); word_type wv[word_count]; for (size_t i = 0; i < word_count; ++i) wv[i] = m_h[i]; for (size_t i = 0; i < 80; ++i) { uint32_t f, k; if (i < 20) { f = (wv[1] bitand wv[2]) bitor ((compl wv[1]) bitand wv[3]); k = 0x5A827999; } else if (i < 40) { f = wv[1] xor wv[2] xor wv[3]; k = 0x6ED9EBA1; } else if (i < 60) { f = (wv[1] bitand wv[2]) bitor (wv[1] bitand wv[3]) bitor (wv[2] bitand wv[3]); k = 0x8F1BBCDC; } else { f = wv[1] xor wv[2] xor wv[3]; k = 0xCA62C1D6; } uint32_t t = rotl32(wv[0], 5) + f + wv[4] + k + w.w[i]; wv[4] = wv[3]; wv[3] = wv[2]; wv[2] = rotl32(wv[1], 30); wv[1] = wv[0]; wv[0] = t; } for (size_t i = 0; i < word_count; ++i) m_h[i] += wv[i]; } virtual std::string final() { std::string result(digest_size, '\0'); #if defined(BYTE_ORDER) and BYTE_ORDER == BIG_ENDIAN memcpy(const_cast(result.data()), &m_h, digest_size); #else auto s = result.begin(); for (size_t i = 0; i < word_count; ++i) { *s++ = static_cast(m_h[i] >> 24); *s++ = static_cast(m_h[i] >> 16); *s++ = static_cast(m_h[i] >> 8); *s++ = static_cast(m_h[i] >> 0); } #endif return result; } }; // -------------------------------------------------------------------- struct sha256_hash_impl : public hash_impl { using word_type = uint32_t; static const size_t word_count = 8; static const size_t block_size = 64; static const size_t digest_size = word_count * sizeof(word_type); word_type m_h[word_count]; virtual void init() { m_h[0] = 0x6a09e667; m_h[1] = 0xbb67ae85; m_h[2] = 0x3c6ef372; m_h[3] = 0xa54ff53a; m_h[4] = 0x510e527f; m_h[5] = 0x9b05688c; m_h[6] = 0x1f83d9ab; m_h[7] = 0x5be0cd19; } virtual void write_bit_length(uint64_t l, uint8_t* b) { #if defined(BYTE_ORDER) and BYTE_ORDER == BIG_ENDIAN memcpy(b, &l, sizeof(l)); #else b[0] = static_cast(l >> 56); b[1] = static_cast(l >> 48); b[2] = static_cast(l >> 40); b[3] = static_cast(l >> 32); b[4] = static_cast(l >> 24); b[5] = static_cast(l >> 16); b[6] = static_cast(l >> 8); b[7] = static_cast(l >> 0); #endif } virtual void transform(const uint8_t* data) { static const uint32_t k[] = { 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 }; word_type wv[word_count]; for (size_t i = 0; i < word_count; ++i) wv[i] = m_h[i]; union { uint8_t s[64]; uint32_t w[64]; } w; #if defined(BYTE_ORDER) and BYTE_ORDER == BIG_ENDIAN memcpy(w.w, data, 64); #else auto p = data; for (size_t i = 0; i < 16; ++i) { w.s[i * 4 + 3] = *p++; w.s[i * 4 + 2] = *p++; w.s[i * 4 + 1] = *p++; w.s[i * 4 + 0] = *p++; } #endif for (size_t i = 16; i < 64; ++i) { auto s0 = rotr32(w.w[i - 15], 7) xor rotr32(w.w[i - 15], 18) xor (w.w[i - 15] >> 3); auto s1 = rotr32(w.w[i - 2], 17) xor rotr32(w.w[i - 2], 19) xor (w.w[i - 2] >> 10); w.w[i] = w.w[i - 16] + s0 + w.w[i - 7] + s1; } for (size_t i = 0; i < 64; ++i) { uint32_t S1 = rotr32(wv[4], 6) xor rotr32(wv[4], 11) xor rotr32(wv[4], 25); uint32_t ch = (wv[4] bitand wv[5]) xor (compl wv[4] bitand wv[6]); uint32_t t1 = wv[7] + S1 + ch + k[i] + w.w[i]; uint32_t S0 = rotr32(wv[0], 2) xor rotr32(wv[0], 13) xor rotr32(wv[0], 22); uint32_t maj = (wv[0] bitand wv[1]) xor (wv[0] bitand wv[2]) xor (wv[1] bitand wv[2]); uint32_t t2 = S0 + maj; wv[7] = wv[6]; wv[6] = wv[5]; wv[5] = wv[4]; wv[4] = wv[3] + t1; wv[3] = wv[2]; wv[2] = wv[1]; wv[1] = wv[0]; wv[0] = t1 + t2; } for (size_t i = 0; i < word_count; ++i) m_h[i] += wv[i]; } virtual std::string final() { std::string result(digest_size, '\0'); #if defined(BYTE_ORDER) and BYTE_ORDER == BIG_ENDIAN memcpy(const_cast(result.data()), &m_h, digest_size); #else auto s = result.begin(); for (size_t i = 0; i < word_count; ++i) { *s++ = static_cast(m_h[i] >> 24); *s++ = static_cast(m_h[i] >> 16); *s++ = static_cast(m_h[i] >> 8); *s++ = static_cast(m_h[i] >> 0); } #endif return result; } }; // -------------------------------------------------------------------- template class hash_base : public I { public: using word_type = typename I::word_type; static const size_t word_count = I::word_count; static const size_t block_size = I::block_size; static const size_t digest_size = I::digest_size; hash_base() { init(); } void init() { I::init(); m_data_length = 0; m_bit_length = 0; } void update(std::string_view data); void update(const uint8_t* data, size_t n); using I::transform; std::string final(); private: uint8_t m_data[block_size]; uint32_t m_data_length; int64_t m_bit_length; }; template void hash_base::update(std::string_view data) { update(reinterpret_cast(data.data()), data.size()); } template void hash_base::update(const uint8_t* p, size_t length) { m_bit_length += length * 8; if (m_data_length > 0) { uint32_t n = block_size - m_data_length; if (n > length) n = static_cast(length); memcpy(m_data + m_data_length, p, n); m_data_length += n; if (m_data_length == block_size) { transform(m_data); m_data_length = 0; } p += n; length -= n; } while (length >= block_size) { transform(p); p += block_size; length -= block_size; } if (length > 0) { memcpy(m_data, p, length); m_data_length += static_cast(length); } } template std::string hash_base::final() { m_data[m_data_length] = 0x80; ++m_data_length; std::fill(m_data + m_data_length, m_data + block_size, uint8_t(0)); if (block_size - m_data_length < 8) { transform(m_data); std::fill(m_data, m_data + block_size - 8, uint8_t(0)); } I::write_bit_length(m_bit_length, m_data + block_size - 8); transform(m_data); std::fill(m_data, m_data + block_size, uint8_t(0)); auto result = I::final(); init(); return result; } using MD5 = hash_base; using SHA1 = hash_base; using SHA256 = hash_base; // -------------------------------------------------------------------- std::string sha1(std::string_view data) { SHA1 h; h.init(); h.update(data); return h.final(); } std::string sha1(std::streambuf& data) { SHA1 h; h.init(); while (data.in_avail() > 0) { uint8_t buffer[256]; auto n = data.sgetn(reinterpret_cast(buffer), sizeof(buffer)); h.update(buffer, n); } return h.final(); } std::string sha256(std::string_view data) { SHA256 h; h.init(); h.update(data); return h.final(); } std::string md5(std::string_view data) { MD5 h; h.init(); h.update(data); return h.final(); } // -------------------------------------------------------------------- // hmac template class HMAC { public: static const size_t block_size = H::block_size; static const size_t digest_size = H::digest_size; HMAC(std::string_view key) : m_ipad(block_size, '\x36'), m_opad(block_size, '\x5c') { if (key.length() > block_size) { H keyHash; keyHash.update(key); key = keyHash.final(); } assert(key.length() < block_size); for (size_t i = 0; i < key.length(); ++i) { m_opad[i] ^= key[i]; m_ipad[i] ^= key[i]; } } HMAC& update(std::string_view data) { if (not m_inner_updated) { m_inner.update(m_ipad); m_inner_updated = true; } m_inner.update(data); return *this; } std::string final() { H outer; outer.update(m_opad); outer.update(m_inner.final()); m_inner_updated = false; return outer.final(); } private: std::string m_ipad, m_opad; bool m_inner_updated = false; H m_inner; }; std::string hmac_sha1(std::string_view message, std::string_view key) { return HMAC(key).update(message).final(); } std::string hmac_sha256(std::string_view message, std::string_view key) { return HMAC(key).update(message).final(); } std::string hmac_md5(std::string_view message, std::string_view key) { return HMAC(key).update(message).final(); } // -------------------------------------------------------------------- // password/key derivation template std::string pbkdf2(std::string_view salt, std::string_view password, unsigned iterations, unsigned keyLength) { std::string result; HMAC hmac(password); uint32_t i = 1; while (result.length() < keyLength) { hmac.update(salt); for (int j = 0; j < 4; ++j) { char b = static_cast(i >> ((3 - j) * CHAR_BIT)); hmac.update(std::string{ b }); } auto derived = hmac.final(); auto buffer = derived; for (unsigned c = 1; c < iterations; ++c) { buffer = hmac.update(buffer).final(); for (size_t ix = 0; ix < buffer.length(); ++ix) derived[ix] ^= buffer[ix]; } result.append(derived); ++i; } if (result.length() > keyLength) result.erase(result.begin() + keyLength, result.end()); return result; } /// create password hash according to PBKDF2 with HmacSHA1 std::string pbkdf2_hmac_sha1(std::string_view salt, std::string_view password, unsigned iterations, unsigned keyLength) { return pbkdf2>(salt, password, iterations, keyLength); } /// create password hash according to PBKDF2 with HmacSHA256 std::string pbkdf2_hmac_sha256(std::string_view salt, std::string_view password, unsigned iterations, unsigned keyLength) { return pbkdf2>(salt, password, iterations, keyLength); } }libzeep-5.1.7/lib-http/src/daemon.cpp0000664000175000017500000002730614176701531017316 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Source code specifically for Unix/Linux // Utilitie routines to build daemon processes #ifndef _MSC_VER #include #include #include #endif #include #include #include #include #include "signals.hpp" namespace fs = std::filesystem; using namespace std::literals; namespace zeep::http { #if __APPLE__ int getgrouplist(const char *user, gid_t group, gid_t *groups, int *ngroups) { return ::getgrouplist(user, (int)group, (int *)groups, ngroups); } #endif daemon::daemon(server_factory_type &&factory, const std::string &pid_file, const std::string &stdout_log_file, const std::string &stderr_log_file) : m_factory(std::move(factory)) , m_pid_file(pid_file) , m_stdout_log_file(stdout_log_file) , m_stderr_log_file(stderr_log_file) { } daemon::daemon(server_factory_type &&factory, const char *name) : daemon(std::forward(factory), "/var/run/"s + name, "/var/log/"s + name + "/access.log", "/var/log/"s + name + "/error.log") { } int daemon::run_foreground(const std::string &address, uint16_t port) { int result = 0; if (pid_is_for_executable()) { std::cerr << "Server is already running." << std::endl; result = 1; } else { try { boost::asio::io_context io_context; boost::asio::ip::tcp::endpoint endpoint; try { endpoint = boost::asio::ip::tcp::endpoint(boost::asio::ip::make_address(address), port); } catch (const std::exception &e) { boost::asio::ip::tcp::resolver resolver(io_context); boost::asio::ip::tcp::resolver::query query(address, std::to_string(port)); endpoint = *resolver.resolve(query); } boost::asio::ip::tcp::acceptor acceptor(io_context); acceptor.open(endpoint.protocol()); acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); acceptor.bind(endpoint); acceptor.listen(); acceptor.close(); } catch (exception &e) { throw std::runtime_error(std::string("Is server running already? ") + e.what()); } signal_catcher sc; sc.block(); std::unique_ptr s(m_factory()); s->bind(address, port); std::thread t(std::bind(&server::run, s.get(), 1)); sc.unblock(); sc.wait(); s->stop(); if (t.joinable()) t.join(); } return result; } #if _MSC_VER int daemon::start(const std::string &address, uint16_t port, size_t nr_of_procs, size_t nr_of_threads, const std::string &run_as_user) { assert(false); return -1; } int daemon::stop() { return -1; } int daemon::status() { return -1; } int daemon::reload() { return -1; } bool daemon::pid_is_for_executable() { return false; } void daemon::daemonize() { assert(false); } #else int daemon::start(const std::string &address, uint16_t port, size_t nr_of_procs, size_t nr_of_threads, const std::string &run_as_user) { int result = 0; if (pid_is_for_executable()) { std::cerr << "Server is already running." << std::endl; result = 1; } else { if (fs::exists(m_pid_file)) try { fs::remove(m_pid_file); } catch (...) { } fs::path pidDir = fs::path(m_pid_file).parent_path(); if (not fs::is_directory(pidDir)) fs::create_directories(pidDir); fs::path outLogDir = fs::path(m_stdout_log_file).parent_path(); if (not fs::is_directory(outLogDir)) fs::create_directories(outLogDir); fs::path errLogDir = fs::path(m_stderr_log_file).parent_path(); if (not fs::is_directory(errLogDir)) fs::create_directories(errLogDir); try { boost::asio::io_context io_context; boost::asio::ip::tcp::endpoint endpoint; try { endpoint = boost::asio::ip::tcp::endpoint(boost::asio::ip::make_address(address), port); } catch (const std::exception &e) { boost::asio::ip::tcp::resolver resolver(io_context); boost::asio::ip::tcp::resolver::query query(address, std::to_string(port)); endpoint = *resolver.resolve(query); } boost::asio::ip::tcp::acceptor acceptor(io_context); acceptor.open(endpoint.protocol()); acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); acceptor.bind(endpoint); acceptor.listen(); acceptor.close(); } catch (exception &e) { throw std::runtime_error(std::string("Is server running already? ") + e.what()); } daemonize(); run_main_loop(address, port, nr_of_procs, nr_of_threads, run_as_user); if (fs::exists(m_pid_file)) try { fs::remove(m_pid_file); } catch (...) { } } return result; } int daemon::stop() { int result = 1; if (pid_is_for_executable()) { std::ifstream file(m_pid_file); if (not file.is_open()) throw std::runtime_error("Failed to open pid file"); int pid; file >> pid; file.close(); result = ::kill(pid, SIGINT); if (result != 0) std::cerr << "Failed to stop process " << pid << ": " << strerror(errno) << std::endl; try { if (fs::exists(m_pid_file)) fs::remove(m_pid_file); } catch (...) { } } else throw std::runtime_error("Not my pid file: " + m_pid_file); return result; } int daemon::status() { int result; if (pid_is_for_executable()) { std::cerr << "server is running" << std::endl; result = 0; } else { std::cerr << "server is not running" << std::endl; result = 1; } return result; } int daemon::reload() { int result; if (pid_is_for_executable()) { std::ifstream file(m_pid_file); if (not file.is_open()) throw std::runtime_error("Failed to open pid file"); int pid; file >> pid; result = ::kill(pid, SIGHUP); } else { std::cerr << "server is not running" << std::endl; result = 1; } return result; } void daemon::daemonize() { int pid = fork(); if (pid == -1) { std::cerr << "Fork failed" << std::endl; exit(1); } // exit the parent (=calling) process if (pid != 0) _exit(0); if (setsid() < 0) { std::cerr << "Failed to create process group: " << strerror(errno) << std::endl; exit(1); } // it is dubious if this is needed: signal(SIGHUP, SIG_IGN); // fork again, to avoid being able to attach to a terminal device pid = fork(); if (pid == -1) std::cerr << "Fork failed" << std::endl; if (pid != 0) _exit(0); // write our pid to the pid file std::ofstream pidFile(m_pid_file); if (not pidFile.is_open()) { std::cerr << "Failed to write to " << m_pid_file << ": " << strerror(errno) << std::endl; exit(1); } pidFile << getpid() << std::endl; pidFile.close(); if (chdir("/") != 0) { std::cerr << "Cannot chdir to /: " << strerror(errno) << std::endl; exit(1); } // close stdin close(STDIN_FILENO); open("/dev/null", O_RDONLY); } void daemon::open_log_file() { // open the log file int fd_out = open(m_stdout_log_file.c_str(), O_CREAT | O_APPEND | O_RDWR, 0644); if (fd_out < 0) { std::cerr << "Opening log file " << m_stdout_log_file << " failed" << std::endl; exit(1); } int fd_err; if (m_stderr_log_file == m_stdout_log_file) fd_err = fd_out; else { fd_err = open(m_stderr_log_file.c_str(), O_CREAT | O_APPEND | O_RDWR, 0644); if (fd_err < 0) { std::cerr << "Opening log file " << m_stderr_log_file << " failed" << std::endl; exit(1); } } // redirect stdout and stderr to the log file dup2(fd_out, STDOUT_FILENO); dup2(fd_err, STDERR_FILENO); // close the actual file descriptors to avoid leaks close(fd_out); if (fd_err != fd_out) close(fd_err); } bool daemon::run_main_loop(const std::string &address, uint16_t port, size_t nr_of_procs, size_t nr_of_threads, const std::string &run_as_user) { int sig = 0; int restarts = 0; for (;;) { auto start = time(nullptr); open_log_file(); if (sig == 0) std::cerr << "starting server" << std::endl; else std::cerr << "restarting server" << std::endl; std::cerr << "Listening to " << address << ':' << port << std::endl; sigset_t new_mask, old_mask; sigfillset(&new_mask); pthread_sigmask(SIG_BLOCK, &new_mask, &old_mask); preforked_server server([=, this]() { try { if (not run_as_user.empty()) { struct passwd* pw = getpwnam(run_as_user.c_str()); if (pw == NULL) { std::cerr << "Failed to set uid to " << run_as_user << ": " << strerror(errno) << std::endl; exit(1); } int ngroups = 0; if (getgrouplist(pw->pw_name, pw->pw_gid, nullptr, &ngroups) == -1 and ngroups > 0) { std::vector groups(ngroups); if (getgrouplist(pw->pw_name, pw->pw_gid, groups.data(), &ngroups) != -1 and setgroups(ngroups, groups.data()) == -1) { std::cerr << "Failed to set groups for " << run_as_user << ": " << strerror(errno) << std::endl; exit(1); } } if (setgid(pw->pw_gid) < 0) { std::cerr << "Failed to set gid for " << run_as_user << ": " << strerror(errno) << std::endl; exit(1); } if (setuid(pw->pw_uid) < 0) { std::cerr << "Failed to set uid to " << run_as_user << ": " << strerror(errno) << std::endl; exit(1); } } return m_factory(); } catch (const exception& e) { std::cerr << "Failed to launch server: " << e.what() << std::endl; exit(1); } }); std::thread t(std::bind(&zeep::http::preforked_server::run, &server, address, port, nr_of_procs, nr_of_threads)); try { server.start(); } catch (const exception &ex) { std::cerr << std::endl << "Exception running server: " << std::endl << ex.what() << std::endl << std::endl; exit(1); } pthread_sigmask(SIG_SETMASK, &old_mask, 0); // Wait for signal indicating time to shut down. sigset_t wait_mask; sigemptyset(&wait_mask); sigaddset(&wait_mask, SIGINT); sigaddset(&wait_mask, SIGHUP); sigaddset(&wait_mask, SIGQUIT); sigaddset(&wait_mask, SIGTERM); sigaddset(&wait_mask, SIGCHLD); pthread_sigmask(SIG_BLOCK, &wait_mask, 0); sigwait(&wait_mask, &sig); pthread_sigmask(SIG_SETMASK, &old_mask, 0); server.stop(); t.join(); if (sig != SIGCHLD) break; int status, pid; pid = waitpid(-1, &status, WUNTRACED); if (pid != -1) { if (WIFSIGNALED(status)) std::cerr << "child " << pid << " terminated by signal " << WTERMSIG(status) << std::endl; else std::cerr << "child terminated normally" << std::endl; } // did the client crash within the time window? if (time(nullptr) - start > m_restart_time_window) { restarts = 0; // no, it was outside, reset counter continue; } if (++restarts >= m_max_restarts) { std::cerr << "aborting due to excessive restarts" << std::endl; break; } } return sig == SIGHUP; } bool daemon::pid_is_for_executable() { using namespace std::literals; bool result = false; if (fs::exists(m_pid_file)) { std::ifstream pidfile(m_pid_file); if (not pidfile.is_open()) throw std::runtime_error("Failed to open pid file " + m_pid_file + ": " + strerror(errno)); int pid; pidfile >> pid; // if /proc/PID/exe points to our executable, this means we're already running char path[PATH_MAX] = ""; if (readlink(("/proc/" + std::to_string(pid) + "/exe").c_str(), path, sizeof(path)) > 0) { char exe[PATH_MAX] = ""; if (readlink("/proc/self/exe", exe, sizeof(exe)) == -1) throw std::runtime_error("could not get exe path ("s + strerror(errno) + ")"); result = strcmp(exe, path) == 0 or (ends_with(path, " (deleted)") and starts_with(path, exe)); } else if (errno == ENOENT) // link file doesn't exist result = false; else throw std::runtime_error("Failed to read executable link : "s + strerror(errno)); } return result; } #endif } // namespace zeep::http libzeep-5.1.7/lib-http/src/el-processing.cpp0000664000175000017500000011444414176701531020625 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // webapp::json is a set of classes used to implement an 'expression language' // A script language used in the XHTML templates used by the zeep webapp. // #include #include #include #include #include #include #include #include #include "format.hpp" namespace zeep::http { bool is_name_start_char(unicode uc) { return uc == L':' or (uc >= L'A' and uc <= L'Z') or uc == L'_' or (uc >= L'a' and uc <= L'z') or (uc >= 0x0C0 and uc <= 0x0D6) or (uc >= 0x0D8 and uc <= 0x0F6) or (uc >= 0x0F8 and uc <= 0x02FF) or (uc >= 0x0370 and uc <= 0x037D) or (uc >= 0x037F and uc <= 0x01FFF) or (uc >= 0x0200C and uc <= 0x0200D) or (uc >= 0x02070 and uc <= 0x0218F) or (uc >= 0x02C00 and uc <= 0x02FEF) or (uc >= 0x03001 and uc <= 0x0D7FF) or (uc >= 0x0F900 and uc <= 0x0FDCF) or (uc >= 0x0FDF0 and uc <= 0x0FFFD) or (uc >= 0x010000 and uc <= 0x0EFFFF); } bool is_name_char(unicode uc) { return uc == '-' or uc == '.' or (uc >= '0' and uc <= '9') or uc == 0x0B7 or is_name_start_char(uc) or (uc >= 0x00300 and uc <= 0x0036F) or (uc >= 0x0203F and uc <= 0x02040); } using request = http::request; using object = json::element; // -------------------------------------------------------------------- enum class token_type { undef, eof, number_int, number_float, string, object, assign, and_, or_, not_, eq, ne, lt, le, ge, gt, plus, minus, div, mod, mult, lparen, rparen, lbracket, rbracket, lbrace, rbrace, if_, elvis, else_, dot, hash, bar, true_, false_, in, comma, whitespace, fragment_separator, variable_template, selection_template, message_template, link_template, fragment_template, error }; // -------------------------------------------------------------------- // interpreter for expression language struct interpreter { using unicode = uint32_t; interpreter(const scope &scope) : m_scope(scope) {} // template // OutputIterator operator()(Match &m, OutputIterator out, std::regex::match_flag_type); object evaluate(const std::string &s); std::vector> evaluate_attr_expr(const std::string& s); bool evaluate_assert(const std::string& s); void evaluate_with(scope& scope, const std::string& s); object evaluate_link(const std::string& s); bool process(std::string &s); void match(token_type t); unsigned char next_byte(); unicode get_next_char(); void retract(); void get_next_token(); object parse_expr(); // or_expr ( '?' expr ':' expr )? object parse_or_expr(); // and_expr ( 'or' and_expr)* object parse_and_expr(); // equality_expr ( 'and' equality_expr)* object parse_equality_expr(); // relational_expr ( ('=='|'!=') relational_expr )? object parse_relational_expr(); // additive_expr ( ('<'|'<='|'>='|'>') additive_expr )* object parse_additive_expr(); // multiplicative_expr ( ('+'|'-') multiplicative_expr)* object parse_multiplicative_expr(); // unary_expr (('%'|'/') unary_expr)* object parse_unary_expr(); // ('-')? primary_expr object parse_primary_expr(); // '(' expr ')' | number | string object parse_literal_substitution();// '|xxx ${var}|' object parse_template_expr(); object parse_link_template_expr(); object parse_fragment_expr(); object parse_selector(); object parse_utility_expr(); object call_method(const std::string& className, const std::string& method, std::vector& params); const scope &m_scope; token_type m_lookahead; std::string m_token_string; int64_t m_token_number_int; double m_token_number_float; std::string::const_iterator m_ptr, m_end; bool m_return_whitespace = false; bool m_expect_fragment_spec = false; }; // template // inline OutputIterator interpreter::operator()(Match &m, OutputIterator out, std::regex_constants::match_flag_type) // { // string s(m[1]); // process(s); // copy(s.begin(), s.end(), out); // return out; // } object interpreter::evaluate(const std::string &s) { object result; try { m_ptr = s.begin(); m_end = s.end(); get_next_token(); if (m_lookahead != token_type::eof) result = parse_expr(); match(token_type::eof); } catch (const std::exception& e) { using namespace std::literals; result = "Error parsing expression: "s + e.what(); } return result; } std::vector> interpreter::evaluate_attr_expr(const std::string& s) { std::vector> result; m_ptr = s.begin(); m_end = s.end(); get_next_token(); for (;;) { std::string var = m_token_string; match(token_type::object); match (token_type::assign); auto value = parse_expr(); result.emplace_back(var, value.as()); if (m_lookahead != token_type::comma) break; match(token_type::comma); } match(token_type::eof); return result; } bool interpreter::evaluate_assert(const std::string& s) { bool result = true; m_ptr = s.begin(); m_end = s.end(); get_next_token(); for (;;) { auto value = parse_expr(); if (not value) { result = false; break; } if (m_lookahead != token_type::comma) break; match(token_type::comma); } // match(token_type::eof); return result; } void interpreter::evaluate_with(scope& scope, const std::string& s) { m_ptr = s.begin(); m_end = s.end(); get_next_token(); while (m_lookahead == token_type::object) { auto name = m_token_string; match(token_type::object); match(token_type::assign); auto value = parse_expr(); scope.put(name, value); if (m_lookahead == token_type::comma) { match(token_type::comma); continue; } } match(token_type::eof); } object interpreter::evaluate_link(const std::string& s) { object result; try { m_ptr = s.begin(); m_end = s.end(); get_next_token(); switch (m_lookahead) { case token_type::object: case token_type::fragment_separator: result = parse_fragment_expr(); break; case token_type::link_template: match(token_type::link_template); result = parse_fragment_expr(); match(token_type::rbrace); break; default: m_expect_fragment_spec = true; result = parse_primary_expr(); break; } match(token_type::eof); } catch (const std::exception& e) { using namespace std::literals; result = "Error parsing expression: "s + e.what(); } return result; } bool interpreter::process(std::string &s) { bool result = false; try { m_ptr = s.begin(); m_end = s.end(); get_next_token(); object obj; if (m_lookahead != token_type::eof) obj = parse_expr(); match(token_type::eof); if (obj.is_null()) s.clear(); else s = obj.as(); result = true; } catch (const std::exception &e) { result = false; } return result; } void interpreter::match(token_type t) { if (t != m_lookahead) throw zeep::exception("syntax error"); get_next_token(); } unsigned char interpreter::next_byte() { char result = 0; if (m_ptr < m_end) { result = *m_ptr; ++m_ptr; } m_token_string += result; return static_cast(result); } // We assume all paths are in valid UTF-8 encoding interpreter::unicode interpreter::get_next_char() { unicode result = 0; unsigned char ch[5]; ch[0] = next_byte(); if ((ch[0] & 0x080) == 0) result = ch[0]; else if ((ch[0] & 0x0E0) == 0x0C0) { ch[1] = next_byte(); if ((ch[1] & 0x0c0) != 0x080) throw zeep::exception("Invalid utf-8"); result = ((ch[0] & 0x01F) << 6) | (ch[1] & 0x03F); } else if ((ch[0] & 0x0F0) == 0x0E0) { ch[1] = next_byte(); ch[2] = next_byte(); if ((ch[1] & 0x0c0) != 0x080 or (ch[2] & 0x0c0) != 0x080) throw zeep::exception("Invalid utf-8"); result = ((ch[0] & 0x00F) << 12) | ((ch[1] & 0x03F) << 6) | (ch[2] & 0x03F); } else if ((ch[0] & 0x0F8) == 0x0F0) { ch[1] = next_byte(); ch[2] = next_byte(); ch[3] = next_byte(); if ((ch[1] & 0x0c0) != 0x080 or (ch[2] & 0x0c0) != 0x080 or (ch[3] & 0x0c0) != 0x080) throw zeep::exception("Invalid utf-8"); result = ((ch[0] & 0x007) << 18) | ((ch[1] & 0x03F) << 12) | ((ch[2] & 0x03F) << 6) | (ch[3] & 0x03F); } if (result > 0x10ffff) throw zeep::exception("invalid utf-8 character (out of range)"); return result; } void interpreter::retract() { std::string::iterator c = m_token_string.end(); // skip one valid character back in the input buffer // since we've arrived here, we can safely assume input // is valid UTF-8 do --c; while ((*c & 0x0c0) == 0x080); if (m_ptr != m_end or *c != 0) m_ptr -= m_token_string.end() - c; m_token_string.erase(c, m_token_string.end()); } void interpreter::get_next_token() { enum class State { Start, Equals, ExclamationMark, LessThan, GreaterThan, Question, Number, NumberFraction, Name, Literal, Colon, Hash, TemplateStart } state = State::Start; token_type token = token_type::undef; double fraction = 1.0; m_token_string.clear(); while (token == token_type::undef) { unicode ch = get_next_char(); switch (state) { case State::Start: switch (ch) { case 0: token = token_type::eof; break; case '(': token = token_type::lparen; break; case ')': token = token_type::rparen; break; case '[': token = token_type::lbracket; break; case ']': token = token_type::rbracket; break; case '{': token = token_type::lbrace; break; case '}': token = token_type::rbrace; break; case '?': state = State::Question; break; case '/': token = token_type::div; break; case '+': token = token_type::plus; break; case '-': token = token_type::minus; break; case '.': token = token_type::dot; break; case ',': token = token_type::comma; break; case '|': token = token_type::bar; break; case '=': state = State::Equals; break; case '!': state = State::ExclamationMark; break; case '<': state = State::LessThan; break; case '>': state = State::GreaterThan; break; case ':': state = State::Colon; break; case '*': case '$': case '#': case '@': case '~': state = State::TemplateStart; break; case ' ': case '\n': case '\r': case '\t': if (m_return_whitespace) token = token_type::whitespace; else m_token_string.clear(); break; case '\'': state = State::Literal; break; default: if (ch >= '0' and ch <= '9') { m_token_number_int = ch - '0'; state = State::Number; } else if (is_name_start_char(ch)) state = State::Name; else token = token_type::error; // throw zeep::exception("invalid character (" + to_hex(ch) + ") in expression"); } break; case State::TemplateStart: if (ch == '{') { switch (m_token_string[0]) { case '$': token = token_type::variable_template; break; case '*': token = token_type::selection_template; break; case '#': token = token_type::message_template; break; case '@': token = token_type::link_template; break; case '~': token = token_type::fragment_template; break; default: assert(false); } } else { retract(); if (m_token_string[0] == '*') token = token_type::mult; else if (m_token_string[0] == '#') state = State::Hash; else token = token_type::error; // else // throw zeep::exception("invalid character (" + std::string{static_cast(isprint(ch) ? ch : ' ')} + '/' + to_hex(ch) + ") in expression"); } break; case State::Equals: if (ch != '=') { retract(); token = token_type::assign; } else token = token_type::eq; break; case State::Question: if (ch == ':') token = token_type::elvis; else { retract(); token = token_type::if_; } break; case State::ExclamationMark: if (ch != '=') { retract(); token = token_type::error; // throw zeep::exception("unexpected character ('!') in expression"); } token = token_type::ne; break; case State::LessThan: if (ch == '=') token = token_type::le; else { retract(); token = token_type::lt; } break; case State::GreaterThan: if (ch == '=') token = token_type::ge; else { retract(); token = token_type::gt; } break; case State::Number: if (ch >= '0' and ch <= '9') m_token_number_int = 10 * m_token_number_int + (ch - '0'); else if (ch == '.') { m_token_number_float = static_cast(m_token_number_int); fraction = 0.1; state = State::NumberFraction; } else { retract(); token = token_type::number_int; } break; case State::NumberFraction: if (ch >= '0' and ch <= '9') { m_token_number_float += fraction * (ch - '0'); fraction /= 10; } else { retract(); token = token_type::number_float; } break; case State::Name: if (ch == '.' or ch == ':' or not is_name_char(ch)) { retract(); if (m_token_string == "div") token = token_type::div; else if (m_token_string == "mod") token = token_type::mod; else if (m_token_string == "and") token = token_type::and_; else if (m_token_string == "or") token = token_type::or_; else if (m_token_string == "not") token = token_type::not_; else if (m_token_string == "lt") token = token_type::lt; else if (m_token_string == "le") token = token_type::le; else if (m_token_string == "ge") token = token_type::ge; else if (m_token_string == "gt") token = token_type::gt; else if (m_token_string == "ne") token = token_type::ne; else if (m_token_string == "eq") token = token_type::eq; else if (m_token_string == "true") token = token_type::true_; else if (m_token_string == "false") token = token_type::false_; else if (m_token_string == "in") token = token_type::in; else token = token_type::object; } break; case State::Literal: if (ch == 0) token = token_type::error; // throw zeep::exception("run-away string, missing quote character?"); else if (ch == '\'') { token = token_type::string; m_token_string = m_token_string.substr(1, m_token_string.length() - 2); } break; case State::Hash: if (ch == '.' or not is_name_char(ch)) { retract(); token = token_type::hash; } break; case State::Colon: if (ch == ':') token = token_type::fragment_separator; else { retract(); token = token_type::else_; } break; } } m_lookahead = token; } object interpreter::parse_expr() { object result; result = parse_or_expr(); if (m_lookahead == token_type::if_) { match(m_lookahead); object a = parse_expr(); if (m_lookahead == token_type::else_) { match(token_type::else_); object b = parse_expr(); if (result) result = a; else result = b; } else if (result) result = a; else result = {}; } else if (m_lookahead == token_type::elvis) { match(m_lookahead); object a = parse_expr(); if (not result) result = a; } return result; } object interpreter::parse_or_expr() { object result = parse_and_expr(); while (m_lookahead == token_type::or_) { match(m_lookahead); bool b1 = result.as(); bool b2 = parse_and_expr().as(); result = b1 or b2; } return result; } object interpreter::parse_and_expr() { object result = parse_equality_expr(); while (m_lookahead == token_type::and_) { match(m_lookahead); bool b1 = result.as(); bool b2 = parse_equality_expr().as(); result = b1 and b2; } return result; } object interpreter::parse_equality_expr() { object result = parse_relational_expr(); if (m_lookahead == token_type::eq) { match(m_lookahead); result = (result == parse_relational_expr()); } else if (m_lookahead == token_type::ne) { match(m_lookahead); result = not(result == parse_relational_expr()); } return result; } object interpreter::parse_relational_expr() { object result = parse_additive_expr(); switch (m_lookahead) { case token_type::lt: match(m_lookahead); result = (result < parse_additive_expr()); break; case token_type::le: match(m_lookahead); result = (result <= parse_additive_expr()); break; case token_type::ge: match(m_lookahead); result = (parse_additive_expr() <= result); break; case token_type::gt: match(m_lookahead); result = (parse_additive_expr() < result); break; case token_type::not_: { match(token_type::not_); match(token_type::in); object list = parse_additive_expr(); result = not list.contains(result); break; } case token_type::in: { match(m_lookahead); object list = parse_additive_expr(); result = list.contains(result); break; } default: break; } return result; } object interpreter::parse_additive_expr() { object result = parse_multiplicative_expr(); while (m_lookahead == token_type::plus or m_lookahead == token_type::minus) { if (m_lookahead == token_type::plus) { match(m_lookahead); result = (result + parse_multiplicative_expr()); } else { match(m_lookahead); result = (result - parse_multiplicative_expr()); } } return result; } object interpreter::parse_multiplicative_expr() { object result = parse_unary_expr(); while (m_lookahead == token_type::div or m_lookahead == token_type::mod or m_lookahead == token_type::mult) { if (m_lookahead == token_type::mult) { match(m_lookahead); result = (result * parse_unary_expr()); } else if (m_lookahead == token_type::div) { match(m_lookahead); result = (result / parse_unary_expr()); } else { match(m_lookahead); result = (result % parse_unary_expr()); } } return result; } object interpreter::parse_unary_expr() { object result; if (m_lookahead == token_type::minus) { match(m_lookahead); result = -(parse_primary_expr()); } else if (m_lookahead == token_type::not_) { match(m_lookahead); result = not parse_primary_expr().as(); } else result = parse_primary_expr(); return result; } object interpreter::parse_template_expr() { object result; bool save_return_white_space = m_return_whitespace; m_return_whitespace = false; switch (m_lookahead) { case token_type::variable_template: match(token_type::variable_template); result = parse_expr(); m_return_whitespace = save_return_white_space; match(token_type::rbrace); break; case token_type::link_template: match(token_type::link_template); result = parse_link_template_expr(); m_return_whitespace = save_return_white_space; match(token_type::rbrace); break; case token_type::selection_template: match(token_type::selection_template); if (m_lookahead == token_type::object) { result = m_scope.lookup(m_token_string, true); match(token_type::object); for (;;) { if (m_lookahead == token_type::dot) { match(m_lookahead); if (result.type() == object::value_type::array and (m_token_string == "count" or m_token_string == "length")) result = result.size(); else if (m_token_string == "empty") result = result.empty(); else if (result.type() == object::value_type::object) result = const_cast(result)[m_token_string]; else result = object::value_type::null; match(token_type::object); continue; } if (m_lookahead == token_type::lbracket) { match(m_lookahead); object index = parse_expr(); match(token_type::rbracket); if (index.empty() or (result.type() != object::value_type::array and result.type() != object::value_type::object)) result = object(); else if (result.type() == object::value_type::array) result = result[index.as()]; else if (result.type() == object::value_type::object) result = result[index.as()]; else result = object::value_type::null; continue; } break; } } else result = parse_expr(); m_return_whitespace = save_return_white_space; match(token_type::rbrace); break; default: throw zeep::exception("syntax error, unexpected token: " + m_token_string); } return result; } object interpreter::parse_primary_expr() { object result; switch (m_lookahead) { case token_type::true_: result = true; match(m_lookahead); break; case token_type::false_: result = false; match(m_lookahead); break; case token_type::number_int: result = m_token_number_int; match(m_lookahead); break; case token_type::number_float: result = m_token_number_float; match(m_lookahead); break; case token_type::string: result = m_token_string; match(m_lookahead); break; case token_type::lparen: match(m_lookahead); result = parse_expr(); match(token_type::rparen); break; case token_type::hash: result = parse_utility_expr(); break; // a list case token_type::lbrace: match(m_lookahead); for (;;) { result.push_back(parse_expr()); if (m_lookahead == token_type::comma) { match(m_lookahead); continue; } break; } match(token_type::rbrace); break; case token_type::bar: match(token_type::bar); result = parse_literal_substitution(); match(token_type::bar); break; case token_type::object: result = m_scope.lookup(m_token_string); match(token_type::object); for (;;) { if (m_lookahead == token_type::dot) { match(m_lookahead); if (not result.is_null()) { if (result.type() == object::value_type::array and (m_token_string == "count" or m_token_string == "length")) result = object((uint32_t)result.size()); else if (m_token_string == "empty") result = result.empty(); else if (result.type() == object::value_type::object) result = const_cast(result)[m_token_string]; else result = object::value_type::null; } match(token_type::object); continue; } if (m_lookahead == token_type::lbracket) { match(m_lookahead); object index = parse_expr(); match(token_type::rbracket); if (not result.is_null()) { if (result.type() == object::value_type::array and not (result.empty() or index.empty())) result = result[index.as()]; else if (result.type() == object::value_type::object and not (result.empty() or index.empty())) result = result[index.as()]; else result = object::value_type::null; } continue; } break; } break; case token_type::variable_template: case token_type::link_template: case token_type::selection_template: result = parse_template_expr(); break; case token_type::fragment_template: match(token_type::fragment_template); result = parse_fragment_expr(); match(token_type::rbrace); break; default: throw zeep::exception("syntax error, expected number, string or object"); } return result; } object interpreter::parse_literal_substitution() { std::string result; m_return_whitespace = true; while (m_lookahead != token_type::bar and m_lookahead != token_type::eof) { switch (m_lookahead) { case token_type::variable_template: case token_type::selection_template: case token_type::message_template: result += parse_template_expr().as(); break; default: result += m_token_string; match(m_lookahead); break; } } m_return_whitespace = false; return result; } // -------------------------------------------------------------------- object interpreter::parse_link_template_expr() { std::string path; int braces = 0; // in case of a relative URL starting with a forward slash, we prefix the URL with the context_name of the server if (m_lookahead == token_type::div) { path = '/'; match(token_type::div); auto context = m_scope.get_context_name(); if (not context.empty()) path += context + '/'; } while (m_lookahead != token_type::lparen and m_lookahead != token_type::eof) { if (m_lookahead == token_type::rbrace) { if (braces-- == 0) break; path += m_token_string; match(token_type::rbrace); continue; } switch (m_lookahead) { case token_type::variable_template: case token_type::selection_template: path += parse_template_expr().as(); break; case token_type::lbrace: path += m_token_string; match(token_type::lbrace); ++braces; break; default: path += m_token_string; match(m_lookahead); break; } } if (m_lookahead == token_type::lparen) { match(token_type::lparen); std::map parameters; for (;;) { std::string name = m_token_string; match(token_type::object); if (m_lookahead == token_type::assign) { match(token_type::assign); std::string value = parse_primary_expr().as(); // put into path directly, if found std::string::size_type p = path.find('{' + name + '}'); if (p == std::string::npos) parameters[name] = value; else { do { path = path.substr(0, p) + value + path.substr(p + name.length() + 2); p += value.length(); } while ((p = path.find('{' + name + '}', p)) != std::string::npos); } } else parameters[name] = ""; if (m_lookahead == token_type::comma) { match(token_type::comma); continue; } break; } match(token_type::rparen); if (not parameters.empty()) { path += '?'; auto n = parameters.size(); for (auto p: parameters) { path += encode_url(p.first); if (not p.second.empty()) path += '=' + encode_url(p.second); if (--n > 0) path += '&'; } } } return path; } // -------------------------------------------------------------------- object interpreter::parse_fragment_expr() { object result{ {"fragment-spec", true } }; if (m_lookahead == token_type::fragment_separator) result["template"] = "this"; else if (m_lookahead == token_type::object) { result["template"] = m_token_string; match(m_lookahead); } else if (m_lookahead == token_type::rbrace) { result["template"] = "this"; result["selector"] = { { "xpath", "" } }; } else result["template"] = parse_expr(); if (m_lookahead == token_type::fragment_separator) { match(token_type::fragment_separator); result["selector"] = parse_selector(); } return result; } // -------------------------------------------------------------------- object interpreter::parse_selector() { object result; std::string xpath; while (m_lookahead == token_type::div or m_lookahead == token_type::object or m_lookahead == token_type::lbracket or m_lookahead == token_type::dot or m_lookahead == token_type::hash) { bool divided = false; if (m_lookahead == token_type::div) { divided = true; match(m_lookahead); if (m_lookahead == token_type::div) { match(m_lookahead); xpath += "//"; } else xpath += "/"; } else xpath += "//"; if (m_lookahead == token_type::object) { std::string name = m_token_string; match(m_lookahead); if (m_lookahead == token_type::lparen and (name == "text" or name == "comment" or name == "processing-instruction" or name == "node")) { match(m_lookahead); match(token_type::rparen); xpath += name + "()"; } else { if (divided) xpath += name; else xpath += "*[name()='"+name+"' or " "attribute::*[namespace-uri() = $ns and " "(local-name() = 'ref' or local-name() = 'fragment') and " "starts-with(string(), '" + name + "')]" "]"; if (m_lookahead == token_type::lparen) { match(token_type::lparen); while (m_lookahead != token_type::rparen and m_lookahead != token_type::eof) { result["params"].push_back(parse_expr()); if (m_lookahead == token_type::comma) { match(m_lookahead); continue; } break; } match(token_type::rparen); // break; // what else? } } } else xpath += "*"; while (m_lookahead == token_type::lbracket or m_lookahead == token_type::dot or m_lookahead == token_type::hash) { switch (m_lookahead) { case token_type::lbracket: do { xpath += m_token_string; match(m_lookahead); } while (m_lookahead != token_type::rbracket and m_lookahead != token_type::eof); xpath += m_token_string; match(token_type::rbracket); break; case token_type::dot: match(m_lookahead); xpath += "[@class='" + m_token_string + "']"; match(token_type::object); break; case token_type::hash: xpath += "[@id='" + m_token_string.substr(1) + "']"; result["by-id"] = true; match(m_lookahead); break; default: break; } } } result["xpath"] = xpath; return result; } // -------------------------------------------------------------------- object interpreter::parse_utility_expr() { auto className = m_token_string; match(token_type::hash); match(token_type::dot); auto method = m_token_string; match(token_type::object); std::vector params; if (m_lookahead == token_type::lparen) { match(token_type::lparen); while (m_lookahead != token_type::rparen) { params.push_back(parse_expr()); if (m_lookahead == token_type::comma) { match(token_type::comma); continue; } break; } match(token_type::rparen); } return call_method(className, method, params); } object interpreter::call_method(const std::string& className, const std::string& method, std::vector& params) { object result; if (className[0] == '#') result = expression_utility_object_base::evaluate(m_scope, className.substr(1), method, params); // if (result.is_null()) // throw runtime_error("Undefined class for utility object call: " + className); return result; } // -------------------------------------------------------------------- // some expression utility objects expression_utility_object_base::instance* expression_utility_object_base::s_head; class date_expr_util_object : public expression_utility_object { public: static constexpr const char* name() { return "dates"; } virtual object evaluate(const scope& scope, const std::string& method, const std::vector& params) const { object result; if (method == "format") { if (params.size() == 2 and params[0].is_string()) { tm t = {}; std::istringstream ss(params[0].as()); ss >> std::get_time(&t, "%Y-%m-%d %H:%M:%S"); if (ss.fail()) // hmmmm, lets try the ISO format then { try { auto pt = zeep::value_serializer::from_string(params[0].as()); t = boost::posix_time::to_tm(pt); } catch(const std::exception& e) { throw std::runtime_error("Invalid date"); } } std::wostringstream os; os.imbue(scope.get_request().get_locale()); std::wstring_convert> myconv; std::wstring time = myconv.from_bytes(params[1].as()); os << std::put_time(&t, time.c_str()); result = os.str(); } } return result; } } s_date_instance; class number_expr_util_object : public expression_utility_object { public: static constexpr const char* name() { return "numbers"; } virtual object evaluate(const scope& scope, const std::string& method, const std::vector& params) const { object result; if (method == "formatDecimal") { if (params.size() >= 1 and params[0].is_number()) { int intDigits = 1; if (params.size() >= 2 and params[1].is_number_int()) intDigits = params[1].as(); int decimals = 0; if (params.size() >= 3 and params[2].is_number_int()) decimals = params[2].as(); double d; if (params[0].is_number_int()) d = static_cast(params[0].as()); else d = params[0].as(); return FormatDecimal(d, intDigits, decimals, scope.get_request().get_locale()); } } else if (method == "formatDiskSize") { if (params.size() >= 1 and params[0].is_number()) { double nr = params[0].as(); const char kBase[] = {'B', 'K', 'M', 'G', 'T', 'P', 'E'}; // whatever int base = 0; while (nr > 1024) { nr /= 1024; ++base; } int decimals = 0; if (params.size() >= 2 and params[1].is_number_int()) decimals = params[1].as(); return FormatDecimal(nr, 1, decimals, scope.get_request().get_locale()) + ' ' + kBase[base]; } } return {}; } } s_number_instance; class request_expr_util_object : public expression_utility_object { public: static constexpr const char* name() { return "request"; } virtual object evaluate(const scope& scope, const std::string& method, const std::vector& params) const { object result; if (method == "getRequestURI") result = scope.get_request().get_uri(); else if (method == "getRequestURL") result = scope.get_request().get_uri(); else if ((method == "getParameter") and params.size() == 1) result = scope.get_request().get_parameter(params[0].as().c_str()); return result; } } s_request_instance; class security_expr_util_object : public expression_utility_object { public: static constexpr const char* name() { return "security"; } virtual object evaluate(const scope& scope, const std::string& method, const std::vector& params) const { object result; if (method == "hasRole") { if (params.size() == 1 and params[0].is_string()) { auto role = params[0].as(); auto roles = scope.get_credentials()["role"]; result = roles.is_array() and roles.contains(role); } } else if (method == "authorized") { result = scope.get_credentials()["username"].is_string(); } else if (method == "username") { result = scope.get_credentials()["username"]; } return result; } } s_security_instance; // -------------------------------------------------------------------- // interpreter calls bool process_el(const scope &scope, std::string &text) { interpreter interpreter(scope); return interpreter.process(text); } std::string process_el_2(const scope& scope, const std::string& text) { std::string s = text; interpreter interpreter(scope); return interpreter.process(s) ? s : text; } object evaluate_el(const scope &scope, const std::string &text) { interpreter interpreter(scope); return interpreter.evaluate(text); } std::vector> evaluate_el_attr(const scope& scope, const std::string& text) { interpreter interpreter(scope); return interpreter.evaluate_attr_expr(text); } bool evaluate_el_assert(const scope& scope, const std::string& text) { interpreter interpreter(scope); return interpreter.evaluate_assert(text); } void evaluate_el_with(scope& scope, const std::string& text) { interpreter interpreter(scope); interpreter.evaluate_with(scope, text); } object evaluate_el_link(const scope& scope, const std::string& text) { interpreter interpreter(scope); return interpreter.evaluate_link(text); } // -------------------------------------------------------------------- // scope std::ostream &operator<<(std::ostream &lhs, const scope &rhs) { const scope *s = &rhs; while (s != nullptr) { for (scope::data_map::value_type e : s->m_data) lhs << e.first << " = " << e.second << std::endl; s = s->m_next; } return lhs; } scope::scope() : m_next(nullptr), m_depth(0), m_req(nullptr), m_server(nullptr) { } scope::scope(const scope &next) : m_next(const_cast(&next)) , m_depth(next.m_depth + 1) , m_req(next.m_req) , m_server(next.m_server) { if (m_depth > 1000) throw std::runtime_error("scope stack overflow"); } scope::scope(const request &req) : m_next(nullptr), m_depth(0), m_req(&req), m_server(nullptr) { } scope::scope(const basic_server& server, const request &req) : m_next(nullptr), m_depth(0), m_req(&req), m_server(&server) { } object &scope::operator[](const std::string &name) { return lookup(name); } const object& scope::lookup(const std::string &name, bool includeSelected) const { const object* result = nullptr; auto i = m_data.find(name); if (i != m_data.end()) result = &i->second; else if (includeSelected and m_selected.contains(name)) result = &*m_selected.find(name); else if (m_next != nullptr) result = &m_next->lookup(name, includeSelected); if (result == nullptr) { static object s_null; result = &s_null; } return *result; } const object& scope::operator[](const std::string &name) const { return lookup(name); } object& scope::lookup(const std::string &name) { object* result = nullptr; auto i = m_data.find(name); if (i != m_data.end()) result = &i->second; else if (m_next != nullptr) result = &m_next->lookup(name); if (result == nullptr) { m_data[name] = object(); result = &m_data[name]; } return *result; } const request& scope::get_request() const { // if (m_next) // return m_next->get_request(); if (m_req == nullptr) throw zeep::exception("Invalid scope, no request"); return *m_req; } std::string scope::get_context_name() const { if (not m_server) throw zeep::exception("Invalid scope, no server"); return m_server->get_context_name(); } json::element scope::get_credentials() const { if (m_req == nullptr or m_server == nullptr) throw zeep::exception("Invalid scope, no request, no server"); return m_req->get_credentials(); } void scope::select_object(const object& o) { m_selected = o; } auto scope::get_nodeset(const std::string& name) const -> node_set_type { if (m_nodesets.count(name)) { node_set_type result; // return a clone of the stored nodes. for (auto& n: m_nodesets.at(name)) result.emplace_back(n->clone()); return result; } if (m_next == nullptr) return {}; return m_next->get_nodeset(name); } void scope::set_nodeset(const std::string& name, node_set_type&& nodes) { m_nodesets.emplace(std::make_pair(name, std::move(nodes))); } std::string scope::get_csrf_token() const { return get_request().get_cookie("csrf-token"); } } // namespace zeep::http libzeep-5.1.7/lib-http/src/error-handler.cpp0000664000175000017500000001005514176701531020610 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include namespace zeep::http { error_handler::error_handler(const std::string& error_template) : m_error_template(error_template) { } error_handler::~error_handler() { } bool error_handler::create_error_reply(const request& req, std::exception_ptr eptr, reply& reply) { bool result = false; try { if (eptr) std::rethrow_exception(eptr); } catch (const status_type& s) { result = create_error_reply(req, s, get_status_description(s), reply); } catch (const unauthorized_exception&) { result = create_unauth_reply(req, reply); } catch (const std::exception& ex) { result = create_error_reply(req, internal_server_error, ex.what(), reply); } catch (...) { result = create_error_reply(req, internal_server_error, "unhandled exception", reply); } return result; } bool error_handler::create_unauth_reply(const request& req, reply& rep) { return create_error_reply(req, unauthorized, "You don't have access to this page", rep); } bool error_handler::create_error_reply(const request& req, status_type status, reply& rep) { return create_error_reply(req, status, get_status_description(status), rep); } bool error_handler::create_error_reply(const request& req, status_type status, const std::string& message, reply& rep) { bool handled = false; if (not m_error_template.empty() and m_server->has_template_processor()) { auto& template_processor = m_server->get_template_processor(); scope scope(*get_server(), req); object error { { "nr", static_cast(status) }, { "head", get_status_text(status) }, { "description", get_status_description(status) }, { "message", message }, { "request", { { "method", req.get_method() }, { "uri", req.get_uri() } } } }; auto credentials = req.get_credentials(); if (credentials.is_object()) error["request"]["username"] = credentials["user"]; scope.put("error", error); try { template_processor.create_reply_from_template(m_error_template, scope, rep); handled = true; } catch(const std::exception&) { using namespace xml::literals; auto doc = R"( Error

Additional information:

)"_xml; template_processor.process_tags(doc.child(), scope); rep.set_content(doc); handled = true; } } if (not handled) { rep = reply::stock_reply(status, message); handled = true; } else rep.set_status(status); return true; } }libzeep-5.1.7/lib-http/src/format.cpp0000664000175000017500000001152314176701531017335 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include "format.hpp" namespace { std::string decimal_point(std::locale loc) { std::string result; if (std::has_facet>(loc)) { std::wstring s{ std::use_facet>(loc).decimal_point() }; std::wstring_convert> conv; result = conv.to_bytes(s); } return result; } std::string thousands_sep(std::locale loc) { std::string result; if (std::has_facet>(loc)) { std::wstring s{ std::use_facet>(loc).thousands_sep() }; std::wstring_convert> conv; result = conv.to_bytes(s); } return result; } std::string grouping(std::locale loc) { std::string result; if (std::has_facet>(loc)) result = std::use_facet>(loc).grouping(); return result; } struct thousand_grouping { public: thousand_grouping(std::locale loc) : m_sep(thousands_sep(loc)), m_grouping(grouping(loc)) { } bool operator()(int exp10) const { std::deque gs(m_grouping.begin(), m_grouping.end()); bool result = false; if (not gs.empty()) { int g = gs.front(); for (;;) { if (exp10 < g) break; if (exp10 == g) { result = true; break; } if (gs.size() > 1) gs.pop_front(); g += gs.front(); } } return result; } std::string separator() const { return m_sep; } private: std::string m_sep, m_grouping; }; template class Decimal { public: Decimal(T x); std::string formatFixed(int minIntDigits, int decimals, std::locale loc); friend std::ostream& operator<<(std::ostream& os, Decimal d) { os << "crunched: " << d.m_crunched << " exp10: " << d.m_exp10 << " dec: " << d.m_dec; return os; } private: std::tuple roundDecimal(int n); T m_crunched; int m_exp10; std::string m_dec; }; template Decimal::Decimal(T x) { // CrunchDouble int exp = (x == 0) ? 0 : static_cast(1 + std::logb(x)); int n = m_exp10 = (exp * 301029) / 1000000; auto p = 10.0; if (n < 0) { for (n = -n; n > 0; n >>= 1) { if (n & 1) x *= p; p *= p; } } else { T f = 1.0; for (; n > 0; n >>= 1) { if (n & 1) f *= p; p *= p; } x /= f; } while (std::fabs(x) >= 1.0) { x *= 0.1; ++m_exp10; } while (std::fabs(x) < 0.1) { x *= 10.0; --m_exp10; } m_crunched = x; // Num2Dec int digits = std::numeric_limits::digits10 + 1; int ix = 0; if (x < 0) x = -x; const double kDigitValues[8] = { 1.0E+01, 1.0E+02, 1.0E+03, 1.0E+04, 1.0E+05, 1.0E+06, 1.0E+07, 1.0E+08 }; while (digits > 0) { n = digits; if (n > 8) n = 8; digits -= n; m_dec.insert(m_dec.end(), n, ' '); x *= kDigitValues[n - 1]; auto lx = lrint(trunc(x)); x -= lx; for (int i = n - 1; i >= 0; --i) { m_dec[ix + i] = lx % 10 + '0'; lx /= 10; } ix += 8; } } template std::string Decimal::formatFixed(int intDigits, int decimals, std::locale loc) { int digits = decimals + intDigits; if (m_exp10 > intDigits) digits += m_exp10 - intDigits; int exp10; std::string dec; std::tie(dec, exp10) = roundDecimal(decimals + m_exp10); std::string s; thousand_grouping tg(loc); auto dp = dec.begin(), de = dec.end(); int exp = intDigits; if (exp < exp10) exp = exp10; for (int i = 0; i < digits; ++i) { if (i > 0) { if (tg(exp)) s += tg.separator(); else if (exp == 0) s += decimal_point(loc); } if (exp <= exp10 and dp != de) s += *dp++; else s += '0'; --exp; } return s; } template std::tuple Decimal::roundDecimal(int newLength) { std::string dec = m_dec; int exp10 = m_exp10; int l = static_cast(dec.length()); if (newLength < 0) dec = "0"; else if (newLength < l) { l = newLength + 1; int carry = dec[l - 1] >= '5'; dec.resize(l - 1); while (newLength > 0) { --l; int c = dec[l - 1] -'0' + carry; carry = c > 9; if (carry == 1) { --newLength; dec.resize(newLength); } else { dec[l - 1] = static_cast(c + '0'); dec.resize(l); break; } } if (carry == 1) { ++exp10; dec += '1'; } else if (newLength == 0) dec = "0"; } return std::make_tuple(dec, exp10); } } namespace zeep::http { std::string FormatDecimal(double d, int integerDigits, int decimalDigits, std::locale loc) { Decimal dec(d); return dec.formatFixed(integerDigits, decimalDigits, loc); } } libzeep-5.1.7/lib-http/src/format.hpp0000664000175000017500000000124114176701531017336 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// This file contains definitions of various utility routines #include #include #include namespace zeep::http { /// \brief A locale dependent formatting of a decimal number /// /// Returns a formatted number with the specified number of digits /// using separators taken from std::locale \a loc std::string FormatDecimal(double d, int integerDigits, int decimalDigits, std::locale loc); } libzeep-5.1.7/lib-http/src/glob.cpp0000664000175000017500000000545014176701531016772 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include "glob.hpp" // -------------------------------------------------------------------- namespace zeep::http { namespace { bool Match(const char* pattern, const char* name) { for (;;) { char op = *pattern; switch (op) { case 0: return *name == 0; case '*': { // separate shortcut if (pattern[1] == '*' and pattern[2] == '/' and Match(pattern + 3, name)) return true; // ends with ** if (pattern[1] == '*' and pattern[2] == 0) return true; // ends with * if (pattern[1] == 0) { while (*name) { if (*name == '/' or *name == '\\') return false; ++name; } return true; } // contains ** if (pattern[1] == '*') { while (*name) { if (Match(pattern + 2, name)) return true; ++name; } return false; } // contains just * while (*name) { if (Match(pattern + 1, name)) return true; if (*name == '/') return false; ++name; } return false; } case '?': if (*name) return Match(pattern + 1, name + 1); else return false; default: if ((*name == '/' and op == '\\') or (*name == '\\' and op == '/') or tolower(*name) == tolower(op)) { ++name; ++pattern; } else return false; break; } } } void expand_group(const std::string& pattern, std::vector& expanded) { static std::regex rx(R"(\{([^{},]*,[^{}]*)\})"); std::smatch m; if (std::regex_search(pattern, m, rx)) { std::vector options; std::string group = m[1].str(); split(options, group, ",", false); for (std::string& option : options) expand_group(m.prefix().str() + option + m.suffix().str(), expanded); } else expanded.push_back(pattern); } } // -------------------------------------------------------------------- bool glob_match(const std::filesystem::path& path, std::string glob_pattern) { bool result = path.empty() and glob_pattern.empty(); if (not glob_pattern.empty() and glob_pattern.back() == '/') glob_pattern += "**"; std::vector patterns; split(patterns, glob_pattern, ";"); std::vector expandedpatterns; std::for_each(patterns.begin(), patterns.end(), [&expandedpatterns](std::string& pattern) { expand_group(pattern, expandedpatterns); }); for (std::string& pat : expandedpatterns) { if ((path.empty() and pat.empty()) or Match(pat.c_str(), path.generic_string().c_str())) { result = true; break; } } return result; } } libzeep-5.1.7/lib-http/src/glob.hpp0000664000175000017500000000164714176701531017003 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once /// \file /// This file contains definitions of various utility routines #include #include namespace zeep::http { /// \brief compare an fs::path with a glob pattern /// /// Returns true if the path \a p matches \a pattern /// Matching is done using shell like glob patterns: /// /// construct | Matches /// --------------|-------- /// ? | single character /// * | zero or multiple characters /// {a,b} | matching either pattern a or b /// /// \param p The path to match /// \param pattern The pattern to match against /// \return True in case of a match bool glob_match(const std::filesystem::path& p, std::string pattern); }libzeep-5.1.7/lib-http/src/html-controller.cpp0000664000175000017500000000374314176701531021177 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include "glob.hpp" namespace fs = std::filesystem; namespace pt = boost::posix_time; namespace zeep::http { basic_template_processor& html_controller::get_template_processor() { return m_server->get_template_processor(); } const basic_template_processor& html_controller::get_template_processor() const { return m_server->get_template_processor(); } // -------------------------------------------------------------------- void html_controller::handle_file(const request& request, const scope& scope, reply& reply) { get_template_processor().handle_file(request, scope, reply); } // -------------------------------------------------------------------- // bool html_controller::handle_request(request& req, reply& rep) { std::string uri = get_prefixless_path(req); // set up the scope by putting some globals in it scope scope(get_server(), req); scope.put("baseuri", uri); init_scope(scope); auto handler = find_if(m_dispatch_table.begin(), m_dispatch_table.end(), [uri, method=req.get_method()](const mount_point& m) { // return m.path == uri and return glob_match(uri, m.path) and ( method == "HEAD" or method == "OPTIONS" or m.method == method or m.method == "UNDEFINED"); }); bool result = false; if (handler != m_dispatch_table.end()) { if (req.get_method() == "OPTIONS") { rep = reply::stock_reply(ok); rep.set_header("Allow", "GET,HEAD,POST,OPTIONS"); rep.set_content("", "text/plain"); } else handler->handler(req, scope, rep); result = true; } if (not result) rep = reply::stock_reply(not_found); return result; } } libzeep-5.1.7/lib-http/src/login-controller.cpp0000664000175000017500000001410314176701531021333 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include #include namespace fs = std::filesystem; namespace zeep::http { class login_error_handler : public error_handler { public: login_error_handler(login_controller* c) : m_login_controller(c) {} virtual bool create_unauth_reply(const request& req, reply& reply) { m_login_controller->create_unauth_reply(req, reply); return true; } virtual bool create_error_reply(const request& req, status_type status, const std::string& message, reply& rep) { return false; } private: login_controller* m_login_controller; }; login_controller::login_controller(const std::string& prefix_path) : http::controller(prefix_path) { } void login_controller::set_server(basic_server* server) { controller::set_server(server); assert(get_server().has_security_context()); if (not get_server().has_security_context()) throw std::runtime_error("The HTTP server has no security context"); auto& sc = get_server().get_security_context(); sc.add_rule("/login", {}); server->add_error_handler(new login_error_handler(this)); } xml::document login_controller::load_login_form(const request& req) const { if (m_server->has_template_processor()) { try { auto& tp = m_server->get_template_processor(); xml::document doc; doc.set_preserve_cdata(true); tp.load_template("login", doc); tp.process_tags(doc.child(), { get_server(), req }); return doc; } catch (const std::exception& ex) { std::cerr << ex.what() << std::endl; } } using namespace xml::literals; return R"( Please sign in
)"_xml; } void login_controller::create_unauth_reply(const request& req, reply& reply) { auto doc = load_login_form(req); for (auto csrf: doc.find("//input[@name='_csrf']")) csrf->set_attribute("value", req.get_cookie("csrf-token")); for (auto uri: doc.find("//input[@name='uri']")) uri->set_attribute("value", req.get_uri()); reply.set_content(doc); reply.set_status(status_type::unauthorized); } bool login_controller::handle_request(request& req, reply& rep) { bool result = false; std::string uri = get_prefixless_path(req); if (uri == "login") { result = true; if (req.get_method() == "GET") { auto doc = load_login_form(req); for (auto csrf: doc.find("//input[@name='_csrf']")) csrf->set_attribute("value", req.get_cookie("csrf-token")); rep.set_content(doc); } else if (req.get_method() == "POST") { auto csrf = req.get_parameter("_csrf"); if (csrf != req.get_cookie("csrf-token")) throw status_type::forbidden; std::string redirect_to{"/"}; auto context = get_server().get_context_name(); if (not context.empty()) redirect_to += context + '/'; uri = req.get_parameter("uri"); if (not uri.empty() and not std::regex_match(uri, std::regex(R"(.*login$)")) and is_valid_uri(uri)) redirect_to += uri; rep = reply::redirect(fs::path(redirect_to).lexically_normal().generic_string()); auto username = req.get_parameter("username"); auto password = req.get_parameter("password"); try { get_server().get_security_context().verify_username_password(username, password, rep); } catch (const invalid_password_exception& e) { auto doc = load_login_form(req); for (auto csrf_attr: doc.find("//input[@name='_csrf']")) csrf_attr->set_attribute("value", req.get_cookie("csrf-token")); auto user = doc.find_first("//input[@name='username']"); user->set_attribute("value", username); auto pw = doc.find_first("//input[@name='password']"); pw->set_attribute("class", pw->get_attribute("class") + " is-invalid"); for (auto i_uri: doc.find("//input[@name='uri']")) i_uri->set_attribute("value", uri); rep.set_content(doc); std::cerr << e.what() << '\n'; } } else result = false; } else if (uri == "logout") { std::string redirect_to{"/"}; auto context = get_server().get_context_name(); if (not context.empty()) redirect_to += context + '/'; uri = req.get_parameter("uri"); if (not uri.empty() and not std::regex_match(uri, std::regex(R"(.*logout$)")) and is_valid_uri(uri)) redirect_to += uri; rep = reply::redirect(fs::path(redirect_to).lexically_normal().generic_string()); rep.set_delete_cookie("access_token"); result = true; } return result; } } libzeep-5.1.7/lib-http/src/message-parser.cpp0000664000175000017500000002430214176701531020762 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include namespace zeep::http { namespace detail { bool is_tspecial(int c) { switch (c) { case '(': case ')': case '<': case '>': case '@': case ',': case ';': case ':': case '\\': case '"': case '/': case '[': case ']': case '?': case '=': case '{': case '}': case ' ': case '\t': return true; default: return false; } } } // detail parser::parser() { reset(); } void parser::reset() { m_parser = NULL; m_state = 0; m_chunk_size = 0; m_data.clear(); m_uri.clear(); m_method.clear(); m_parsing_content = false; m_collect_payload = true; m_http_version_major = 1; m_http_version_minor = 0; } boost::tribool parser::parse_header_lines(char ch) { boost::tribool result = boost::indeterminate; // parse the header lines, consisting of // NAME: VALUE // optionally followed by more VALUE prefixed by white space on the next lines switch (m_state) { case 0: // If the header starts with \r, it is the start of an empty line // which indicates the end of the header section if (ch == '\r') m_state = 20; else if ((ch == ' ' or ch == '\t') and not m_headers.empty()) m_state = 10; else if (iscntrl(ch) or detail::is_tspecial(ch)) result = false; else { m_headers.push_back(header()); m_headers.back().name += ch; m_state = 1; } break; case 1: if (ch == ':') ++m_state; else if (iscntrl(ch) or detail::is_tspecial(ch)) result = false; else m_headers.back().name += ch; break; case 2: if (ch == ' ') ++m_state; else result = false; break; case 3: if (ch == '\r') m_state += 2; else if (ch != ' ') { m_headers.back().value += ch; ++m_state; } break; case 4: if (ch == '\r') ++m_state; else m_headers.back().value += ch; break; case 5: if (ch == '\n') m_state = 0; else result = false; break; case 10: if (ch == '\r') m_state = 4; else if (iscntrl(ch)) result = false; else if (not (ch == ' ' or ch == '\t')) { m_headers.back().value += ch; m_state = 3; } break; case 20: if (ch == '\n') { result = true; for (std::vector
::iterator h = m_headers.begin(); h != m_headers.end(); ++h) { if (iequals(h->name, "Transfer-Encoding") and iequals(h->value, "chunked")) { m_parser = &parser::parse_chunk; m_state = 0; m_parsing_content = true; break; } if (iequals(h->name, "Content-Length")) { std::stringstream s(h->value); s >> m_chunk_size; if (m_chunk_size > 0) { m_parser = &parser::parse_content; m_parsing_content = true; m_payload.reserve(m_chunk_size); } else m_parsing_content = false; } else if (iequals(h->name, "Connection") and iequals(h->value, "Close") and (m_method == "POST" or m_method == "PUT")) { m_parser = &parser::parse_content; m_parsing_content = true; } } } else result = false; break; } return result; } boost::tribool parser::parse_chunk(char ch) { boost::tribool result = boost::indeterminate; switch (m_state) { // Transfer-Encoding: Chunked // lines starting with hex encoded length, optionally followed by text // then a newline (\r\n) and the actual length bytes. // This repeats until length is zero // new chunk, starts with hex encoded length case 0: if (isxdigit(ch)) { m_data = ch; ++m_state; } else result = false; break; case 1: if (isxdigit(ch)) m_data += ch; else if (ch == ';') ++m_state; else if (ch == '\r') m_state = 3; else result = false; break; case 2: if (ch == '\r') ++m_state; else if (detail::is_tspecial(ch) or iscntrl(ch)) result = false; break; case 3: if (ch == '\n') { std::stringstream s(m_data); s >> std::hex >> m_chunk_size; if (m_chunk_size > 0) { m_payload.reserve(m_payload.size() + m_chunk_size); ++m_state; } else m_state = 10; } else result = false; break; case 4: if (m_collect_payload) m_payload += ch; if (--m_chunk_size == 0) m_state = 5; // parse trailing \r\n break; case 5: if (ch == '\r') ++m_state; else result = false; break; case 6: if (ch == '\n') m_state = 0; else result = false; break; // trailing \r\n case 10: if (ch == '\r') ++m_state; else result = false; break; case 11: if (ch == '\n') result = true; else result = false; break; } return result; } boost::tribool parser::parse_content(char ch) { boost::tribool result = boost::indeterminate; // here we simply read m_chunk_size of bytes and finish if (m_collect_payload) m_payload += ch; if (--m_chunk_size == 0) { result = true; m_parsing_content = false; } return result; } // -------------------------------------------------------------------- // request_parser::request_parser() { } boost::tribool request_parser::parse(std::streambuf& text) { if (m_parser == NULL) { m_parser = static_cast(&request_parser::parse_initial_line); m_parsing_content = false; } boost::tribool result = boost::indeterminate; bool is_parsing_content = m_parsing_content; while (text.in_avail() > 0 and boost::indeterminate(result)) { result = (this->*m_parser)(static_cast(text.sbumpc())); if (result and is_parsing_content == false and m_parsing_content == true) { is_parsing_content = true; result = boost::indeterminate; } } return result; } request request_parser::get_request() { return request(m_method, std::move(m_uri), { m_http_version_major, m_http_version_minor }, std::move(m_headers), std::move(m_payload)); } boost::tribool request_parser::parse_initial_line(char ch) { boost::tribool result = boost::indeterminate; // a state machine to parse the initial request line // which consists of: // METHOD URI HTTP/1.0 (or 1.1) switch (m_state) { // we're parsing the method here case 0: if (isalpha(ch)) m_method += ch; else if (ch == ' ') ++m_state; else result = false; break; // we're parsing the URI here case 1: if (ch == ' ') ++m_state; else if (iscntrl(ch)) result = false; else m_uri += ch; break; // we're parsing the trailing HTTP/1.x here case 2: if (ch == 'H') ++m_state; else result = false; break; case 3: if (ch == 'T') ++m_state; else result = false; break; case 4: if (ch == 'T') ++m_state; else result = false; break; case 5: if (ch == 'P') ++m_state; else result = false; break; case 6: if (ch == '/') ++m_state; else result = false; break; case 7: if (ch == '1') ++m_state; else result = false; break; case 8: if (ch == '.') ++m_state; else if (ch == '\r') m_state = 11; else result = false; break; case 9: if (ch == '1' or ch == '0') { if (ch == '1') m_http_version_minor = 1; ++m_state; } else result = false; break; case 10: if (ch == '\r') ++m_state; else result = false; break; case 11: if (ch == '\n') { m_state = 0; m_parser = &parser::parse_header_lines; } else result = false; break; } return result; } // -------------------------------------------------------------------- // reply_parser::reply_parser() { } void reply_parser::reset() { parser::reset(); m_status = 0; m_status_line.clear(); } boost::tribool reply_parser::parse(std::streambuf& text) { if (m_parser == NULL) { m_parser = static_cast(&reply_parser::parse_initial_line); m_parsing_content = false; } boost::tribool result = boost::indeterminate; bool is_parsing_content = m_parsing_content; while (text.in_avail() and boost::indeterminate(result)) { result = (this->*m_parser)(static_cast(text.sbumpc())); if (result and is_parsing_content == false and m_parsing_content == true) { is_parsing_content = true; result = boost::indeterminate; } } return result; } reply reply_parser::get_reply() { return { static_cast(m_status), {m_http_version_major, m_http_version_minor }, std::move(m_headers), std::move(m_payload) }; } boost::tribool reply_parser::parse_initial_line(char ch) { boost::tribool result = boost::indeterminate; // a state machine to parse the initial reply line // which consists of: // HTTP/1.{0,1} XXX status-message switch (m_state) { // we're parsing the initial HTTP/1.x here case 0: if (ch == 'H') ++m_state; else result = false; break; case 1: if (ch == 'T') ++m_state; else result = false; break; case 2: if (ch == 'T') ++m_state; else result = false; break; case 3: if (ch == 'P') ++m_state; else result = false; break; case 4: if (ch == '/') ++m_state; else result = false; break; case 5: if (ch == '1') ++m_state; else result = false; break; case 6: if (ch == '.') ++m_state; else if (ch == '\r') m_state = 11; else result = false; break; case 7: if (ch == '1' or ch == '0') { if (ch == '1') m_http_version_minor = 1; ++m_state; } else result = false; break; case 8: if (isspace(ch)) ++m_state; else result = false; break; // we're parsing the result code here (three digits) case 9: if (isdigit(ch)) { m_status = 100 * (ch - '0'); ++m_state; } else result = false; break; case 10: if (isdigit(ch)) { m_status += 10 * (ch - '0'); ++m_state; } else result = false; break; case 11: if (isdigit(ch)) { m_status += 1 * (ch - '0'); ++m_state; } else result = false; break; case 12: if (isspace(ch)) ++m_state; else result = false; break; // we're parsing the status message here case 13: if (ch == '\r') ++m_state; else m_status_line += ch; break; case 14: if (ch == '\n') { m_state = 0; m_parser = &parser::parse_header_lines; } else result = false; break; } return result; } } // zeep::http libzeep-5.1.7/lib-http/src/preforked-server.cpp0000664000175000017500000002167014176701531021336 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #if HTTP_SERVER_HAS_PREFORK #include // for Hurd #if not defined(WCONTINUED) #define WCONTINUED 0 #endif #include #include namespace zeep::http { bool read_socket_from_parent(int fd_socket, boost::asio::ip::tcp::socket &socket) { using native_handle_type = boost::asio::ip::tcp::socket::native_handle_type; #if __APPLE__ // macos is special... assert(CMSG_SPACE(sizeof(int)) == 16); #endif struct msghdr msg; union { struct cmsghdr cm; #if __APPLE__ char control[16]; #else char control[CMSG_SPACE(sizeof(int))]; #endif } control_un; msg.msg_control = control_un.control; msg.msg_controllen = sizeof(control_un.control); msg.msg_name = nullptr; msg.msg_namelen = 0; boost::asio::ip::tcp::socket::endpoint_type peer_endpoint; struct iovec iov[1]; iov[0].iov_base = peer_endpoint.data(); iov[0].iov_len = peer_endpoint.capacity(); msg.msg_iov = iov; msg.msg_iovlen = 1; bool result = false; int n = recvmsg(fd_socket, &msg, 0); if (n >= 0) { peer_endpoint.resize(n); struct cmsghdr *cmptr CMSG_FIRSTHDR(&msg); if (cmptr != nullptr and cmptr->cmsg_len == CMSG_LEN(sizeof(int))) { if (cmptr->cmsg_level != SOL_SOCKET) std::cerr << "control level != SOL_SOCKET" << std::endl; else if (cmptr->cmsg_type != SCM_RIGHTS) std::cerr << "control type != SCM_RIGHTS"; else { /* Produces warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] int fd = *(reinterpret_cast(CMSG_DATA(cmptr))); */ native_handle_type *fdptr = reinterpret_cast(CMSG_DATA(cmptr)); int fd = *fdptr; if (fd >= 0) { socket.assign(peer_endpoint.protocol(), fd); result = true; } } } } return result; } class child_process { public: child_process(std::function constructor, boost::asio::io_context &io_context, boost::asio::ip::tcp::acceptor &acceptor, int nr_of_threads) : m_constructor(constructor) , m_acceptor(acceptor) , m_socket(io_context) , m_nr_of_threads(nr_of_threads) { m_acceptor.async_accept(m_socket, std::bind(&child_process::handle_accept, this, std::placeholders::_1)); } ~child_process() { if (m_pid > 0) // should never happen { kill(m_pid, SIGKILL); using namespace boost::posix_time; auto now = second_clock::local_time(); int status; if (waitpid(m_pid, &status, WUNTRACED | WCONTINUED) != -1) { if (WIFSIGNALED(status)) std::cerr << now << " child " << m_pid << " terminated by signal " << WTERMSIG(status) << std::endl; else std::cerr << now << " child terminated normally" << std::endl; } else std::cerr << now << "error in waitpid: " << strerror(errno) << std::endl; } } void stop(); private: void handle_accept(const boost::system::error_code &ec); void start(); void run(); std::function m_constructor; boost::asio::ip::tcp::acceptor &m_acceptor; boost::asio::ip::tcp::socket m_socket; int m_nr_of_threads; int m_pid = -1; int m_fd = -1; }; void child_process::start() { using namespace std::literals; // create a socket pair to pass the file descriptors through int sockfd[2]; int err = socketpair(AF_LOCAL, SOCK_STREAM, 0, sockfd); if (err < 0) throw exception("Error creating socket pair: "s + strerror(errno)); // fork m_pid = fork(); if (m_pid < 0) throw exception("Error forking worker application: "s + strerror(errno)); if (m_pid == 0) // child process { close(sockfd[0]); // remove the blocks on the signal handlers sigset_t wait_mask; sigemptyset(&wait_mask); pthread_sigmask(SIG_SETMASK, &wait_mask, 0); // Time to construct the Server object std::unique_ptr srvr(m_constructor()); // run the server as a worker std::thread t(std::bind(&basic_server::run, srvr.get(), m_nr_of_threads)); // now start the processing loop passing on file descriptors read // from the parent process try { for (;;) { std::shared_ptr conn(new connection(srvr->get_io_context(), *srvr)); if (not read_socket_from_parent(sockfd[1], conn->get_socket())) break; conn->start(); } } catch (std::exception &e) { std::cerr << "Exception caught: " << e.what() << std::endl; exit(1); } srvr->stop(); t.join(); exit(0); } // close one end of the pipe, save the other m_fd = sockfd[0]; close(sockfd[1]); } void child_process::stop() { if (m_fd > 0) { // close the socket to the worker, this should terminate the child if it is still alive close(m_fd); m_fd = -1; } if (m_pid != -1) { // however, sometimes it doesn't, so we have to take some serious action // Anyway, we'll wait until child dies to avoid zombies // and to make sure the client really stops... int count = 5; // wait five seconds before killing client int status; while (count-- > 0) { if (waitpid(m_pid, &status, WUNTRACED | WCONTINUED | WNOHANG) == -1) break; if (WIFEXITED(status)) break; std::this_thread::sleep_for(std::chrono::seconds(1)); } if (not WIFEXITED(status)) kill(m_pid, SIGKILL); m_pid = -1; } } void child_process::handle_accept(const boost::system::error_code &ec) { if (ec) { std::cerr << "Accept failed: " << ec << std::endl; return; } try { if (m_pid == -1 or m_fd == -1) start(); using native_handle_type = boost::asio::ip::tcp::socket::native_handle_type; struct msghdr msg; union { struct cmsghdr cm; #if __APPLE__ char control[16]; #else char control[CMSG_SPACE(sizeof(native_handle_type))]; #endif } control_un; msg.msg_control = control_un.control; msg.msg_controllen = sizeof(control_un.control); struct cmsghdr *cmptr = CMSG_FIRSTHDR(&msg); cmptr->cmsg_len = CMSG_LEN(sizeof(int)); cmptr->cmsg_level = SOL_SOCKET; cmptr->cmsg_type = SCM_RIGHTS; /* Procudes warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] *(reinterpret_cast(CMSG_DATA(cmptr))) = socket.native(); */ native_handle_type *fdptr = reinterpret_cast(CMSG_DATA(cmptr)); *fdptr = m_socket.native_handle(); msg.msg_name = nullptr; msg.msg_namelen = 0; struct iovec iov[1]; iov[0].iov_base = m_socket.remote_endpoint().data(); iov[0].iov_len = m_socket.remote_endpoint().size(); msg.msg_iov = iov; msg.msg_iovlen = 1; int err = sendmsg(m_fd, &msg, 0); if (err < 0) { std::cerr << "Error passing file descriptor: " << strerror(errno) << std::endl; // ec = std::make_error_code(errno); stop(); } } catch (const std::exception &e) { std::cerr << "error writing socket to client: " << e.what() << std::endl; reply r = reply::stock_reply(service_unavailable); auto buffers = r.to_buffers(); try { boost::asio::write(m_socket, buffers); } catch (const std::exception &e) { std::cerr << e.what() << std::endl; } } m_socket.close(); m_acceptor.async_accept(m_socket, std::bind(&child_process::handle_accept, this, std::placeholders::_1)); } // -------------------------------------------------------------------- preforked_server::preforked_server(std::function constructor) : m_constructor(constructor) { m_lock.lock(); } preforked_server::~preforked_server() { } void preforked_server::run(const std::string &address, short port, int nr_of_processes, int nr_of_threads) { // first wait until we are allowed to start listening std::unique_lock lock(m_lock); boost::asio::ip::tcp::acceptor acceptor(m_io_context); // then bind the address here boost::asio::ip::tcp::endpoint endpoint; try { endpoint = boost::asio::ip::tcp::endpoint(boost::asio::ip::make_address(address), port); } catch (const std::exception &e) { boost::asio::ip::tcp::resolver resolver(m_io_context); boost::asio::ip::tcp::resolver::query query(address, std::to_string(port)); endpoint = *resolver.resolve(query); } acceptor.open(endpoint.protocol()); acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); acceptor.bind(endpoint); acceptor.listen(); std::vector threads; for (int i = 0; i < nr_of_processes; ++i) { threads.emplace_back([this, nr_of_threads, &acceptor]() { auto work = boost::asio::make_work_guard(m_io_context); child_process p(m_constructor, m_io_context, acceptor, nr_of_threads); m_io_context.run(); }); } for (auto &t : threads) t.join(); } void preforked_server::start() { m_lock.unlock(); } void preforked_server::stop() { m_io_context.stop(); } } // namespace zeep::http #endif libzeep-5.1.7/lib-http/src/reply.cpp0000664000175000017500000003477514176701531017216 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include namespace zeep::http { namespace detail { struct status_string { status_type code; const char *text; } kStatusStrings[] = { { cont, "Continue" }, { ok, "OK" }, { created, "Created" }, { accepted, "Accepted" }, { no_content, "No Content" }, { multiple_choices, "Multiple Choices" }, { moved_permanently, "Moved Permanently" }, { moved_temporarily, "Found" }, { see_other, "See Other" }, { not_modified, "Not Modified" }, { bad_request, "Bad Request" }, { unauthorized, "Unauthorized" }, { proxy_authentication_required, "Proxy Authentication Required" }, { forbidden, "Forbidden" }, { not_found, "Not Found" }, { method_not_allowed, "Method not allowed" }, { internal_server_error, "Internal Server Error" }, { not_implemented, "Not Implemented" }, { bad_gateway, "Bad Gateway" }, { service_unavailable, "Service Unavailable" } }, kStatusDescriptions[] = { { moved_permanently, "The document requested was moved permanently to a new location" }, { moved_temporarily, "The document requested was moved temporarily to a new location" }, { see_other, "The document can be found at another location" }, { not_modified, "The requested document was not modified" }, { bad_request, "There was an error in the request, e.g. an incorrect method or a malformed URI" }, { unauthorized, "You are not authorized to access this location" }, { proxy_authentication_required, "You are not authorized to use this proxy" }, { forbidden, "Access to this location is forbidden" }, { not_found, "The requested web page was not found on this server." }, { internal_server_error, "An internal error prevented the server from processing your request" }, { not_implemented, "Your request could not be handled since the required code is not implemented" }, { bad_gateway, "The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request. " }, { service_unavailable, "The service is unavailable at this moment, try again later"} }; const int kStatusStringCount = sizeof(kStatusStrings) / sizeof(status_string); const int kStatusDescriptionCount = sizeof(kStatusDescriptions) / sizeof(status_string); } // namespace detail std::string get_status_text(status_type status) { std::string result = "Internal Service Error"; for (int i = 0; i < detail::kStatusStringCount; ++i) { if (detail::kStatusStrings[i].code == status) { result = detail::kStatusStrings[i].text; break; } } return result; } std::string get_status_description(status_type status) { std::string result = "An internal error prevented the server from processing your request"; for (int i = 0; i < detail::kStatusDescriptionCount; ++i) { if (detail::kStatusDescriptions[i].code == status) { result = detail::kStatusDescriptions[i].text; break; } } return result; } // ---------------------------------------------------------------------------- namespace { const std::string kNameValueSeparator{':', ' '}, kCRLF{'\r', '\n'}, kZERO{'0'}; } reply::reply(status_type status, std::tuple version) : m_status(status) , m_version_major(std::get<0>(version)) , m_version_minor(std::get<1>(version)) , m_data(nullptr) { using namespace boost::local_time; using namespace boost::posix_time; local_date_time t(local_sec_clock::local_time(time_zone_ptr())); local_time_facet *lf(new local_time_facet("%a, %d %b %Y %H:%M:%S GMT")); std::stringstream s; s.imbue(std::locale(std::locale(), lf)); s << t; set_header("Date", s.str()); set_header("Server", "libzeep"); set_header("Content-Length", "0"); } reply::reply(status_type status, std::tuple version, std::vector
&&headers, std::string &&payload) : reply(status, version) { m_headers = std::move(headers); m_content = std::move(payload); } reply::reply(const reply &rhs) : m_status(rhs.m_status) , m_version_major(rhs.m_version_major) , m_version_minor(rhs.m_version_minor) , m_headers(rhs.m_headers) , m_data(nullptr) , m_content(rhs.m_content) { assert(rhs.m_data == nullptr); } reply::reply(reply &&rhs) : m_status(rhs.m_status) , m_version_major(rhs.m_version_major) , m_version_minor(rhs.m_version_minor) , m_headers(std::move(rhs.m_headers)) , m_data(rhs.m_data) , m_buffer(std::move(rhs.m_buffer)) , m_content(rhs.m_content) , m_chunked(rhs.m_chunked) , m_status_line(std::move(rhs.m_status_line)) { memcpy(m_size_buffer, rhs.m_size_buffer, sizeof(m_size_buffer)); rhs.m_data = nullptr; } reply::~reply() { delete m_data; } void reply::reset() { reply tmp; std::swap(tmp, *this); } reply &reply::operator=(const reply &rhs) { if (this != &rhs) { m_version_major = rhs.m_version_major; m_version_minor = rhs.m_version_minor; m_status = rhs.m_status; m_headers = rhs.m_headers; m_content = rhs.m_content; } return *this; } reply &reply::operator=(reply &&rhs) { if (this != &rhs) { m_version_major = rhs.m_version_major; m_version_minor = rhs.m_version_minor; m_status = rhs.m_status; m_data = rhs.m_data; rhs.m_data = nullptr; m_headers = rhs.m_headers; m_content = rhs.m_content; m_chunked = rhs.m_chunked; memcpy(m_size_buffer, rhs.m_size_buffer, sizeof(m_size_buffer)); m_status_line = rhs.m_status_line; } return *this; } void reply::set_version(int version_major, int version_minor) { const std::streambuf::pos_type kNoPos = -1; m_version_major = version_major; m_version_minor = version_minor; // for HTTP/1.0 replies we need to calculate the data length if (m_version_major == 1 and m_version_minor == 0 and m_data != nullptr) { m_chunked = false; std::streamsize length = 0; std::streamsize pos = m_data->rdbuf()->pubseekoff(0, std::ios_base::cur); if (pos == kNoPos) { // no other option than copying over the data to our buffer char buffer[10240]; for (;;) { std::streamsize n = m_data->rdbuf()->sgetn(buffer, sizeof(buffer)); if (n == 0) break; length += n; m_content.insert(m_content.end(), buffer, buffer + n); } delete m_data; m_data = nullptr; } else { length = m_data->rdbuf()->pubseekoff(0, std::ios_base::end); length -= pos; m_data->rdbuf()->pubseekoff(pos, std::ios_base::beg); } set_header("Content-Length", boost::lexical_cast(length)); remove_header("Transfer-Encoding"); } } void reply::set_header(const std::string &name, const std::string &value) { bool updated = false; for (header &h : m_headers) { if (iequals(h.name, name)) { h.value = value; updated = true; break; } } if (not updated) { header nh = {name, value}; m_headers.push_back(nh); } } std::string reply::get_header(const std::string &name) const { std::string result; for (const header &h : m_headers) { if (iequals(h.name, name)) { result = h.value; break; } } return result; } void reply::remove_header(const std::string &name) { m_headers.erase( std::remove_if(m_headers.begin(), m_headers.end(), [name](header &h) { return iequals(h.name, name); }), m_headers.end()); } void reply::set_cookie(const char *name, const std::string &value, std::initializer_list directives) { std::ostringstream vs; vs << name << '=' << value; for (auto &directive : directives) vs << "; " << directive.name << (directive.value.empty() ? "" : "=" + directive.value); m_headers.push_back({"Set-Cookie", vs.str()}); } void reply::set_delete_cookie(const char *name) { using namespace boost::local_time; using namespace boost::posix_time; local_date_time t(local_sec_clock::local_time(time_zone_ptr())); local_time_facet *lf(new local_time_facet("%a, %d %b %Y %H:%M:%S GMT")); std::stringstream s; s.imbue(std::locale(std::locale(), lf)); s << (t - hours(24)); set_cookie(name, "", {{"Expires", '"' + s.str() + '"'}}); } std::string reply::get_cookie(const char *name) const { std::string result; for (const header &h : m_headers) { if (iequals(h.name, "Set-Cookie")) { result = h.value; auto ns = result.find('='); if (ns == std::string::npos) continue; if (result.compare(0, ns, name) != 0) continue; auto ds = result.find(';', ns + 1); result = result.substr(ns + 1, ds - ns - 1); break; } } return result; } void reply::set_content(const json::element &json) { std::ostringstream s; s << json; set_content(s.str(), "application/json"); } void reply::set_content(const xml::element &data) { std::stringstream s; s << data; set_content(s.str(), "text/xml; charset=utf-8"); } void reply::set_content(xml::document &doc) { std::stringstream s; if (doc.front().name() == "html") doc.set_write_html(true); else doc.set_write_doctype(false); if (doc.is_html5()) { doc.set_write_doctype(true); doc.set_escape_double_quote(false); } else if (doc.child()->get_ns() == "http://www.w3.org/1999/xhtml") { doc.set_escape_double_quote(false); doc.set_collapse_empty_tags(true); } s << doc; std::string contentType; if (doc.is_html5()) contentType = "text/html; charset=utf-8"; else if (doc.child()->get_ns() == "http://www.w3.org/1999/xhtml") contentType = "application/xhtml+xml; charset=utf-8"; else contentType = "text/xml; charset=utf-8"; set_content(s.str(), contentType); } void reply::set_content(const std::string &data, const std::string &contentType) { m_content = data; m_status = ok; delete m_data; m_data = nullptr; m_chunked = false; set_header("Content-Length", std::to_string(m_content.length())); remove_header("Transfer-Encoding"); set_header("Content-Type", contentType); } void reply::set_content(const char *data, size_t size, const std::string &contentType) { m_content = std::string(data, size); m_status = ok; delete m_data; m_data = nullptr; m_chunked = false; set_header("Content-Length", std::to_string(m_content.length())); remove_header("Transfer-Encoding"); set_header("Content-Type", contentType); } void reply::set_content(std::istream *idata, const std::string &contentType) { delete m_data; m_data = idata; m_content.clear(); m_status = ok; m_chunked = true; set_header("Content-Type", contentType); set_header("Transfer-Encoding", "chunked"); remove_header("Content-Length"); } std::vector reply::to_buffers() const { std::vector result; m_status_line = "HTTP/" + std::to_string(m_version_major) + '.' + std::to_string(m_version_minor) + ' ' + std::to_string(m_status) + ' ' + get_status_text(m_status) + kCRLF; result.push_back(boost::asio::buffer(m_status_line)); for (const header &h : m_headers) { result.push_back(boost::asio::buffer(h.name)); result.push_back(boost::asio::buffer(kNameValueSeparator)); result.push_back(boost::asio::buffer(h.value)); result.push_back(boost::asio::buffer(kCRLF)); } result.push_back(boost::asio::buffer(kCRLF)); result.push_back(boost::asio::buffer(m_content)); return result; } std::vector reply::data_to_buffers() { std::vector result; if (m_data != nullptr) { const unsigned int kMaxChunkSize = 10240; m_buffer.resize(kMaxChunkSize); std::streamsize n = m_data->rdbuf()->sgetn(m_buffer.data(), m_buffer.size()); // chunked encoding? if (m_chunked) { if (n == 0) { result.push_back(boost::asio::buffer(kZERO)); result.push_back(boost::asio::buffer(kCRLF)); result.push_back(boost::asio::buffer(kCRLF)); delete m_data; m_data = nullptr; } else { const char kHex[] = "0123456789abcdef"; char *e = m_size_buffer + sizeof(m_size_buffer); char *p = e; auto l = n; while (n != 0) { *--p = kHex[n & 0x0f]; n >>= 4; } result.push_back(boost::asio::buffer(p, e - p)); result.push_back(boost::asio::buffer(kCRLF)); result.push_back(boost::asio::buffer(&m_buffer[0], l)); result.push_back(boost::asio::buffer(kCRLF)); } } else { if (n > 0) result.push_back(boost::asio::buffer(&m_buffer[0], n)); else { delete m_data; m_data = nullptr; } } } return result; } reply reply::stock_reply(status_type status, const std::string &info) { reply result; if (status != not_modified) { std::stringstream text; text << "" << std::endl << " " << std::endl << "

" << get_status_text(status) << "

" << std::endl; if (not info.empty()) { text << "

"; for (char c : info) { switch (c) { case '&': text << "&"; break; case '<': text << "<"; break; case '>': text << ">"; break; case 0: break; // silently ignore default: if ((c >= 1 and c <= 8) or (c >= 0x0b and c <= 0x0c) or (c >= 0x0e and c <= 0x1f) or c == 0x7f) text << "&#" << std::hex << c << ';'; else text << c; break; } } text << "

" << std::endl; } text << " " << std::endl << ""; result.set_content(text.str(), "text/html; charset=utf-8"); } result.m_status = status; return result; } reply reply::stock_reply(status_type status) { return stock_reply(status, ""); } reply reply::redirect(const std::string &location, status_type status) { reply result; result.m_status = status; std::string text = get_status_text(status); result.m_content = "" + text + "

" + std::to_string(status) + ' ' + text + "

"; // Check if the location is a valid URL if (not is_valid_uri(location)) throw exception("Invalid redirect location"); result.set_header("Location", location); result.set_header("Content-Length", std::to_string(result.m_content.length())); result.set_header("Content-Type", "text/html; charset=utf-8"); return result; } reply reply::redirect(const std::string &location) { return redirect(location, moved_temporarily); } size_t reply::size() const { auto buffers = to_buffers(); return std::accumulate(buffers.begin(), buffers.end(), 0LL, [](size_t m, auto &buffer) { return m + boost::asio::buffer_size(buffer); }); } std::ostream &operator<<(std::ostream &lhs, const reply &rhs) { for (auto &b : rhs.to_buffers()) lhs.write(static_cast(b.data()), b.size()); return lhs; } } // namespace zeep::http libzeep-5.1.7/lib-http/src/request.cpp0000664000175000017500000004704014176701531017540 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include namespace fs = std::filesystem; namespace zeep::http { request::request(const std::string& method, const std::string& uri, std::tuple version, std::vector
&& headers, std::string&& payload) : m_method(method) , m_uri(uri) , m_headers(std::move(headers)) , m_payload(std::move(payload)) { m_version[0] = static_cast('0' + std::get<0>(version)); m_version[1] = '.'; m_version[2] = static_cast('0' + std::get<1>(version)); } request::request(const request& req) : m_local_address(req.m_local_address) , m_local_port(req.m_local_port) , m_method(req.m_method) , m_uri(req.m_uri) , m_headers(req.m_headers) , m_payload(req.m_payload) , m_close(req.m_close) , m_timestamp(req.m_timestamp) , m_credentials(req.m_credentials) , m_remote_address(req.m_remote_address) { char* d = &m_version[0]; for (auto c: req.m_version) *d++ = c; } request& request::operator=(const request& req) { if (this != &req) { m_local_address = req.m_local_address; m_local_port = req.m_local_port; m_method = req.m_method; m_uri = req.m_uri; m_version[0] = req.m_version[0]; m_version[1] = req.m_version[1]; m_version[2] = req.m_version[2]; m_headers = req.m_headers; m_payload = req.m_payload; m_close = req.m_close; m_timestamp = req.m_timestamp; m_credentials = req.m_credentials; m_remote_address = req.m_remote_address; } return *this; } void request::set_local_endpoint(boost::asio::ip::tcp::socket& socket) { m_local_address = socket.local_endpoint().address().to_string(); m_local_port = socket.local_endpoint().port(); } float request::get_accept(const char* type) const { float result = 1.0f; #define IDENT "[-+.a-z0-9]+" #define TYPE "\\*|" IDENT #define MEDIARANGE "\\s*(" TYPE ")/(" TYPE ").*?(?:;\\s*q=(\\d(?:\\.\\d?)?))?" static std::regex rx(MEDIARANGE); assert(type); if (type == nullptr) return 1.0; std::string t1(type), t2; std::string::size_type s = t1.find('/'); if (s != std::string::npos) { t2 = t1.substr(s + 1); t1.erase(s, t1.length() - s); } for (const header& h: m_headers) { if (h.name != "Accept") continue; result = 0; std::string::size_type b = 0, e = h.value.find(','); for (;;) { if (e == std::string::npos) e = h.value.length(); std::string mediarange = h.value.substr(b, e - b); std::smatch m; if (std::regex_search(mediarange, m, rx)) { std::string type1 = m[1].str(); std::string type2 = m[2].str(); float value = 1.0f; if (m[3].matched) value = std::stof(m[3].str()); if (type1 == t1 and type2 == t2) { result = value; break; } if ((type1 == t1 and type2 == "*") or (type1 == "*" and type2 == "*")) { if (result < value) result = value; } } if (e == h.value.length()) break; b = e + 1; while (b < h.value.length() and isspace(h.value[b])) ++b; e = h.value.find(',', b); } break; } return result; } // m_request.http_version_minor >= 1 and not m_request.close bool request::keep_alive() const { return get_version() >= std::make_tuple(1, 1) and iequals(get_header("Connection"), "keep-alive"); } void request::set_header(const char* name, const std::string& value) { bool replaced = false; for (header& h: m_headers) { if (not iequals(h.name, name)) continue; h.value = value; replaced = true; break; } if (not replaced) m_headers.push_back({ name, value }); } std::string request::get_header(const char* name) const { std::string result; for (const header& h: m_headers) { if (not iequals(h.name, name)) continue; result = h.value; break; } return result; } void request::remove_header(const char* name) { m_headers.erase( remove_if(m_headers.begin(), m_headers.end(), [name](const header& h) -> bool { return h.name == name; }), m_headers.end()); } std::pair get_urlencoded_parameter(const std::string& s, const char* name) { std::string::size_type b = 0; std::string result; bool found = false; size_t nlen = strlen(name); while (b != std::string::npos) { std::string::size_type e = s.find_first_of("&;", b); std::string::size_type n = (e == std::string::npos) ? s.length() - b : e - b; if ((n == nlen or (n > nlen + 1 and s[b + nlen] == '=')) and strncmp(name, s.c_str() + b, nlen) == 0) { found = true; if (n == nlen) result = name; // what else? else { b += nlen + 1; result = s.substr(b, e - b); result = decode_url(result); } break; } b = e == std::string::npos ? e : e + 1; } return std::make_pair(result, found); } std::tuple request::get_parameter_ex(const char* name) const { std::string result, contentType = get_header("Content-Type"); bool found = false; if (starts_with(contentType, "application/x-www-form-urlencoded")) { tie(result, found) = get_urlencoded_parameter(m_payload, name); if (found) return std::make_tuple(result, true); } uri uri(m_uri); auto query = uri.get_query(); if (not query.empty()) { tie(result, found) = get_urlencoded_parameter(query, name); if (found) return std::make_tuple(result, true); } if (starts_with(contentType, "application/json")) { try { json::element e; json::parse_json(m_payload, e); if (e.is_object() and e.contains(name)) { result = e.at(name).as(); found = true; } } catch (const std::exception &) { } } else if (starts_with(contentType, "multipart/form-data")) { std::string::size_type b = contentType.find("boundary="); if (b != std::string::npos) { std::string boundary = contentType.substr(b + strlen("boundary=")); enum { START, HEADER, CONTENT, SKIP } state = SKIP; std::string contentName; std::regex rx("content-disposition:\\s*form-data;.*?\\bname=\"([^\"]+)\".*", std::regex::icase); std::smatch m; std::string::size_type i = 0, r = 0, l = 0; for (i = 0; i <= m_payload.length(); ++i) { if (i < m_payload.length() and m_payload[i] != '\r' and m_payload[i] != '\n') continue; // we have found a 'line' at [l, i) if (m_payload.compare(l, 2, "--") == 0 and m_payload.compare(l + 2, boundary.length(), boundary) == 0) { // if we're in the content state or if this is the last line if (state == CONTENT or m_payload.compare(l + 2 + boundary.length(), 2, "--") == 0) { if (r > 0) { auto n = l - r; if (n >= 1 and m_payload[r + n - 1] == '\n') --n; if (n >= 1 and m_payload[r + n - 1] == '\r') --n; result.assign(m_payload, r, n); } break; } // Not the last, so it must be a separator and we're now in the Header part state = HEADER; } else if (state == HEADER) { if (l == i) // empty line { if (contentName == name) { found = true; state = CONTENT; r = i + 1; if (m_payload[i] == '\r' and m_payload[i + 1] == '\n') r = i + 2; } else state = SKIP; } else if (std::regex_match(m_payload.begin() + l, m_payload.begin() + i, m, rx)) contentName = m[1].str(); } if (m_payload[i] == '\r' and m_payload[i + 1] == '\n') ++i; l = i + 1; } } replace_all(result, "\r\n", "\n"); } return make_tuple(result, found); } std::multimap request::get_parameters() const { std::string ps; if (m_method == "POST") { std::string contentType = get_header("Content-Type"); if (starts_with(contentType, "application/x-www-form-urlencoded")) ps = m_payload; } else if (m_method == "GET" or m_method == "PUT") { uri uri(m_uri); ps = uri.get_query(); } std::multimap parameters; while (not ps.empty()) { std::string::size_type e = ps.find_first_of("&;"); std::string param; if (e != std::string::npos) { param = ps.substr(0, e); ps.erase(0, e + 1); } else std::swap(param, ps); if (not param.empty()) { std::string name, value; std::string::size_type d = param.find('='); if (d != std::string::npos) { name = param.substr(0, d); value = param.substr(d + 1); } parameters.emplace(decode_url(name), decode_url(value)); } } // std::multimap parameters; // for (auto m : { "POST", "GET" }) // { // std::string ps; // // skip m_payload unless this is a POST // switch (m) // { // case "POST": // if (m_method == m) // { // std::string contentType = get_header("Content-Type"); // if (starts_with(contentType, "application/x-www-form-urlencoded")) // ps = m_payload; // } // break; // case "GET": // { // std::string::size_type d = m_uri.find('?'); // if (d != std::string::npos) // ps = m_uri.substr(d + 1); // break; // } // default: // ; // } // while (not ps.empty()) // { // std::string::size_type e = ps.find_first_of("&;"); // std::string param; // if (e != std::string::npos) // { // param = ps.substr(0, e); // ps.erase(0, e + 1); // } // else // swap(param, ps); // if (not param.empty()) // { // std::string name, value; // std::string::size_type d = param.find('='); // if (d != std::string::npos) // { // name = param.substr(0, d); // value = param.substr(d + 1); // } // parameters.emplace(decode_url(name), decode_url(value)); // } // } // } return parameters; } struct file_param_parser { file_param_parser(const request& req, const std::string& payload, const char* name); file_param next(); const request& m_req; const std::string m_name; const std::string& m_payload; std::string m_boundary; static const std::regex k_rx_disp, k_rx_cont; enum { START, HEADER, CONTENT, SKIP } m_state = SKIP; std::string::size_type m_i = 0; }; const std::regex file_param_parser::k_rx_disp(R"x(content-disposition:\s*form-data(;.+))x", std::regex::icase); const std::regex file_param_parser::k_rx_cont(R"x(content-type:\s*(\S+/[^;]+)(;.*)?)x", std::regex::icase); file_param_parser::file_param_parser(const request& req, const std::string& payload, const char* name) : m_req(req), m_name(name), m_payload(payload) { std::string contentType = m_req.get_header("Content-Type"); if (starts_with(contentType, "multipart/form-data")) { std::string::size_type b = contentType.find("boundary="); if (b != std::string::npos) m_boundary = contentType.substr(b + strlen("boundary=")); } } file_param file_param_parser::next() { if (m_boundary.empty()) return {}; std::string contentName; std::smatch m; std::string::size_type r = 0, l = 0; file_param result = {}; bool found = false; for (; m_i <= m_payload.length(); ++m_i) { if (m_i < m_payload.length() and m_payload[m_i] != '\r' and m_payload[m_i] != '\n') continue; // we have found a 'line' at [l, i) if (m_payload.compare(l, 2, "--") == 0 and m_payload.compare(l + 2, m_boundary.length(), m_boundary) == 0) { // if we're in the content state or if this is the last line if (m_state == CONTENT or m_payload.compare(l + 2 + m_boundary.length(), 2, "--") == 0) { if (r > 0) { auto n = l - r; if (n >= 1 and m_payload[r + n - 1] == '\n') --n; if (n >= 1 and m_payload[r + n - 1] == '\r') --n; result.data = m_payload.data() + r; result.length = n; } m_state = HEADER; break; } // Not the last, so it must be a separator and we're now in the Header part m_state = HEADER; } else if (m_state == HEADER) { if (l == m_i) // empty line { if (contentName == m_name) { m_state = CONTENT; found = true; r = m_i + 1; if (m_payload[m_i] == '\r' and m_payload[m_i + 1] == '\n') r = m_i + 2; } else { result = {}; m_state = SKIP; } } else if (std::regex_match(m_payload.begin() + l, m_payload.begin() + m_i, m, k_rx_disp)) { auto p = m[1].str(); std::regex re(R"rx(;\s*(\w+)=("[^"]*"|'[^']*'|\w+))rx"); auto b = p.begin(); auto e = p.end(); std::match_results m2; while (b < e and std::regex_search(b, e, m2, re)) { auto key = m2[1].str(); auto value = m2[2].str(); if (value.length() > 1 and ((value.front() == '"' and value.back() == '"') or (value.front() == '\'' and value.back() == '\''))) value = value.substr(1, value.length() - 2); if (key == "name") contentName = value; else if (key == "filename") result.filename = value; b = m2[0].second; } } else if (std::regex_match(m_payload.begin() + l, m_payload.begin() + m_i, m, k_rx_cont)) { result.mimetype = m[1].str(); if (starts_with(result.mimetype, "multipart/")) throw std::runtime_error("multipart file uploads are not supported"); } } if (m_payload[m_i] == '\r' and m_payload[m_i + 1] == '\n') ++m_i; l = m_i + 1; } if (not found) result = {}; return result; } file_param request::get_file_parameter(const char* name) const { file_param_parser fpp(*this, m_payload, name); return fpp.next(); } std::vector request::get_file_parameters(const char* name) const { file_param_parser fpp(*this, m_payload, name); std::vector result; for (;;) { auto fp = fpp.next(); if (not fp) break; result.push_back(fp); } return result; } std::string request::get_cookie(const char* name) const { for (const header& h : m_headers) { if (h.name != "Cookie") continue; std::vector rawCookies; split(rawCookies, h.value, ";"); for (std::string& cookie : rawCookies) { trim(cookie); auto d = cookie.find('='); if (d == std::string::npos) continue; if (cookie.compare(0, d, name) == 0) return cookie.substr(d + 1); } } return ""; } void request::set_cookie(const char* name, const std::string& value) { std::map cookies; for (auto& h: m_headers) { if (not iequals(h.name, "Cookie")) continue; std::vector rawCookies; split(rawCookies, h.value, ";"); for (std::string& cookie : rawCookies) { trim(cookie); auto d = cookie.find('='); if (d == std::string::npos) continue; cookies[cookie.substr(0, d)] = cookie.substr(d + 1); } } m_headers.erase( std::remove_if(m_headers.begin(), m_headers.end(), [](header& h) { return iequals(h.name, "Cookie"); }), m_headers.end()); cookies[name] = value; std::ostringstream cs; bool first = true; for (auto& cookie: cookies) { if (first) first = false; else cs << "; "; cs << cookie.first << '=' << cookie.second; } set_header("Cookie", cs.str()); } const std::map> kLocalesPerLang = { { "ar", { "AE", "BH", "DZ", "EG", "IQ", "JO", "KW", "LB", "LY", "MA", "OM", "QA", "SA", "SD", "SY", "TN", "YE" } }, { "be", { "BY" } }, { "bg", { "BG" } }, { "ca", { "ES" } }, { "cs", { "CZ" } }, { "da", { "DK" } }, { "de", { "AT", "CH", "DE", "LU" } }, { "el", { "GR" } }, { "en", { "US", "AU", "CA", "GB", "IE", "IN", "NZ", "ZA" } }, { "es", { "AR", "BO", "CL", "CO", "CR", "DO", "EC", "ES", "GT", "HN", "MX", "NI", "PA", "PE", "PR", "PY", "SV", "UY", "VE" } }, { "et", { "EE" } }, { "fi", { "FI" } }, { "fr", { "BE", "CA", "CH", "FR", "LU" } }, { "hi", { "IN" } }, { "hr", { "HR" } }, { "hu", { "HU" } }, { "is", { "IS" } }, { "it", { "CH", "IT" } }, { "iw", { "IL" } }, { "ja", { "JP" } }, { "ko", { "KR" } }, { "lt", { "LT" } }, { "lv", { "LV" } }, { "mk", { "MK" } }, { "nl", { "NL", "BE" } }, { "no", { "NO", "NO_NY" } }, { "pl", { "PL" } }, { "pt", { "BR", "PT" } }, { "ro", { "RO" } }, { "ru", { "RU" } }, { "sk", { "SK" } }, { "sl", { "SI" } }, { "sq", { "AL" } }, { "sr", { "BA", "CS" } }, { "sv", { "SE" } }, { "th", { "TH", "TH_TH" } }, { "tr", { "TR" } }, { "uk", { "UA" } }, { "vi", { "VN" } }, { "zh", { "CN", "HK", "TW" } } }; std::locale& request::get_locale() const { if (not m_locale) { auto acceptedLanguage = get_header("Accept-Language"); std::string preferred; std::vector accepted; split(accepted, acceptedLanguage, ","); struct lang_score { std::string lang, region; float score; std::locale loc; bool operator<(const lang_score& rhs) const { return score > rhs.score; } }; std::vector scores; std::regex r(R"(([[:alpha:]]{1,8})(?:-([[:alnum:]]{1,8}))?(?:;q=([01](?:\.\d{1,3})))?)"); auto tryLangRegion = [&scores](const std::string& lang, const std::string& region, float score) { try { auto name = lang + '_' + region + ".UTF-8"; std::locale loc(name); if (iequals(loc.name(), name)) scores.push_back({lang, region, score, loc}); } catch(const std::exception &) { } }; for (auto& l: accepted) { std::smatch m; if (std::regex_search(l, m, r)) { float score = 1; if (m[3].matched) score = std::stof(m.str(3)); auto lang = m.str(1); if (m[2].matched) tryLangRegion(lang, m[2], score); else if (kLocalesPerLang.count(lang)) { for (auto region: kLocalesPerLang.at(lang)) tryLangRegion(lang, region, score); } } } if (scores.empty()) m_locale.reset(new std::locale("C")); else { std::stable_sort(scores.begin(), scores.end()); m_locale.reset(new std::locale(scores.front().loc)); } } return *m_locale; } // std::string request::get_request_line() const // { // return to_string(m_method) + std::string{' '} + m_uri + " HTTP/" + std::to_string(m_http_version_major) + '.' + std::to_string(m_http_version_minor); // } void request::set_header(const std::string& name, const std::string& value) { bool set = false; for (auto& h: m_headers) { if (iequals(h.name, name)) { h.value = value; set = true; break; } } if (not set) m_headers.push_back({ name, value }); } namespace { const char kNameValueSeparator[] = { ':', ' ' }, kCRLF[] = { '\r', '\n' }, kSpace[] = { ' ' }, kHTTPSlash[] = { ' ', 'H', 'T', 'T', 'P', '/' } ; } std::vector request::to_buffers() const { std::vector result; // m_request_line = get_request_line(); // m_request_line = m_method + ' ' + m_uri + " HTTP/" + std::to_string(m_http_version_major) + '.' + std::to_string(m_http_version_minor); result.push_back(boost::asio::buffer(m_method)); result.push_back(boost::asio::buffer(kSpace)); result.push_back(boost::asio::buffer(m_uri)); result.push_back(boost::asio::buffer(kHTTPSlash)); result.push_back(boost::asio::buffer(m_version)); result.push_back(boost::asio::buffer(kCRLF)); for (const header& h: m_headers) { result.push_back(boost::asio::buffer(h.name)); result.push_back(boost::asio::buffer(kNameValueSeparator)); result.push_back(boost::asio::buffer(h.value)); result.push_back(boost::asio::buffer(kCRLF)); } result.push_back(boost::asio::buffer(kCRLF)); result.push_back(boost::asio::buffer(m_payload)); return result; } std::ostream& operator<<(std::ostream& io, const request& req) { std::vector buffers = req.to_buffers(); for (auto& b: buffers) io.write(static_cast(b.data()), b.size()); return io; } } // zeep::http libzeep-5.1.7/lib-http/src/rest-controller.cpp0000664000175000017500000000316014176701531021201 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include namespace zeep::http { rest_controller::~rest_controller() { for (auto mp: m_mountpoints) delete mp; } bool rest_controller::handle_request(http::request& req, http::reply& rep) { std::string p = get_prefixless_path(req); bool result = false; for (auto& mp: m_mountpoints) { if (req.get_method() != mp->m_method) continue; parameter_pack params(req); if (mp->m_path_params.empty()) { if (mp->m_path != p) continue; } else { std::smatch m; if (not std::regex_match(p, m, mp->m_rx)) continue; for (size_t i = 0; i < mp->m_path_params.size(); ++i) { std::string v = m[i + 1].str(); decode_url(v); params.m_path_parameters.push_back({ mp->m_path_params[i], v }); } } try { mp->call(params, rep); } catch (status_type s) { rep = http::reply::stock_reply(s); json::element error({ { "error", get_status_description(s) }}); rep.set_content(error); rep.set_status(s); } catch (const std::exception& e) { rep = http::reply::stock_reply(http::internal_server_error); json::element error({ { "error", e.what() }}); rep.set_content(error); rep.set_status(http::internal_server_error); } result = true; break; } return result; } }libzeep-5.1.7/lib-http/src/security.cpp0000664000175000017500000001111414176701531017710 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include #include "glob.hpp" namespace pt = boost::posix_time; namespace zeep::http { namespace { #define BASE64URL "(?:[-_A-Za-z0-9]{4})*(?:[-_A-Za-z0-9]{2,3})?" std::regex kJWTRx("^(" BASE64URL R"()\.()" BASE64URL R"()\.()" BASE64URL ")$" ); } // -------------------------------------------------------------------- void security_context::validate_request(request& req) const { bool allow = m_default_allow; for (;;) { std::string path = uri(req.get_uri()).get_path().generic_string(); if (path.front() != '/') path.insert(path.begin(), '/'); std::set roles; auto access_token = req.get_cookie("access_token"); for (;;) { if (access_token.empty()) break; std::smatch m; if (not std::regex_match(access_token, m, kJWTRx)) break; json::element JOSEHeader; json::parse_json(decode_base64url(m[1].str()), JOSEHeader); const json::element kJOSEHeader{ { "typ", "JWT" }, { "alg", "HS256" } }; if (JOSEHeader != kJOSEHeader) break; // check signature auto sig = encode_base64url(hmac_sha256(m[1].str() + '.' + m[2].str(), m_secret)); if (sig != m[3].str()) break; json::element credentials; json::parse_json(decode_base64url(m[2].str()), credentials); if (not credentials.is_object() or not credentials["role"].is_array()) break; for (auto role: credentials["role"]) roles.insert(role.as()); req.set_credentials(std::move(credentials)); break; } // first check if this page is allowed without any credentials // that means, the first rule that matches this uri should allow // access. for (auto& rule: m_rules) { if (not glob_match(path, rule.m_pattern)) continue; if (rule.m_roles.empty()) allow = true; else { std::set common; std::set_intersection(roles.begin(), roles.end(), rule.m_roles.begin(), rule.m_roles.end(), std::inserter(common, common.begin())); allow = not common.empty(); } break; } break; } if (allow and m_validate_csrf and req.has_parameter("_csrf")) { auto req_csrf_param = req.get_parameter("_csrf"); auto req_csrf_cookie = req.get_cookie("csrf-token"); if (req_csrf_cookie != req_csrf_param) { allow = false; std::cerr << "CSRF validation failed" << std::endl; } } if (not allow) throw unauthorized_exception(); } // -------------------------------------------------------------------- void security_context::add_authorization_headers(reply &rep, const user_details user) { using namespace json::literals; auto JOSEHeader = R"({ "typ": "JWT", "alg": "HS256" })"_json; json::element credentials{ { "username", user.username } }; for (auto& role: user.roles) credentials["role"].push_back(role); auto h1 = encode_base64url(JOSEHeader.as()); auto h2 = encode_base64url(credentials.as()); auto h3 = encode_base64url(hmac_sha256(h1 + '.' + h2, m_secret)); rep.set_cookie("access_token", h1 + '.' + h2 + '.' + h3, { { "HttpOnly", "" }, { "SameSite", "Lax" } }); } // -------------------------------------------------------------------- void security_context::verify_username_password(const std::string& username, const std::string& raw_password, reply &rep) { try { auto user = m_users.load_user(username); bool match = false; for (auto const& [name, pwenc]: m_known_password_encoders) { if (user.password.compare(0, name.length(), name) != 0) continue; match = pwenc->matches(raw_password, user.password); break; } if (not match) throw invalid_password_exception(); add_authorization_headers(rep, user); } catch (const std::exception &) { throw invalid_password_exception(); } } // -------------------------------------------------------------------- std::pair security_context::get_csrf_token(request& req) { // See if we need to add a new csrf token bool csrf_is_new = false; std::string csrf = req.get_cookie("csrf-token"); if (csrf.empty()) { csrf_is_new = true; csrf = encode_base64url(random_hash()); req.set_cookie("csrf-token", csrf); } return { csrf, csrf_is_new }; } }libzeep-5.1.7/lib-http/src/server.cpp0000664000175000017500000001704514176701531017360 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include #include #include namespace zeep::http { namespace detail { // a thread specific logger thread_local std::unique_ptr s_log; std::mutex s_log_lock; } // namespace detail // -------------------------------------------------------------------- // http::basic_server basic_server::basic_server() : m_log_forwarded(true) , m_security_context(nullptr) , m_allowed_methods{"GET", "POST", "PUT", "OPTIONS", "HEAD", "DELETE"} { using namespace boost::local_time; local_time_facet *lf(new local_time_facet("[%d/%b/%Y:%H:%M:%S %z]")); std::cout.imbue(std::locale(std::cout.getloc(), lf)); // add a default error handler add_error_handler(new error_handler()); } basic_server::basic_server(security_context *s_cntxt) : basic_server() { m_security_context.reset(s_cntxt); } basic_server::~basic_server() { stop(); for (auto c : m_controllers) delete c; for (auto eh : m_error_handlers) delete eh; } void basic_server::set_template_processor(basic_template_processor *template_processor) { m_template_processor.reset(template_processor); } void basic_server::bind(const std::string &address, unsigned short port) { m_address = address; m_port = port; m_acceptor.reset(new boost::asio::ip::tcp::acceptor(get_io_context())); m_new_connection.reset(new connection(get_io_context(), *this)); // then bind the address here boost::asio::ip::tcp::endpoint endpoint; try { endpoint = boost::asio::ip::tcp::endpoint(boost::asio::ip::make_address(address), port); } catch (const std::exception &e) { boost::asio::ip::tcp::resolver resolver(get_io_context()); boost::asio::ip::tcp::resolver::query query(address, std::to_string(port)); endpoint = *resolver.resolve(query); } m_acceptor->open(endpoint.protocol()); m_acceptor->set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); m_acceptor->bind(endpoint); m_acceptor->listen(); m_acceptor->async_accept(m_new_connection->get_socket(), [this](boost::system::error_code ec) { this->handle_accept(ec); }); } void basic_server::add_controller(controller *c) { m_controllers.push_back(c); c->set_server(this); } void basic_server::add_error_handler(error_handler *eh) { m_error_handlers.push_front(eh); eh->set_server(this); } void basic_server::run(int nr_of_threads) { // keep the server at work until we call stop auto work = boost::asio::make_work_guard(get_io_context()); for (int i = 0; i < nr_of_threads; ++i) m_threads.emplace_back([this]() { get_io_context().run(); }); for (auto &t : m_threads) { if (t.joinable()) t.join(); } } void basic_server::stop() { m_new_connection.reset(); if (m_acceptor and m_acceptor->is_open()) m_acceptor->close(); m_acceptor.reset(); } void basic_server::handle_accept(boost::system::error_code ec) { if (not ec) { m_new_connection->start(); m_new_connection.reset(new connection(get_io_context(), *this)); m_acceptor->async_accept(m_new_connection->get_socket(), [this](boost::system::error_code ec) { this->handle_accept(ec); }); } } std::ostream &basic_server::get_log() { if (detail::s_log.get() == NULL) detail::s_log.reset(new std::ostringstream); return *detail::s_log; } void basic_server::handle_request(boost::asio::ip::tcp::socket &socket, request &req, reply &rep) { using namespace boost::posix_time; // we're pessimistic rep = reply::stock_reply(not_found); // set up a logging stream and collect logging information detail::s_log.reset(new std::ostringstream); ptime start = second_clock::local_time(); std::string referer("-"), userAgent("-"), accept, client; for (const header &h : req.get_headers()) { if (m_log_forwarded and iequals(h.name, "X-Forwarded-For")) { client = h.value; std::string::size_type comma = client.rfind(','); if (comma != std::string::npos) { if (comma < client.length() - 1 and client[comma + 1] == ' ') ++comma; client = client.substr(comma + 1, std::string::npos); } } else if (iequals(h.name, "Referer")) referer = h.value; else if (iequals(h.name, "User-Agent")) userAgent = h.value; else if (iequals(h.name, "Accept")) accept = h.value; } try { // asking for the remote endpoint address failed sometimes // causing aborting exceptions, so I moved it here. if (client.empty()) { boost::asio::ip::address addr = socket.remote_endpoint().address(); client = boost::lexical_cast(addr); } req.set_remote_address(client); // shortcut, check for supported method auto method = req.get_method(); if (not(m_allowed_methods.empty() or m_allowed_methods.count(method))) throw bad_request; std::string csrf; bool csrf_is_new = false; if (m_security_context) { m_security_context->validate_request(req); std::tie(csrf, csrf_is_new) = m_security_context->get_csrf_token(req); } // parse the uri std::string path = uri(req.get_uri()).get_path().generic_string(); // do the actual work. for (auto c : m_controllers) { if (not c->path_matches_prefix(path)) continue; if (c->dispatch_request(socket, req, rep)) break; } if (method == "HEAD") rep.set_content("", rep.get_content_type()); else if (csrf_is_new) rep.set_cookie("csrf-token", csrf, {{"HttpOnly", ""}, {"SameSite", "Lax"}, {"Path", "/"}}); // work around buggy IE... also, using req.accept() doesn't work since it contains */* ... duh if (starts_with(rep.get_content_type(), "application/xhtml+xml") and not contains(accept, "application/xhtml+xml") and contains(userAgent, "MSIE")) { rep.set_content_type("text/html; charset=utf-8"); } } catch (...) { auto eptr = std::current_exception(); for (auto eh : m_error_handlers) { try { if (eh->create_error_reply(req, eptr, rep)) break; } catch (...) { } } } log_request(client, req, rep, start, referer, userAgent, detail::s_log->str()); } void basic_server::log_request(const std::string &client, const request &req, const reply &rep, const boost::posix_time::ptime &start, const std::string &referer, const std::string &userAgent, const std::string &entry) noexcept { try { // protect the output stream from garbled log messages std::unique_lock lock(detail::s_log_lock); using namespace boost::local_time; local_date_time start_local(start, time_zone_ptr()); auto credentials = req.get_credentials(); std::string username = credentials.is_object() ? credentials["username"].as() : ""; if (username.empty()) username = "-"; const auto &[major, minor] = req.get_version(); std::cout << client << ' ' << "-" << ' ' << username << ' ' << start_local << ' ' << '"' << req.get_method() << ' ' << req.get_uri() << ' ' << "HTTP/" << major << '.' << minor << "\" " << rep.get_status() << ' ' << rep.size() << ' ' << '"' << referer << '"' << ' ' << '"' << userAgent << '"' << ' '; if (entry.empty()) std::cout << '-' << std::endl; else std::cout << '"' << entry << '"' << std::endl; } catch (...) { } } } // namespace zeep::http libzeep-5.1.7/lib-http/src/signals.cpp0000664000175000017500000000643514176701531017513 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include "signals.hpp" // -------------------------------------------------------------------- // // Signal handling // #if _MSC_VER #include #include #include #ifndef SIGQUIT #define SIGQUIT SIGTERM #endif #ifndef SIGHUP #define SIGHUP SIGBREAK #endif namespace zeep { struct signal_catcher_impl { static BOOL __stdcall CtrlHandler(DWORD inCntrlType); static void signal(int inSignal); static int sSignal; static std::condition_variable sCondition; static std::mutex sMutex; }; int signal_catcher_impl::sSignal; std::condition_variable signal_catcher_impl::sCondition; std::mutex signal_catcher_impl::sMutex; BOOL signal_catcher_impl::CtrlHandler(DWORD inCntrlType) { BOOL result = true; switch (inCntrlType) { // Handle the CTRL-C signal. case CTRL_C_EVENT: sSignal = SIGINT; break; // CTRL-CLOSE: confirm that the user wants to exit. case CTRL_CLOSE_EVENT: sSignal = SIGQUIT; break; // Pass other signals to the next handler. case CTRL_BREAK_EVENT: sSignal = SIGHUP; break; case CTRL_SHUTDOWN_EVENT: case CTRL_LOGOFF_EVENT: sSignal = SIGTERM; break; default: result = FALSE; } if (result) sCondition.notify_one(); return result; } signal_catcher::signal_catcher() : mImpl(nullptr) { if (not SetConsoleCtrlHandler(&signal_catcher_impl::CtrlHandler, true)) throw std::runtime_error("Could not install control handler"); } signal_catcher::~signal_catcher() { } void signal_catcher::block() { } void signal_catcher::unblock() { } int signal_catcher::wait() { std::unique_lock lock(signal_catcher_impl::sMutex); signal_catcher_impl::sCondition.wait(lock); return signal_catcher_impl::sSignal; } void signal_catcher::signal_hangup(std::thread &t) { signal_catcher_impl::CtrlHandler(CTRL_BREAK_EVENT); } } // namespace zeep #else #include #include #include namespace zeep { // -------------------------------------------------------------------- // // signal // struct signal_catcher_impl { sigset_t new_mask, old_mask; }; signal_catcher::signal_catcher() : mImpl(new signal_catcher_impl) { sigfillset(&mImpl->new_mask); } signal_catcher::~signal_catcher() { delete mImpl; } void signal_catcher::block() { pthread_sigmask(SIG_BLOCK, &mImpl->new_mask, &mImpl->old_mask); } void signal_catcher::unblock() { pthread_sigmask(SIG_SETMASK, &mImpl->old_mask, nullptr); } int signal_catcher::wait() { // Wait for signal indicating time to shut down. sigset_t wait_mask; sigemptyset(&wait_mask); sigaddset(&wait_mask, SIGINT); sigaddset(&wait_mask, SIGHUP); // sigaddset(&wait_mask, SIGCHLD); sigaddset(&wait_mask, SIGQUIT); sigaddset(&wait_mask, SIGTERM); pthread_sigmask(SIG_BLOCK, &wait_mask, 0); int sig = 0; sigwait(&wait_mask, &sig); return sig; } void signal_catcher::signal_hangup(std::thread &t) { // kill(getpid(), SIGHUP); pthread_kill(t.native_handle(), SIGHUP); } } // namespace zeep #endiflibzeep-5.1.7/lib-http/src/signals.hpp0000664000175000017500000000123514176701531017511 0ustar maartenmaarten// Copyright Maarten L. Hekkelman 2021. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #pragma once #include namespace zeep { class signal_catcher { public: signal_catcher(); ~signal_catcher(); void block(); void unblock(); int wait(); static void signal_hangup(std::thread &t); private: signal_catcher(const signal_catcher &) = delete; signal_catcher &operator=(const signal_catcher &) = delete; struct signal_catcher_impl *mImpl; }; } // namespace zeep libzeep-5.1.7/lib-http/src/soap-controller.cpp0000664000175000017500000001153614176701531021174 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include namespace zeep::http { soap_envelope::soap_envelope() : m_request(nullptr) { } // envelope::envelope(xml::document& data) // : m_request(nullptr) // { // const xml::xpath // sRequestPath("/Envelope[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/']/Body[position()=1]/*[position()=1]"); // std::list l = sRequestPath.evaluate(*data.root()); // if (l.empty()) // throw zeep::exception("Empty or invalid SOAP envelope passed"); // m_request = l.front(); // } xml::element make_envelope(xml::element&& data) { xml::element env("soap:Envelope", { { "xmlns:soap", "http://schemas.xmlsoap.org/soap/envelope/" }, { "soap:encodingStyle", "http://www.w3.org/2003/05/soap-encoding" } }); auto& body = env.emplace_back("soap:Body"); body.emplace_back(std::forward(data)); return env; } xml::element make_fault(const std::string& what) { xml::element fault("soap:Fault"); auto& faultCode = fault.emplace_back("faultcode"); faultCode.set_content("soap:Server"); auto& faultString(fault.emplace_back("faultstring")); faultString.set_content(what); return make_envelope(std::move(fault)); } xml::element make_fault(const std::exception& ex) { return make_fault(std::string(ex.what())); } // -------------------------------------------------------------------- bool soap_controller::handle_request(request& req, reply& reply) { bool result = false; std::string p = uri(req.get_uri()).get_path().generic_string(); while (p.front() == '/') p.erase(0, 1); if (req.get_method() == "POST" and p == m_prefix_path) { result = true; try { xml::document envelope(req.get_payload()); auto request = envelope.find_first( "/Envelope[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/']/Body[position()=1]/*[position()=1]"); if (request == envelope.cend()) throw zeep::exception("Empty or invalid SOAP envelope passed"); if (request->get_ns() != m_ns) throw zeep::exception("Invalid namespace for request"); std::string action = request->name(); // log() << action << ' '; for (auto& mp: m_mountpoints) { if (mp->m_action != action) continue; mp->call(*request, reply, m_ns); break; } } catch (const std::exception& e) { reply.set_content(make_fault(e)); reply.set_status(internal_server_error); } catch (status_type& s) { reply.set_content(make_fault(get_status_description(s))); reply.set_status(s); } } else if (req.get_method() == "GET" and p == m_prefix_path + "/wsdl") { reply.set_content(make_wsdl()); reply.set_status(ok); } return result; } /// \brief Create a WSDL based on the registered actions xml::element soap_controller::make_wsdl() { // start by making the root node: wsdl:definitions xml::element wsdl("wsdl:definitions", { { "targetNamespace", m_ns }, { "xmlns:ns", m_ns }, { "xmlns:wsdl", "http://schemas.xmlsoap.org/wsdl/" }, { "xmlns:soap", "http://schemas.xmlsoap.org/wsdl/soap/" } }); // add wsdl:types auto& types = wsdl.emplace_back("wsdl:types"); // add xsd:schema auto& schema = types.emplace_back("xsd:schema", { { "targetNamespace", m_ns }, { "elementFormDefault", "qualified" }, { "attributeFormDefault", "unqualified" }, { "xmlns:xsd", "http://www.w3.org/2001/XMLSchema" } }); using namespace std::literals; // add wsdl:binding auto& binding = wsdl.emplace_back("wsdl:binding", { { "name", m_service }, { "type", "ns:" + m_service + "PortType" } }); // add soap:binding binding.emplace_back("soap:binding", { { "style", "document" }, { "transport", "http://schemas.xmlsoap.org/soap/http" } }); // add wsdl:portType auto& portType = wsdl.emplace_back("wsdl:portType", { { "name", m_service + "PortType" } }); // // // and the types // // xml::type_map typeMap; // // detail::message_map messageMap; // // for (auto& mp: m_mountpoints) // // mp->collect(typeMap, messageMap, portType, binding); // // for (detail::message_map::iterator m = messageMap.begin(); m != messageMap.end(); ++m) // // wsdl->append(m->second); // // for (xml::type_map::iterator t = typeMap.begin(); t != typeMap.end(); ++t) // // schema->append(t->second); // finish with the wsdl:service auto& service = wsdl.emplace_back("wsdl:service", { { "name", m_service } }); auto& port = service.emplace_back("wsdl:port", { { "name", m_service }, { "binding", "ns:" + m_service } }); port.emplace_back("soap:address", { { "location", m_location } }); return wsdl; } } libzeep-5.1.7/lib-http/src/tag-processor-v2.cpp0000664000175000017500000006230114176701531021162 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019-2020 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include namespace fs = std::filesystem; namespace pt = boost::posix_time; namespace zeep::http { std::unordered_set kFixedValueBooleanAttributes{ "async", "autofocus", "autoplay", "checked", "controls", "declare", "default", "defer", "disabled", "formnovalidate", "hidden", "ismap", "loop", "multiple", "novalidate", "nowrap", "open", "pubdate", "readonly", "required", "reversed", "scoped", "seamless", "selected" }; // -------------------------------------------------------------------- int attribute_precedence(const xml::attribute& attr) { if (attr.name() == "insert" or attr.name() == "replace") return -10; else if (attr.name() == "each") return -9; else if (attr.name() == "if" or attr.name() == "unless" or attr.name() == "switch" or attr.name() == "case") return -8; else if (attr.name() == "object" or attr.name() == "with") return -7; else if (attr.name() == "attr" or attr.name() == "attrappend" or attr.name() == "attrprepend" or attr.name() == "classappend" or attr.name() == "styleappend") return -6; else if (attr.name() == "text" or attr.name() == "utext") return 1; else if (attr.name() == "fragment") return 2; else if (attr.name() == "remove") return 3; else return 0; }; // -------------------------------------------------------------------- // tag_processor_v2::tag_processor_v2(const char* ns) : tag_processor(ns) { using namespace std::placeholders; register_attr_handler("assert", std::bind(&tag_processor_v2::process_attr_assert, this, _1, _2, _3, _4, _5)); register_attr_handler("attr", std::bind(&tag_processor_v2::process_attr_attr, this, _1, _2, _3, _4, _5)); register_attr_handler("classappend", std::bind(&tag_processor_v2::process_attr_classappend, this, _1, _2, _3, _4, _5)); register_attr_handler("each", std::bind(&tag_processor_v2::process_attr_each, this, _1, _2, _3, _4, _5)); register_attr_handler("if", std::bind(&tag_processor_v2::process_attr_if, this, _1, _2, _3, _4, _5, false)); register_attr_handler("include", std::bind(&tag_processor_v2::process_attr_include, this, _1, _2, _3, _4, _5, TemplateIncludeAction::include)); register_attr_handler("inline", std::bind(&tag_processor_v2::process_attr_inline, this, _1, _2, _3, _4, _5)); register_attr_handler("insert", std::bind(&tag_processor_v2::process_attr_include, this, _1, _2, _3, _4, _5, TemplateIncludeAction::insert)); register_attr_handler("replace", std::bind(&tag_processor_v2::process_attr_include, this, _1, _2, _3, _4, _5, TemplateIncludeAction::replace)); register_attr_handler("styleappend", std::bind(&tag_processor_v2::process_attr_styleappend, this, _1, _2, _3, _4, _5)); register_attr_handler("switch", std::bind(&tag_processor_v2::process_attr_switch, this, _1, _2, _3, _4, _5)); register_attr_handler("text", std::bind(&tag_processor_v2::process_attr_text, this, _1, _2, _3, _4, _5, true)); register_attr_handler("unless", std::bind(&tag_processor_v2::process_attr_if, this, _1, _2, _3, _4, _5, true)); register_attr_handler("utext", std::bind(&tag_processor_v2::process_attr_text, this, _1, _2, _3, _4, _5, false)); register_attr_handler("with", std::bind(&tag_processor_v2::process_attr_with, this, _1, _2, _3, _4, _5)); // register_attr_handler("remove", std::bind(&tag_processor_v2::process_attr_remove, this, _1, _2, _3, _4, _5)); } void tag_processor_v2::process_xml(xml::node* node, const scope& parentScope, fs::path dir, basic_template_processor& loader) { m_template.clear(); m_template.emplace_back(*static_cast(node)); process_node(node, parentScope, dir, loader); auto e = dynamic_cast(node); if (e != nullptr) post_process(e, parentScope, dir, loader); } // -------------------------------------------------------------------- // post processing: remove blocks, remove attributes with ns = ns(), process remove void tag_processor_v2::post_process(xml::element* e, const scope& parentScope, fs::path dir, basic_template_processor& loader) { auto parent = e->parent(); for (auto ai = e->attributes().begin(); ai != e->attributes().end();) { if (ai->get_ns() == m_ns and ai->name() == "remove" and parent != nullptr) { scope sub(parentScope); auto action = process_attr_remove(e, ai, sub, dir, loader); if (action == AttributeAction::remove) { parent->erase(e); return; } } if (ai->get_ns() == m_ns) ai = e->attributes().erase(ai); else ++ai; } if (e->get_ns() == m_ns and e->name() == "block" and parent != nullptr) { for (auto& ci: e->nodes()) parent->nodes().insert(e, std::move(ci)); e = parent->erase(e); return; } // take a copy since iterators might get invalid std::vector children; std::transform(e->begin(), e->end(), std::back_inserter(children), [](auto& c) { return &c; }); for (auto& c: children) post_process(c, parentScope, dir, loader); // postpone removing namespaces until all children have been processed for (auto ai = e->attributes().begin(); ai != e->attributes().end();) { if (ai->is_namespace() and ai->value() == m_ns) ai = e->attributes().erase(ai); else ++ai; } } // ----------------------------------------------------------------------- void tag_processor_v2::process_text(xml::text& text, const scope& scope) { xml::element* parent = text.parent(); auto next = std::find_if(parent->nodes().begin(), parent->nodes().end(), [&text](auto& n) { return &n == &text; }); assert(next != parent->nodes().end()); ++next; std::string s = text.get_text(); size_t b = 0; while (b < s.length()) { auto i = s.find('[', b); if (i == std::string::npos) break; char c2 = s[i + 1]; if (c2 != '[' and c2 != '(') { b = i + 1; continue; } i += 2; auto j = s.find(c2 == '(' ? ")]" : "]]", i); if (j == std::string::npos) break; auto m = s.substr(i, j - i); if (not process_el(scope, m)) m = "Error processing " + m; if (c2 == '(' and m.find('<') != std::string::npos) // 'unescaped' text, but since we're an xml library reverse this by parsing the result and putting the { xml::document subDoc("" + m + ""); auto foo = subDoc.front(); for (auto& n: foo.nodes()) parent->nodes().emplace(next, std::move(n)); text.set_text(s.substr(0, i - 2)); s = s.substr(j + 2); b = 0; parent->nodes().emplace(next, xml::text(s)); } else { s.replace(i - 2, j - i + 4, m); b = i + m.length(); } } text.set_text(s); } // -------------------------------------------------------------------- std::vector> tag_processor_v2::resolve_fragment_spec( xml::element* node, fs::path dir, basic_template_processor& loader, const json::element& spec, const scope& scope) { if (spec.contains("is-node-set") and spec["is-node-set"]) return scope.get_nodeset(spec["node-set-name"].as()); if (spec.is_object() and spec["template"].is_string() and spec["selector"].is_object() and spec["selector"]["xpath"].is_string()) { auto file = spec["template"].as(); auto selector = spec["selector"]["xpath"].as(); if (not (spec.is_null() or selector.empty())) return resolve_fragment_spec(node, dir, loader, file, selector, true); } else if (spec.is_string()) { const std::regex kTemplateRx(R"(^\s*(\S*)\s*::\s*(#?[-_[:alnum:]]+)$)"); std::smatch m; std::string s = spec.as(); if (not std::regex_match(s, m, kTemplateRx)) throw std::runtime_error("Invalid attribute value for :include/insert/replace"); std::string file = m[1]; std::string id = m[2]; bool byID = false; std::string selector; if (id[0] == '#') // by ID { byID = true; selector = "//*[@id='" + id.substr(1) + "']"; } else selector = "//*[name()='"+id+"' or attribute::*[namespace-uri() = $ns and (local-name() = 'ref' or local-name() = 'fragment') and starts-with(string(), '"+id+"')]]"; return resolve_fragment_spec(node, dir, loader, file, selector, byID); } return {}; } std::vector> tag_processor_v2::resolve_fragment_spec( xml::element* node, fs::path dir, basic_template_processor& loader, const std::string& file, const std::string& selector, bool byID) { xml::context ctx; ctx.set("ns", ns()); xml::xpath xp(selector); // xp.dump(); xml::document doc; xml::element* root = nullptr; if (file.empty() or file == "this") root = m_template.root(); else { doc.set_preserve_cdata(true); bool loaded = false; for (const char* ext: { "", ".xhtml", ".html", ".xml" }) { std::error_code ec; fs::path template_file = dir / (file + ext); (void)loader.file_time(template_file.string(), ec); if (ec) continue; loader.load_template(template_file.string(), doc); loaded = true; break; } if (not loaded) throw std::runtime_error("Could not locate template file " + file); root = doc.root(); } std::vector> result; for (auto n: xp.evaluate(*root, ctx)) { auto copy = n->clone(); auto e = dynamic_cast(copy); if (e != nullptr) { if (root != node->root()) fix_namespaces(*e, static_cast(*n), *node); auto& attr = e->attributes(); if (byID) // remove the copied ID attr.erase("id"); attr.erase(e->prefix_tag("ref", ns())); attr.erase(e->prefix_tag("fragment", ns())); } result.emplace_back(copy); } return result; } // ----------------------------------------------------------------------- void tag_processor_v2::process_node(xml::node* node, const scope& parentScope, std::filesystem::path dir, basic_template_processor& loader) { for (;;) { xml::text* text = dynamic_cast(node); if (text != nullptr) { process_text(*text, parentScope); break; } xml::element* e = dynamic_cast(node); if (e == nullptr) break; xml::element* parent = e->parent(); scope scope(parentScope); bool inlined = false; try { auto& attributes = e->attributes(); attributes.sort([](auto a, auto b) { return attribute_precedence(a) < attribute_precedence(b); }); auto attr = attributes.begin(); while (attr != attributes.end()) { if (attr->get_ns() != m_ns or attr->name() == "remove" or attr->name() == "ref" or attr->name() == "fragment") { ++attr; continue; } AttributeAction action = AttributeAction::none; if (attr->name() == "object") scope.select_object(evaluate_el(scope, attr->value())); else if (attr->name() == "inline") { action = process_attr_inline(e, attr, scope, dir, loader); inlined = true; } else { auto h = m_attr_handlers.find(attr->name()); if (h != m_attr_handlers.end()) action = h->second(e, attr, scope, dir, loader); else if (kFixedValueBooleanAttributes.count(attr->name())) action = process_attr_boolean_value(e, attr, scope, dir, loader); else action = process_attr_generic(e, attr, scope, dir, loader); } if (action == AttributeAction::remove) { parent->erase(node); node = nullptr; break; } attr = e->attributes().erase(attr); } } catch (const std::exception& ex) { parent->nodes().insert(e, xml::text("Error processing element '" + e->get_qname() + "': " + ex.what())); // parent->erase(e); } if (node != nullptr) { auto i = e->nodes().begin(); while (i != e->nodes().end()) { auto& n = *i; ++i; if (inlined and dynamic_cast(&n) != nullptr) continue; process_node(&n, scope, dir, loader); } } break; } } // ----------------------------------------------------------------------- auto tag_processor_v2::process_attr_if(xml::element* element, xml::attribute* attr, scope& scope, fs::path dir, basic_template_processor& loader, bool unless) ->AttributeAction { return ((not evaluate_el(scope, attr->value()) == unless)) ? AttributeAction::none : AttributeAction::remove; } // ----------------------------------------------------------------------- auto tag_processor_v2::process_attr_assert(xml::element* element, xml::attribute* attr, scope& scope, fs::path dir, basic_template_processor& loader) ->AttributeAction { if (not evaluate_el_assert(scope, attr->value())) throw zeep::exception("Assertion failed for '" + attr->value() + "'"); return AttributeAction::none; } // ----------------------------------------------------------------------- auto tag_processor_v2::process_attr_text(xml::element* element, xml::attribute* attr, scope& scope, fs::path dir, basic_template_processor& loader, bool escaped) ->AttributeAction { json::element obj = evaluate_el(scope, attr->value()); if (not obj.is_null()) { std::string text; if (obj.is_object() and obj.contains("is-node-set") and obj["is-node-set"]) { auto s = scope.get_nodeset(obj["node-set-name"].as()); for (auto& n: s) text += n->str(); } else text = obj.as(); if (escaped) element->set_text(text); else { element->set_text(""); xml::document subDoc("" + text + ""); auto foo = subDoc.front(); for (auto& n: foo.nodes()) element->nodes().emplace(element->end(), std::move(n)); } } return AttributeAction::none; } // -------------------------------------------------------------------- auto tag_processor_v2::process_attr_switch(xml::element* element, xml::attribute* attr, scope& scope, fs::path dir, basic_template_processor& loader) -> AttributeAction { auto vo = evaluate_el(scope, attr->value()); std::string v; if (not vo.is_null()) v = vo.as(); xml::element e2(*element); element->nodes().clear(); auto cases = e2.find(".//*[@case]"); xml::element* selected = nullptr; xml::element* wildcard = nullptr; for (auto c: cases) { auto ca = c->get_attribute(element->prefix_tag("case", ns())); if (ca == "*") wildcard = c; else if (v == ca or (process_el(scope, ca) and v == ca)) { selected = c; break; } } if (selected == nullptr) selected = wildcard; if (selected != nullptr) { selected->attributes().erase(element->prefix_tag("case", ns())); element->emplace_back(std::move(*selected)); } return AttributeAction::none; } // ----------------------------------------------------------------------- auto tag_processor_v2::process_attr_with(xml::element* element, xml::attribute* attr, scope& scope, fs::path dir, basic_template_processor& loader) -> AttributeAction { evaluate_el_with(scope, attr->value()); return AttributeAction::none; } // -------------------------------------------------------------------- tag_processor_v2::AttributeAction tag_processor_v2::process_attr_each(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader) { std::regex kEachRx(R"(^\s*(\w+)(?:\s*,\s*(\w+))?\s*:\s*(.+)$)"); std::smatch m; auto s = attr->value(); if (not std::regex_match(s, m, kEachRx)) throw std::runtime_error("Invalid attribute value for :each"); std::string var = m[1]; std::string stat = m[2]; object collection = evaluate_el(scope, m[3]); if (collection.is_array()) { xml::element *parent = node->parent(); assert(parent); size_t collectionSize = collection.size(); size_t ix = 0; for (auto v: collection) { auto subscope(scope); subscope.put(var, v); if (not stat.empty()) subscope.put(stat, object{ { "index", ix }, { "count", ix + 1 }, { "size", collectionSize }, { "current", v}, { "even", ix % 2 == 1 }, { "odd", ix % 2 == 0 }, { "first", ix == 0 }, { "last", ix + 1 == collectionSize } }); xml::element clone(*node); clone.attributes().erase(attr->get_qname()); auto i = parent->emplace(node, std::move(clone)); // insert before processing, to assign namespaces process_node(i, subscope, dir, loader); ++ix; } } return AttributeAction::remove; } // -------------------------------------------------------------------- tag_processor_v2::AttributeAction tag_processor_v2::process_attr_attr(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader) { auto v = evaluate_el_attr(scope, attr->value()); for (auto vi: v) node->set_attribute(vi.first, vi.second); return AttributeAction::none; } // -------------------------------------------------------------------- tag_processor_v2::AttributeAction tag_processor_v2::process_attr_generic(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader) { auto s = attr->value(); process_el(scope, s); node->set_attribute(attr->name(), s); return AttributeAction::none; } // -------------------------------------------------------------------- tag_processor_v2::AttributeAction tag_processor_v2::process_attr_boolean_value( xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader) { auto s = attr->value(); if (evaluate_el(scope, s)) node->set_attribute(attr->name(), attr->name()); else node->attributes().erase(attr->name()); return AttributeAction::none; } // -------------------------------------------------------------------- tag_processor_v2::AttributeAction tag_processor_v2::process_attr_inline(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader) { auto type = attr->value(); if (type == "javascript" or type == "css") { std::regex r = std::regex(R"(/\*\[\[(.+?)\]\]\*/\s*('([^'\\]|\\.)*'|"([^"\\]|\\.)*"|[^;\n])*|\[\[(.+?)\]\])"); for (auto& n: node->nodes()) { xml::text* text = dynamic_cast(&n); if (text == nullptr) continue; std::string s = text->get_text(); std::string t; auto b = std::sregex_iterator(s.begin(), s.end(), r); auto e = std::sregex_iterator(); auto i = s.begin(); for (auto ri = b; ri != e; ++ri) { auto m = *ri; t.append(i, s.begin() + m.position()); i = s.begin() + m.position() + m.length(); auto v = m[1].matched ? m.str(1) : m.str(5); object obj = evaluate_el(scope, v); std::stringstream ss; ss << obj; v = ss.str(); t.append(v.begin(), v.end()); } t.append(i, s.end()); text->set_text(t); } } else if (type != "none") { for (auto& n: node->nodes()) { xml::text* text_p = dynamic_cast(&n); if (text_p == nullptr) continue; auto& text = *text_p; std::string s = text.get_text(); auto next = text.next(); size_t b = 0; while (b < s.length()) { auto i = s.find('[', b); if (i == std::string::npos) break; char c2 = s[i + 1]; if (c2 != '[' and c2 != '(') { b = i + 1; continue; } i += 2; auto j = s.find(c2 == '(' ? ")]" : "]]", i); if (j == std::string::npos) break; auto m = s.substr(i, j - i); if (not process_el(scope, m)) m = "Error processing " + m; if (c2 == '(' and m.find('<') != std::string::npos) // 'unescaped' text, but since we're an xml library reverse this by parsing the result and putting the { xml::document subDoc("" + m + ""); for (auto& subnode: subDoc.front().nodes()) node->nodes().emplace(next, std::move(subnode)); text.set_text(s.substr(0, i - 2)); s = s.substr(j + 2); b = 0; node->nodes().insert(next, xml::text(s)); } else { s.replace(i - 2, j - i + 4, m); b = i + m.length() - 2; } } text.set_text(s); } } return AttributeAction::none; } // -------------------------------------------------------------------- tag_processor_v2::AttributeAction tag_processor_v2::process_attr_include(xml::element* node, xml::attribute* attr, scope& parentScope, std::filesystem::path dir, basic_template_processor& loader, TemplateIncludeAction tia) { AttributeAction result = AttributeAction::none; auto av = attr->value(); auto o = evaluate_el_link(parentScope, av); json::element params; if (o.is_object()) params = o["selector"]["params"]; auto templates = resolve_fragment_spec(node, dir, loader, o, parentScope); for (auto& templ: templates) { xml::element* el = dynamic_cast(templ.get()); if (el == nullptr) { if (tia == TemplateIncludeAction::include) { auto i = node->nodes().emplace(node->end(), *templ); process_node(i, parentScope, dir, loader); } else { xml::element::node_iterator i; if (tia == TemplateIncludeAction::insert) i = node->nodes().emplace(node->end(), *templ); else { i = node->parent()->nodes().emplace(node, *templ); result = AttributeAction::remove; } process_node(i, parentScope, dir, loader); } continue; } // take a full copy, and fix up the prefixes for the namespaces, if required xml::element& replacement(*el); scope scope(parentScope); for (auto& f: el->attributes()) { // the copy lost its namespace info if (node->namespace_for_prefix(f.get_prefix()) != ns() or f.name() != "fragment") continue; auto v = f.value(); auto s = v.find('('); auto p = params.begin(); while (s != std::string::npos and p != params.end()) { s += 1; auto e = v.find_first_of(",)", s); if (e == std::string::npos) break; auto argname = v.substr(s, e - s); auto& po = *p; if (po.is_object()) { json::element pe{ { "is-node-set", true }, { "node-set-name", argname } }; scope.put(argname, pe); auto ns = resolve_fragment_spec(node, dir, loader, po, parentScope); if (ns.empty()) scope.put(argname, po); else scope.set_nodeset(argname, std::move(ns)); } else scope.put(argname, po); ++p; s = e; } break; } if (tia == TemplateIncludeAction::include) { for (auto& child: replacement.nodes()) { auto i = node->nodes().emplace(node->end(), std::move(child)); process_node(i, scope, dir, loader); } } else { xml::element::node_iterator i; if (tia == TemplateIncludeAction::insert) i = node->emplace(node->end(), std::move(replacement)); else { i = node->parent()->emplace(node, std::move(replacement)); result = AttributeAction::remove; } auto e2 = dynamic_cast(&*i); if (e2 != nullptr) { auto& attrs = e2->attributes(); // if (templateID[0] == '#') // remove the copied ID // attr.erase("id"); attrs.erase(i->prefix_tag("ref", ns())); attrs.erase(i->prefix_tag("fragment", ns())); } process_node(i, scope, dir, loader); } } if (result == AttributeAction::remove) node->parent()->flatten_text(); else node->flatten_text(); return result; } // -------------------------------------------------------------------- tag_processor_v2::AttributeAction tag_processor_v2::process_attr_remove(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader) { auto mode = attr->value(); AttributeAction result = AttributeAction::none; if (mode == "all") result = AttributeAction::remove; else if (mode == "body") node->erase(node->begin(), node->end()); else if (mode == "all-but-first") { if (node->size() > 1) node->erase(node->begin() + 1, node->end()); } else if (mode == "tag") { auto i = xml::element::iterator(node); for (auto& c: *node) { i = node->parent()->emplace(i, std::move(c)); // process_node(i, scope, dir, loader); ++i; } result = AttributeAction::remove; } return result; } // -------------------------------------------------------------------- tag_processor_v2::AttributeAction tag_processor_v2::process_attr_classappend(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader) { for (;;) { auto s = attr->value(); s = process_el_2(scope, s); trim(s); if (s.empty()) break; auto c = node->attributes().find("class"); if (c == node->attributes().end()) { node->attributes().emplace({"class", s}); break; } auto cs = c->value(); trim(cs); if (cs.empty()) c->set_text(s); else c->set_text(cs + ' ' + s); break; } return AttributeAction::none; } // -------------------------------------------------------------------- tag_processor_v2::AttributeAction tag_processor_v2::process_attr_styleappend(xml::element* node, xml::attribute* attr, scope& scope, std::filesystem::path dir, basic_template_processor& loader) { for (;;) { auto s = attr->value(); s = process_el_2(scope, s); trim(s); if (s.empty()) break; if (s.back() != ';') s += ';'; auto c = node->attributes().find("style"); if (c == node->attributes().end()) { node->attributes().emplace({"style", s}); break; } auto cs = c->value(); trim(cs); if (cs.empty()) { c->set_text(s); break; } if (cs.back() == ';') c->set_text(cs + ' ' + s); else c->set_text(cs + "; " + s); break; } return AttributeAction::none; } }libzeep-5.1.7/lib-http/src/tag-processor.cpp0000664000175000017500000002644114176701531020642 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2019 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include namespace fs = std::filesystem; namespace pt = boost::posix_time; namespace zeep::http { // -------------------------------------------------------------------- // tag_processor_v1::tag_processor_v1(const char* ns) : tag_processor(ns) { } bool tag_processor_v1::process_el(const scope& scope, std::string& s) { bool replaced = false; size_t b = 0; while (b < s.length()) { auto i = s.find('$', b); if (i == std::string::npos) break; char c2 = s[i + 1]; if (c2 != '{') { b = i + 1; continue; } auto j = s.find('}', i); if (j == std::string::npos) break; j += 1; replaced = true; auto m = s.substr(i, j - i); if (process_el(scope, m)) s.replace(i, j - i, m); else s.erase(i, j - i); b = j; } return replaced; } void tag_processor_v1::process_xml(xml::node *node, const scope& scope, fs::path dir, basic_template_processor& loader) { xml::text* text = dynamic_cast(node); if (text != nullptr) { std::string s = text->get_text(); if (process_el(scope, s)) text->set_text(s); return; } xml::element* e = dynamic_cast(node); if (e == nullptr) return; // if node is one of our special nodes, we treat it here if (e->get_ns() == m_ns) { xml::element* parent = e->parent(); try { auto nested(scope); process_tag(e->name(), e, scope, dir, loader); } catch (exception& ex) { parent->nodes().push_back( xml::text("Error processing directive '" + e->get_qname() + "': " + ex.what())); } try { parent->erase(e); } catch (exception& ex) { std::cerr << "exception: " << ex.what() << std::endl << *e << std::endl; } } else { for (auto& a : e->attributes()) { std::string s = a.value(); if (process_el(scope, s)) a.value(s); } std::vector nodes{ e->begin(), e->end() }; for (auto n: nodes) process_xml(n, scope, dir, loader); } } void tag_processor_v1::process_tag(const std::string& tag, xml::element *node, const scope& scope, fs::path dir, basic_template_processor& loader) { if (tag == "include") process_include(node, scope, dir, loader); else if (tag == "if") process_if(node, scope, dir, loader); else if (tag == "iterate") process_iterate(node, scope, dir, loader); else if (tag == "for") process_for(node, scope, dir, loader); else if (tag == "number") process_number(node, scope, dir, loader); else if (tag == "options") process_options(node, scope, dir, loader); else if (tag == "option") process_option(node, scope, dir, loader); else if (tag == "checkbox") process_checkbox(node, scope, dir, loader); // else if (tag == "url") process_url(node, scope, dir, loader); else if (tag == "param") process_param(node, scope, dir, loader); else if (tag == "embed") process_embed(node, scope, dir, loader); else throw exception("unimplemented tag"); } void tag_processor_v1::process_include(xml::element *node, const scope& scope, fs::path dir, basic_template_processor& loader) { // an include directive, load file and include resulting content std::string file = node->get_attribute("file"); process_el(scope, file); if (file.empty()) throw exception("missing file attribute"); xml::document doc; doc.set_preserve_cdata(true); loader.load_template((dir / file).string(), doc); process_xml(&doc.front(), scope, (dir / file).parent_path(), loader); auto parent = node->parent(); parent->insert(node, std::move(doc.front())); } void tag_processor_v1::process_if(xml::element *node, const scope& scope, fs::path dir, basic_template_processor& loader) { std::string test = node->get_attribute("test"); if (evaluate_el(scope, test)) { auto parent = node->parent(); assert(parent); for (auto& c: *node) { auto copy = parent->emplace(node, std::move(c)); // insert before processing, to assign namespaces process_xml(copy, scope, dir, loader); } } } void tag_processor_v1::process_iterate(xml::element *node, const scope& scope, fs::path dir, basic_template_processor& loader) { using json::detail::value_type; object collection = scope[node->get_attribute("collection")]; if (collection.type() == value_type::string or collection.type() == value_type::null) collection = evaluate_el(scope, node->get_attribute("collection")); std::string var = node->get_attribute("var"); if (var.empty()) throw exception("missing var attribute in mrs:iterate"); auto parent = node->parent(); assert(parent); for (object& o : collection) { auto s(scope); s.put(var, o); for (auto& c: *node) { auto i = parent->emplace(node, c); // insert before processing, to assign namespaces process_xml(&*i, s, dir, loader); } } } void tag_processor_v1::process_for(xml::element *node, const scope& scope, fs::path dir, basic_template_processor& loader) { object b = evaluate_el(scope, node->get_attribute("begin")); object e = evaluate_el(scope, node->get_attribute("end")); std::string var = node->get_attribute("var"); if (var.empty()) throw exception("missing var attribute in mrs:iterate"); for (int32_t i = b.as(); i <= e.as(); ++i) { auto s(scope); s.put(var, object(i)); auto parent = node->parent(); assert(parent); for (auto& c: *node) { auto i2 = parent->emplace(node, c); // insert before processing, to assign namespaces process_xml(i2, s, dir, loader); } } } class with_thousands : public std::numpunct { protected: // char_type do_thousands_sep() const { return tsp; } std::string do_grouping() const { return "\03"; } // char_type do_decimal_point() const { return dsp; } }; void tag_processor_v1::process_number(xml::element *node, const scope& scope, fs::path dir, basic_template_processor& loader) { std::string number = node->get_attribute("n"); std::string format = node->get_attribute("f"); if (format == "#,##0B") // bytes, convert to a human readable form { const char kBase[] = {'B', 'K', 'M', 'G', 'T', 'P', 'E'}; // whatever uint64_t nr = evaluate_el(scope, number).as(); int base = 0; while (nr > 1024) { nr /= 1024; ++base; } std::locale mylocale(std::locale(), new with_thousands); std::ostringstream s; s.imbue(mylocale); s.setf(std::ios::fixed, std::ios::floatfield); s.precision(1); s << nr << ' ' << kBase[base]; number = s.str(); } else if (format.empty() or starts_with(format, "#,##0")) { uint64_t nr = evaluate_el(scope, number).as(); std::locale mylocale(std::locale(), new with_thousands); std::ostringstream s; s.imbue(mylocale); s << nr; number = s.str(); } auto parent = node->parent(); parent->nodes().emplace(node, zeep::xml::text(number)); } void tag_processor_v1::process_options(xml::element *node, const scope& scope, fs::path dir, basic_template_processor& loader) { using ::zeep::json::detail::value_type; object collection = scope[node->get_attribute("collection")]; if (collection.type() == value_type::string or collection.type() == value_type::null) collection = evaluate_el(scope, node->get_attribute("collection")); if (collection.is_array()) { std::string value = node->get_attribute("value"); std::string label = node->get_attribute("label"); std::string selected = node->get_attribute("selected"); if (not selected.empty()) process_el(scope, selected); for (object& o : collection) { zeep::xml::element option("option"); if (not(value.empty() or label.empty())) { option.set_attribute("value", o[value].as()); if (selected == o[value].as()) option.set_attribute("selected", "selected"); option.add_text(o[label].as()); } else { option.set_attribute("value", o.as()); if (selected == o.as()) option.set_attribute("selected", "selected"); option.add_text(o.as()); } auto parent = node->parent(); assert(parent); parent->emplace(node, std::move(option)); } } } void tag_processor_v1::process_option(xml::element *node, const scope& scope, fs::path dir, basic_template_processor& loader) { std::string value = node->get_attribute("value"); if (not value.empty()) process_el(scope, value); std::string selected = node->get_attribute("selected"); if (not selected.empty()) process_el(scope, selected); zeep::xml::element option("option"); option.set_attribute("value", value); if (selected == value) option.set_attribute("selected", "selected"); auto parent = node->parent(); assert(parent); parent->emplace(node, std::move(option)); for (auto& c: *node) { auto i = option.emplace(option.end(), c); process_xml(i, scope, dir, loader); } } void tag_processor_v1::process_checkbox(xml::element *node, const scope& scope, fs::path dir, basic_template_processor& loader) { std::string name = node->get_attribute("name"); if (not name.empty()) process_el(scope, name); bool checked = false; if (evaluate_el(scope, node->get_attribute("checked"))) checked = true; zeep::xml::element checkbox("input"); checkbox.set_attribute("type", "checkbox"); checkbox.set_attribute("name", name); checkbox.set_attribute("value", "true"); if (checked) checkbox.set_attribute("checked", "true"); auto parent = node->parent(); assert(parent); parent->emplace(node, std::move(checkbox)); for (auto& c: *node) { auto i = checkbox.emplace(checkbox.end(), c); process_xml(i, scope, dir, loader); } } void tag_processor_v1::process_url(xml::element *node, const scope& scope, fs::path dir, basic_template_processor& loader) { // std::string var = node->get_attr("var"); // parameter_map parameters; // get_parameters(scope, parameters); // for (zeep::xml::element *e : *node) // { // if (e->ns() == m_ns and e->name() == "param") // { // std::string name = e->get_attr("name"); // std::string value = e->get_attr("value"); // process_el(scope, value); // parameters.replace(name, value); // } // } // std::string url = scope["baseuri"].as(); // bool first = true; // for (parameter_map::value_type p : parameters) // { // url += (first ? '?' : '&'); // first = false; // url += zeep::http::encode_url(p.first) + '=' + zeep::http::encode_url(p.second.as()); // } // scope& s(const_cast(scope)); // s.put(var, url); } void tag_processor_v1::process_param(xml::element *node, const scope& scope, fs::path dir, basic_template_processor& loader) { throw exception("Invalid XML, cannot have a stand-alone mrs:param element"); } void tag_processor_v1::process_embed(xml::element *node, const scope& scope, fs::path dir, basic_template_processor& loader) { // an embed directive, load xml from attribute and include parsed content std::string xml = scope[node->get_attribute("var")].as(); if (xml.empty()) throw exception("Missing var attribute in embed tag"); zeep::xml::document doc; doc.set_preserve_cdata(true); std::istringstream os(xml); os >> doc; auto parent = node->parent(); auto i = parent->emplace(node, std::move(doc.front())); process_xml(i, scope, dir, loader); } // -------------------------------------------------------------------- } libzeep-5.1.7/lib-http/src/template-processor.cpp0000664000175000017500000002262414176701531021701 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include namespace fs = std::filesystem; namespace zeep::http { // -------------------------------------------------------------------- // file_loader::file_loader(const std::filesystem::path& docroot) : resource_loader(), m_docroot(docroot) { if (not docroot.empty() and not std::filesystem::exists(m_docroot)) throw std::runtime_error("Docroot '" + m_docroot.string() + "' does not seem to exist"); } /// return last_write_time of \a file std::filesystem::file_time_type file_loader::file_time(const std::string& file, std::error_code& ec) noexcept { fs::path p(file); if (p.has_root_path()) p = fs::relative(p, p.root_path()); return fs::last_write_time(m_docroot / p, ec); } /// return last_write_time of \a file std::istream* file_loader::load_file(const std::string& file, std::error_code& ec) noexcept { fs::path p(file); if (p.has_root_path()) p = fs::relative(p, p.root_path()); std::ifstream* result = new std::ifstream(m_docroot / p, std::ios::binary); if (not result->is_open()) { delete result; result = nullptr; ec = std::make_error_code(std::errc::no_such_file_or_directory); } return result; } // -------------------------------------------------------------------- // void basic_template_processor::handle_file(const http::request& request, const scope& scope, http::reply& reply) { using namespace boost::local_time; using namespace boost::posix_time; std::error_code ec; auto ft = file_time(scope["baseuri"].as(), ec); if (ec) { reply = http::reply::stock_reply(http::not_found); return; } auto lastWriteTime = std::chrono::duration_cast(ft - decltype(ft)::clock::time_point{}).count(); // // std::chrono::time_point tp(ft); // ptime() // std::chrono::system_clock::from_time_t() // // auto lastWriteTime = decltype(ft)::clock::to_time_t(ft); // boost::chrono::duration_cast // std::chrono::file_clock; // ptime fpt(ft); // auto lastWriteTime = to_time_t() std::string ifModifiedSince; for (const http::header& h : request.get_headers()) { if (iequals(h.name, "If-Modified-Since")) { local_date_time modifiedSince(local_sec_clock::local_time(time_zone_ptr())); local_time_input_facet *lif1(new local_time_input_facet("%a, %d %b %Y %H:%M:%S GMT")); std::stringstream ss; ss.imbue(std::locale(std::locale::classic(), lif1)); ss.str(h.value); ss >> modifiedSince; local_date_time fileDate(from_time_t(lastWriteTime), time_zone_ptr()); if (fileDate <= modifiedSince) { reply = http::reply::stock_reply(http::not_modified); return; } break; } } fs::path file = scope["baseuri"].as(); std::unique_ptr in(load_file(file.string(), ec)); if (ec) { reply = http::reply::stock_reply(http::not_found); return; } std::stringstream out; for (;;) { char buffer[1024]; auto r = in->readsome(buffer, sizeof(buffer)); if (r <= 0) break; out.write(buffer, r); } std::string mimetype = "text/plain"; if (file.extension() == ".css") mimetype = "text/css"; else if (file.extension() == ".js") mimetype = "text/javascript"; else if (file.extension() == ".png") mimetype = "image/png"; else if (file.extension() == ".svg") mimetype = "image/svg+xml"; else if (file.extension() == ".html" or file.extension() == ".htm") mimetype = "text/html"; else if (file.extension() == ".xml" or file.extension() == ".xsl" or file.extension() == ".xslt") mimetype = "text/xml"; else if (file.extension() == ".xhtml") mimetype = "application/xhtml+xml"; else if (file.extension() == ".ico") mimetype = "image/x-icon"; reply.set_content(out.str(), mimetype); local_date_time t(local_sec_clock::local_time(time_zone_ptr())); local_time_facet *lf(new local_time_facet("%a, %d %b %Y %H:%M:%S GMT")); std::stringstream s; s.imbue(std::locale(std::cout.getloc(), lf)); ptime pt = from_time_t(lastWriteTime); local_date_time t2(pt, time_zone_ptr()); s << t2; reply.set_header("Last-Modified", s.str()); } void basic_template_processor::set_docroot(const fs::path& path) { m_docroot = path; } std::tuple basic_template_processor::is_template_file(const std::string& file) { bool found = false; fs::path template_file; for (const char* ext: { "", ".xhtml", ".html", ".xml" }) { std::error_code ec; template_file = file + ext; (void)file_time(template_file.string(), ec); if (ec) continue; found = true; break; } return { found, template_file }; } void basic_template_processor::load_template(const std::string& file, xml::document& doc) { std::string templateSelector; json::element spec; std::unique_ptr data; std::error_code ec; bool regularTemplate; fs::path templateFile; std::tie(regularTemplate, templateFile) = is_template_file(file); if (regularTemplate) data.reset(load_file(templateFile.string(), ec)); else { auto espec = evaluate_el_link({}, file); if (espec.is_object()) // reset the content, saves having to add another method { std::tie(regularTemplate, templateFile) = is_template_file(espec["template"].as()); if (regularTemplate) data.reset(load_file(templateFile.string(), ec)); templateSelector = espec["selector"]["xpath"].as(); } } if (not data) { #if defined(_MSC_VER) char msg[1024] = ""; DWORD dw = ::GetLastError(); if (dw != NO_ERROR) { char *lpMsgBuf = nullptr; int m = ::FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf, 0, NULL); if (lpMsgBuf != nullptr) { // strip off the trailing whitespace characters while (m > 0 and isspace(lpMsgBuf[m - 1])) --m; lpMsgBuf[m] = 0; strncpy(msg, lpMsgBuf, sizeof(msg)); ::LocalFree(lpMsgBuf); } } throw exception("error opening: " + (m_docroot / file).string() + " (" + msg + ")"); #else throw exception("error opening: " + (m_docroot / file).string() + " (" + strerror(errno) + ")"); #endif } doc.set_preserve_cdata(true); try { *data >> doc; } catch (const std::exception& ex) { std::cerr << "Error parsing template: " << ex.what() << std::endl; throw; } if (not templateSelector.empty()) { // tricky? Find first matching fragment and make it the root node of the document xml::context ctx; // this is problematic, take the first processor namespace for now. // TODO fix this std::string ns; for (auto& tp: m_tag_processor_creators) { std::unique_ptr ptp(tp.second(tp.first)); if (dynamic_cast(ptp.get()) == nullptr) continue; ns = tp.first; ctx.set("ns", ns); break; } xml::xpath xp(templateSelector); std::vector> result; for (auto n: xp.evaluate(doc, ctx)) { auto e = dynamic_cast(n); if (e == nullptr) continue; xml::document dest; auto& attr = e->attributes(); if (spec["selector"]["by-id"]) attr.erase("id"); attr.erase(e->prefix_tag("ref", ns)); attr.erase(e->prefix_tag("fragment", ns)); auto parent = e->parent(); dest.push_back(std::move(*e)); xml::fix_namespaces(dest.front(), *parent, dest.front()); doc.swap(dest); break; } } } void basic_template_processor::create_reply_from_template(const std::string& file, const scope& scope, http::reply& reply) { xml::document doc; doc.set_preserve_cdata(true); load_template(file, doc); process_tags(doc.child(), scope); reply.set_content(doc); } void basic_template_processor::init_scope(scope& scope) { } void basic_template_processor::process_tags(xml::node* node, const scope& scope) { // only process elements if (dynamic_cast(node) == nullptr) return; std::set registeredNamespaces; for (auto& tpc: m_tag_processor_creators) registeredNamespaces.insert(tpc.first); if (not registeredNamespaces.empty()) process_tags(static_cast(node), scope, registeredNamespaces); // decorate all forms with a hidden input with name _csrf auto csrf = scope.get_csrf_token(); if (not csrf.empty()) { auto forms = xml::xpath(R"(//form[not(input[@name='_csrf'])])"); xml::context ctx; for (auto& form: forms.evaluate(*node, ctx)) form->emplace_back(xml::element("input", { { "name", "_csrf" }, { "value", csrf }, { "type", "hidden" } })); } } void basic_template_processor::process_tags(xml::element* node, const scope& scope, std::set registeredNamespaces) { std::set nss; for (auto& ns: node->attributes()) { if (not ns.is_namespace()) continue; if (registeredNamespaces.count(ns.value())) nss.insert(ns.value()); } for (auto& ns: nss) { std::unique_ptr processor(create_tag_processor(ns)); processor->process_xml(node, scope, "", *this); registeredNamespaces.erase(ns); } if (not registeredNamespaces.empty()) { for (auto& e: *node) process_tags(&e, scope, registeredNamespaces); } } } // namespace http::zeep libzeep-5.1.7/lib-http/src/uri.cpp0000664000175000017500000001473614176701531016655 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, 2021 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include namespace zeep::http { // ah, the beauty of regular expressions! #define GEN_DELIMS R"([][]:/?#@])" #define SUB_DELIMS R"([!$&'()*+,;=])" #define RESERVED GEN_DELIMS | SUB_DELIMS #define UNRESERVED R"([-._~A-Za-z0-9])" #define SCHEME R"([a-zA-Z][-+.a-zA-Z0-9]*)" #define PCT_ENCODED "%[[:xdigit:]]{2}" #define USERINFO "(?:" UNRESERVED "|" PCT_ENCODED "|" SUB_DELIMS "|" ":" ")*" #define REG_NAME "(?:" UNRESERVED "|" PCT_ENCODED "|" SUB_DELIMS ")*" #define PORT "[[:digit:]]*" #define DEC_OCTET "(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])" #define IPv4_ADDRESS DEC_OCTET R"(\.)" DEC_OCTET R"(\.)" DEC_OCTET R"(\.)" DEC_OCTET #define h16 "[[:xdigit:]]{1,4}" #define ls32 "(?:" h16 ":" h16 ")|" IPv4_ADDRESS #define IPv6_ADDRESS "(?:" \ "(?:" h16 ":){6}" ls32 "|" \ "::" "(?:" h16 ":){5}" ls32 "|" \ "(?:" h16 ")?" "::" "(?:" h16 ":){4}" ls32 "|" \ "(?:(?:" h16 ":){1}" h16 ")?" "::" "(?:" h16 ":){3}" ls32 "|" \ "(?:(?:" h16 ":){2}" h16 ")?" "::" "(?:" h16 ":){2}" ls32 "|" \ "(?:(?:" h16 ":){3}" h16 ")?" "::" "(?:" h16 ":){1}" ls32 "|" \ "(?:(?:" h16 ":){4}" h16 ")?" "::" ls32 "|" \ "(?:(?:" h16 ":){5}" h16 ")?" "::" h16 "|" \ "(?:(?:" h16 ":){6}" h16 ")?" "::" "|" \ ")" #define IPvFUTURE R"(v[[:xdigit:]]\.(?:)" UNRESERVED "|" SUB_DELIMS "|" ":" ")+" #define IP_LITERAL R"(\[(?:)" IPv6_ADDRESS "|" IPvFUTURE R"()\])" #define HOST IP_LITERAL "|" IPv4_ADDRESS "|" REG_NAME #define AUTHORITY "(" USERINFO "\\@" ")?(" HOST ")(:" PORT ")?" #define PCHAR UNRESERVED "|" PCT_ENCODED "|" SUB_DELIMS "|" ":" "|" "@" #define SEGMENT "(?:" PCHAR ")*" #define SEGMENT_NZ "(?:" PCHAR "){1,}" #define SEGMENT_NZ_NC "(?:" UNRESERVED "|" PCT_ENCODED "|" SUB_DELIMS "){1,}" #define PATH_ABEMPTY "(?:" "/" "(" SEGMENT "(?:/" SEGMENT ")*" "))?" #define PATH_ABSOLUTE "/" "(?:" SEGMENT_NZ "(?:" "/" SEGMENT ")*" ")?" #define PATH_ROOTLESS SEGMENT_NZ "(?:" "/" SEGMENT ")*" #define PATH_EMPTY "" #define HIER_PART "//" AUTHORITY PATH_ABEMPTY "|" \ "(" PATH_ABSOLUTE ")|" \ "(" PATH_ROOTLESS ")|" \ PATH_EMPTY #define QUERY "(?:\\?|/|" PCHAR ")*" #define FRAGMENT "(?:\\?|/|" PCHAR ")*" #define URI "^(?:(" SCHEME "):)?(?:" HIER_PART ")(?:\\?(" QUERY "))?(?:#(" FRAGMENT "))?$" // -------------------------------------------------------------------- const std::regex kURIRx(URI); // -------------------------------------------------------------------- /// \brief Is \a url a valid url? bool is_valid_uri(const std::string& url) { return std::regex_match(url, kURIRx); } // -------------------------------------------------------------------- struct uri_impl { uri_impl(const std::string& uri) : m_s(uri) {} std::string m_s; std::string m_scheme; std::string m_host; std::filesystem::path m_path; std::string m_query; std::string m_fragment; bool m_absolutePath = false; }; // -------------------------------------------------------------------- uri::uri(const std::string &url) : m_impl(new uri_impl{url}) { const std::regex rx(URI); std::smatch m; if (std::regex_match(url, m, rx)) { m_impl->m_scheme = m[1]; m_impl->m_host = m[3]; if (not m_impl->m_host.empty() and m_impl->m_host.front() == '[' and m_impl->m_host.back() == ']') m_impl->m_host = m_impl->m_host.substr(1, m_impl->m_host.length() - 2); if (m[5].matched) m_impl->m_path = m[5].str(); else if (m[6].matched) m_impl->m_path = m[6].str(); else if (m[7].matched) m_impl->m_path = m[7].str(); m_impl->m_query = m[8]; m_impl->m_fragment = m[9]; m_impl->m_absolutePath = m_impl->m_host.empty() and m[6].matched; } else throw uri_parse_error(url); } uri::uri(const uri &u) : uri(u.string()) { } uri& uri::operator=(const uri &u) { if (&u != this) { uri tmp(u); swap(tmp); } return *this; } uri::~uri() { delete m_impl; } bool uri::empty() const { return m_impl->m_s.empty(); } bool uri::is_absolute() const { return m_impl->m_absolutePath; } void uri::swap(uri &u) noexcept { std::swap(m_impl, u.m_impl); } std::string uri::string() const { return m_impl->m_s; } std::string uri::get_scheme() const { return m_impl->m_scheme; } std::string uri::get_host() const { return m_impl->m_host; } std::filesystem::path uri::get_path() const { std::filesystem::path result; for (auto p: m_impl->m_path) result /= decode_url(p.string()); return result; } std::string uri::get_query() const { return m_impl->m_query; } std::string uri::get_fragment() const { return m_impl->m_fragment; } // -------------------------------------------------------------------- std::ostream &operator<<(std::ostream &os, const uri &url) { os << url.string(); return os; } // -------------------------------------------------------------------- // decode_url function std::string decode_url(std::string_view s) { std::string result; for (auto c = s.begin(); c != s.end(); ++c) { if (*c == '%') { if (s.end() - c >= 3) { int value; std::string s2(c + 1, c + 3); std::istringstream is(s2); if (is >> std::hex >> value) { result += static_cast(value); c += 2; } } } else if (*c == '+') result += ' '; else result += *c; } return result; } // -------------------------------------------------------------------- // encode_url function const unsigned char kURLAcceptable[96] = {/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ 0,0,0,0,0,0,0,0,0,0,7,6,0,7,7,4, /* 2x !"#$%&'()*+,-./ */ 7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0, /* 3x 0123456789:;<=>? */ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, /* 4x @ABCDEFGHIJKLMNO */ 7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,7, /* 5X PQRSTUVWXYZ[\]^_ */ 0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, /* 6x `abcdefghijklmno */ 7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0 /* 7X pqrstuvwxyz{\}~ DEL */ }; std::string encode_url(std::string_view s) { const char kHex[] = "0123456789abcdef"; std::string result; for (auto c = s.begin(); c != s.end(); ++c) { unsigned char a = (unsigned char)*c; if (not (a >= 32 and a < 128 and (kURLAcceptable[a - 32] & 4))) { result += '%'; result += kHex[a >> 4]; result += kHex[a & 15]; } else result += *c; } return result; } } // namespace zeep::http libzeep-5.1.7/lib-http/test/0000775000175000017500000000000014176701531015527 5ustar maartenmaartenlibzeep-5.1.7/lib-http/test/client-test-code.cpp0000664000175000017500000000310214176701531021372 0ustar maartenmaarten#include #include #include #include #include "client-test-code.hpp" namespace zh = zeep::http; zh::reply simple_request(uint16_t port, const std::string& req) { using boost::asio::ip::tcp; #if BOOST_VERSION > 107000 boost::asio::io_context io_context; tcp::resolver resolver(io_context); tcp::resolver::results_type endpoints = resolver.resolve("localhost", std::to_string(port)); tcp::socket socket(io_context); boost::asio::connect(socket, endpoints); #else boost::asio::io_context io_context; tcp::resolver resolver(io_context); auto endpoint_iterator = resolver.resolve({ "localhost", std::to_string(port) }); tcp::socket socket(io_context); boost::asio::connect(socket, endpoint_iterator); #endif boost::system::error_code ignored_error; boost::asio::write(socket, boost::asio::buffer(req), ignored_error); zh::reply result; zh::reply_parser p; for (;;) { boost::array buf; boost::system::error_code error; size_t len = socket.read_some(boost::asio::buffer(buf), error); if (error == boost::asio::error::eof) break; // Connection closed cleanly by peer. else if (error) throw boost::system::system_error(error); // Some other error. zeep::char_streambuf sb(buf.data(), len); auto r = p.parse(sb); if (r == true) { result = p.get_reply(); break; } } return result; } zh::reply simple_request(uint16_t port, const zeep::http::request& req) { std::ostringstream os; os << req; return simple_request(port, os.str()); }libzeep-5.1.7/lib-http/test/client-test-code.hpp0000664000175000017500000000023214176701531021400 0ustar maartenmaartenzeep::http::reply simple_request(uint16_t port, const std::string& req); zeep::http::reply simple_request(uint16_t port, const zeep::http::request& req); libzeep-5.1.7/lib-http/test/crypto-test.cpp0000664000175000017500000001120114176701531020523 0ustar maartenmaarten#define BOOST_TEST_MODULE Crypto_Test #include #include #include #include namespace z = zeep; BOOST_AUTO_TEST_CASE(http_base64_1) { using namespace std::literals; auto in = R"(Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.)"s; auto out = R"(TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4= )"s; auto test = zeep::encode_base64(in, 76); BOOST_CHECK_EQUAL(test, out); auto s = zeep::decode_base64(test); BOOST_CHECK(s == in); } BOOST_AUTO_TEST_CASE(http_base32_1) { using namespace std::literals; auto in = R"(Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.)"s; auto out = R"(JVQW4IDJOMQGI2LTORUW4Z3VNFZWQZLEFQQG433UEBXW43DZEBRHSIDINFZSA4TFMFZW63RMEBRH K5BAMJ4SA5DINFZSA43JNZTXK3DBOIQHAYLTONUW63RAMZZG63JAN52GQZLSEBQW42LNMFWHGLBA O5UGSY3IEBUXGIDBEBWHK43UEBXWMIDUNBSSA3LJNZSCYIDUNBQXIIDCPEQGCIDQMVZHGZLWMVZG C3TDMUQG6ZRAMRSWY2LHNB2CA2LOEB2GQZJAMNXW45DJNZ2WKZBAMFXGIIDJNZSGKZTBORUWOYLC NRSSAZ3FNZSXEYLUNFXW4IDPMYQGW3TPO5WGKZDHMUWCAZLYMNSWKZDTEB2GQZJAONUG64TUEB3G K2DFNVSW4Y3FEBXWMIDBNZ4SAY3BOJXGC3BAOBWGKYLTOVZGKLQ= )"s; auto test = zeep::encode_base32(in, 76); BOOST_CHECK_EQUAL(test, out); auto s = zeep::decode_base32(test); BOOST_CHECK(s == in); } BOOST_AUTO_TEST_CASE(http_base64_2) { using namespace std::literals; const std::string tests[] = { "1", "12", "123", "1234", { '\0' }, { '\0', '\001' }, { '\0', '\001', '\002' } }; for (const auto& test: tests) { auto enc = zeep::encode_base64(test, 76); auto dec = zeep::decode_base64(enc); BOOST_CHECK(dec == test); } } BOOST_AUTO_TEST_CASE(crypto_md5_1) { auto h = z::encode_hex(z::md5("1234")); BOOST_CHECK_EQUAL(h, "81dc9bdb52d04dc20036dbd8313ed055"); } BOOST_AUTO_TEST_CASE(crypto_sha1_1) { auto h = z::encode_hex(z::sha1("The quick brown fox jumps over the lazy dog")); BOOST_CHECK_EQUAL(h, "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"); } BOOST_AUTO_TEST_CASE(crypto_sha256_1) { auto h = z::encode_hex(z::sha256("")); BOOST_CHECK_EQUAL(h, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); h = z::encode_hex(z::sha256("1")); BOOST_CHECK_EQUAL(h, "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"); h = z::encode_hex(z::sha256("The SHA (Secure Hash Algorithm) is one of a number of cryptographic hash functions. A cryptographic hash is like a signature for a data set. If you would like to compare two sets of raw data (source of the file, text or similar) it is always better to hash it and compare SHA256 values. It is like the fingerprints of the data. Even if only one symbol is changed the algorithm will produce different hash value. SHA256 algorithm generates an almost-unique, fixed size 256-bit (32-byte) hash. Hash is so called a one way function. This makes it suitable for checking integrity of your data, challenge hash authentication, anti-tamper, digital signatures, blockchain.")); BOOST_CHECK_EQUAL(h, "ae8bd70b42c2877e6800f3da2800044c8694f201242a484d38bb7941645e8876"); } BOOST_AUTO_TEST_CASE(crypto_hmac_1) { auto h = z::encode_hex(z::hmac_sha256("The quick brown fox jumps over the lazy dog", "key")); BOOST_CHECK_EQUAL(h, "f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8"); h = z::encode_hex(z::hmac_md5("The quick brown fox jumps over the lazy dog", "key")); BOOST_CHECK_EQUAL(h, "80070713463e7749b90c2dc24911e275"); } BOOST_AUTO_TEST_CASE(crypto_pbkdf2) { auto h = z::encode_hex(z::pbkdf2_hmac_sha256("1234", "key", 10, 16)); BOOST_CHECK_EQUAL(h, "458d81e7a1defc5d0b61708a7dc06233"); } BOOST_AUTO_TEST_CASE(streambuf_1) { const char s[] = "Hello, world!"; auto sb = zeep::char_streambuf(s); std::istream is(&sb); auto len = is.seekg(0, std::ios_base::end).tellg(); BOOST_CHECK_EQUAL(len, strlen(s)); is.seekg(0); std::vector b(len); is.read(b.data(), len); BOOST_CHECK_EQUAL(is.tellg(), len); BOOST_CHECK_EQUAL(std::string(b.begin(), b.end()), s); }libzeep-5.1.7/lib-http/test/fragment-file.xhtml0000664000175000017500000000037514176701531021332 0ustar maartenmaarten
fragment-1
fragment-2
libzeep-5.1.7/lib-http/test/http-test.cpp0000664000175000017500000001752414176701531020200 0ustar maartenmaarten#include #define BOOST_TEST_MODULE HTTP_Test #include #include #include #include #include #include #include #include #include #include #include #include #include "client-test-code.hpp" #include "../src/signals.hpp" namespace z = zeep; namespace zx = zeep::xml; namespace zh = zeep::http; BOOST_AUTO_TEST_CASE(http_base64_1) { using namespace std::literals; auto in = R"(Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.)"s; auto out = R"(TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4= )"s; auto test = zeep::encode_base64(in, 76); BOOST_TEST(test == out); auto s = zeep::decode_base64(test); BOOST_TEST(s == in); } BOOST_AUTO_TEST_CASE(http_base64_2) { using namespace std::literals; const std::string tests[] = { "1", "12", "123", "1234", { '\0' }, { '\0', '\001' }, { '\0', '\001', '\002' } }; for (const auto& test: tests) { auto enc = zeep::encode_base64(test, 76); auto dec = zeep::decode_base64(enc); BOOST_TEST(dec == test); } } BOOST_AUTO_TEST_CASE(connection_read) { #pragma message("write test for avail/used") } BOOST_AUTO_TEST_CASE(request_params_1) { zh::request req{ "GET", "http://www.example.com/index?a=A;b=B&c=C%24"}; BOOST_CHECK_EQUAL(req.get_parameter("a"), "A"); BOOST_CHECK_EQUAL(req.get_parameter("b"), "B"); BOOST_CHECK_EQUAL(req.get_parameter("c"), "C$"); } BOOST_AUTO_TEST_CASE(webapp_6) { zh::request req("GET", "/", {1, 0}, { { "Content-Type", "multipart/form-data; boundary=xYzZY" } }, "--xYzZY\r\nContent-Disposition: form-data; name=\"pdb-file\"; filename=\"1cbs.cif.gz\"\r\nContent-Encoding: gzip\r\nContent-Type: chemical/x-cif\r\n\r\nhello, world!\n\r\n--xYzZY\r\nContent-Disposition: form-data; name=\"mtz-file\"; filename=\"1cbs_map.mtz\"\r\nContent-Type: text/plain\r\n\r\nAnd again, hello!\n\r\n--xYzZY--\r\n"); auto fp1 = req.get_file_parameter("pdb-file"); BOOST_CHECK_EQUAL(fp1.filename, "1cbs.cif.gz"); BOOST_CHECK_EQUAL(fp1.mimetype, "chemical/x-cif"); BOOST_CHECK_EQUAL(std::string(fp1.data, fp1.data + fp1.length), "hello, world!\n"); auto fp2 = req.get_file_parameter("mtz-file"); BOOST_CHECK_EQUAL(fp2.filename, "1cbs_map.mtz"); BOOST_CHECK_EQUAL(fp2.mimetype, "text/plain"); BOOST_CHECK_EQUAL(std::string(fp2.data, fp2.data + fp2.length), "And again, hello!\n"); } // a very simple controller, serving only /test/one and /test/three class my_controller : public zeep::http::controller { public: my_controller() : zeep::http::controller("/test") {} virtual bool handle_request(zeep::http::request& req, zeep::http::reply& rep) { bool result = false; if (req.get_uri() == "/test/one" or req.get_uri() == "/test/three") { rep = zeep::http::reply::stock_reply(zeep::http::ok); result = true; } return result; } }; BOOST_AUTO_TEST_CASE(webapp_7) { // start up a http server and stop it again zh::daemon d([]() { auto s = new zh::server; s->add_controller(new my_controller()); return s; }, "zeep-http-test"); std::random_device rng; uint16_t port = 1024 + (rng() % 10240); std::thread t(std::bind(&zh::daemon::run_foreground, d, "::", port)); std::cerr << "started daemon at port " << port << std::endl; using namespace std::chrono_literals; std::this_thread::sleep_for(1s); try { auto reply = simple_request(port, "GET / HTTP/1.0\r\n\r\n"); BOOST_TEST(reply.get_status() == zh::not_found); reply = simple_request(port, "XXX / HTTP/1.0\r\n\r\n"); BOOST_TEST(reply.get_status() == zh::bad_request); reply = simple_request(port, "GET /test/one HTTP/1.0\r\n\r\n"); BOOST_TEST(reply.get_status() == zh::ok); reply = simple_request(port, "GET /test/two HTTP/1.0\r\n\r\n"); BOOST_TEST(reply.get_status() == zh::not_found); } catch (const std::exception& e) { std::cerr << e.what() << std::endl; } zeep::signal_catcher::signal_hangup(t); t.join(); } // authentication test BOOST_AUTO_TEST_CASE(server_with_security_1) { class my_user_service : public zeep::http::user_service { virtual zeep::http::user_details load_user(const std::string& username) const { if (username != "scott") throw zeep::http::user_unknown_exception(); return { username, m_pwenc.encode("tiger"), { "admin" } }; } zeep::http::pbkdf2_sha256_password_encoder m_pwenc; } users; std::string secret = "geheim"; zh::daemon d([&]() { auto s = new zh::server(new zeep::http::security_context(secret, users, new zeep::http::pbkdf2_sha256_password_encoder())); s->add_controller(new my_controller()); s->add_controller(new zeep::http::login_controller()); auto& sec = s->get_security_context(); sec.add_rule("/test/three", "admin"); sec.add_rule("/**", {}); return s; }, "zeep-http-test"); std::random_device rng; uint16_t port = 1024 + (rng() % 10240); std::thread t(std::bind(&zh::daemon::run_foreground, d, "::", port)); std::cerr << "started daemon at port " << port << std::endl; using namespace std::chrono_literals; std::this_thread::sleep_for(1s); try { auto reply = simple_request(port, "XXX / HTTP/1.0\r\n\r\n"); BOOST_TEST(reply.get_status() == zh::bad_request); reply = simple_request(port, "GET /test/one HTTP/1.0\r\n\r\n"); BOOST_TEST(reply.get_status() == zh::ok); reply = simple_request(port, "GET /test/two HTTP/1.0\r\n\r\n"); BOOST_TEST(reply.get_status() == zh::not_found); reply = simple_request(port, "GET /test/three HTTP/1.0\r\n\r\n"); BOOST_TEST(reply.get_status() == zh::unauthorized); // now try to log in and see if we can access all of the above // we use a request object now, to store cookies zeep::http::request req{ "POST", "/login", {1, 0}, { { "Content-Type", "application/x-www-form-urlencoded" } }, "username=scott&password=tiger" }; // first test is to send a POST to login, but without the csrf token reply = simple_request(port, req); BOOST_TEST(reply.get_status() == zh::forbidden); // OK, fetch the login form then and pry the csrf token out of it req.set_method("GET"); reply = simple_request(port, req); BOOST_TEST(reply.get_status() == zh::ok); // copy the cookie auto csrfCookie = reply.get_cookie("csrf-token"); req.set_cookie("csrf-token", csrfCookie); zeep::xml::document form(reply.get_content()); auto csrf = form.find_first("//input[@name='_csrf']"); BOOST_REQUIRE(csrf != nullptr); BOOST_TEST(form.find_first("//input[@name='username']") != nullptr); BOOST_TEST(form.find_first("//input[@name='password']") != nullptr); BOOST_TEST(csrf->get_attribute("value") == csrfCookie); // try again to authenticate req.set_method("POST"); req.set_content("username=scott&password=tiger&_csrf=" + csrfCookie, "application/x-www-form-urlencoded"); reply = simple_request(port, req); BOOST_TEST(reply.get_status() == zh::moved_temporarily); auto accessToken = reply.get_cookie("access_token"); req.set_cookie("access_token", accessToken); // now try that admin page again req.set_uri("/test/three"); req.set_method("GET"); reply = simple_request(port, req); BOOST_TEST(reply.get_status() == zh::ok); } catch (const std::exception& e) { std::cerr << e.what() << std::endl; } zeep::signal_catcher::signal_hangup(t); t.join(); } libzeep-5.1.7/lib-http/test/processor-test.cpp0000664000175000017500000005635114176701531021241 0ustar maartenmaarten#include #define BOOST_TEST_MODULE Processor_Test #include #include #include #include #include using namespace std; #ifndef DOCROOT #define DOCROOT "./lib-http/test/" #endif using json = zeep::json::element; using namespace zeep::xml::literals; void process_and_compare(zeep::xml::document& a, zeep::xml::document& b, const zeep::http::scope& scope = {}) { zeep::http::template_processor p(DOCROOT); zeep::http::tag_processor_v2 tp; tp.process_xml(a.child(), scope, "", p); BOOST_TEST(a == b); if (a != b) { cerr << string(80, '-') << endl << a << endl << string(80, '-') << endl << b << endl << string(80, '-') << endl; } } BOOST_AUTO_TEST_CASE(test_0) { std::string s = "application/pdf"; BOOST_TEST(not zeep::http::process_el({}, s)); BOOST_TEST(s == "application/pdf"); } BOOST_AUTO_TEST_CASE(test_1) { auto doc = R"(
)"_xml; auto doc_test = R"(
)"_xml; process_and_compare(doc, doc_test); } BOOST_AUTO_TEST_CASE(test_2) { auto doc = R"( )"_xml; auto doc_test = R"( )"_xml; zeep::http::scope scope; scope.put("b", zeep::json::element{ "a", "b", "c"}); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_3) { auto doc = R"( )"_xml; auto doc_test = R"( <hallo, wereld!> )"_xml; zeep::http::scope scope; scope.put("x", ""); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_3a) { auto doc = R"( )"_xml; auto doc_test = R"( hallo, wereld! )"_xml; zeep::http::scope scope; scope.put("x", "hallo, wereld!"); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_4) { auto doc = R"( [[${x}]] )"_xml; auto doc_test = R"( hallo, wereld! )"_xml; zeep::http::scope scope; scope.put("x", "hallo, wereld!"); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_5) { auto doc = R"( [(${x})] )"_xml; auto doc_test = R"( hallo, wereld! )"_xml; zeep::http::scope scope; scope.put("x", "hallo, wereld!"); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_6) { auto doc = R"( )"_xml; auto doc_test = R"( )"_xml; zeep::http::scope scope; scope.put("x", "\"'hallo, wereld!'\""); scope.put("y", "Een \"moeilijke\" string"); scope.put("a", zeep::json::element{ "a", "b", "c"}); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_8) { auto doc = R"( )"_xml; auto doc_test = R"( abc )"_xml; zeep::http::scope scope; scope.put("a", zeep::json::element{ "a", "b", "c"}); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_8a) { auto doc = R"( )"_xml; auto doc_test = R"( abc )"_xml; zeep::http::scope scope; scope.put("a", zeep::json::element{ "a", "b", "c"}); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_9) { auto doc = R"( )"_xml; auto doc_test = R"( {"count":1,"current":"a","even":false,"first":true,"index":0,"last":false,"odd":true,"size":3}{"count":2,"current":"b","even":true,"first":false,"index":1,"last":false,"odd":false,"size":3}{"count":3,"current":"c","even":false,"first":false,"index":2,"last":true,"odd":true,"size":3} )"_xml; zeep::http::scope scope; scope.put("a", zeep::json::element{ "a", "b", "c"}); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_10) { auto doc = R"( )"_xml; auto doc_test = R"( )"_xml; zeep::http::scope scope; scope.put("id", "my-id-101"); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_11) { auto doc = R"( )"_xml; auto doc_test = R"( )"_xml; zeep::http::scope scope; scope.put("id", "my-id-101"); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_12) { auto doc = R"( )"_xml; auto doc_test = R"( )"_xml; zeep::http::scope scope; scope.put("ok", true); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_13) { auto doc = R"( )"_xml; auto doc_test = R"( s )"_xml; zeep::http::scope scope; scope.put("ok", true); scope.put("s", "s"); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_14) { try { std::locale l("nl_NL.UTF-8"); auto doc = R"( )"_xml; auto doc_test = R"( 7 augustus 2019, 12:14 )"_xml; zeep::http::template_processor p(DOCROOT); zeep::http::tag_processor_v2 tp; zeep::http::request req("GET", "/", { 1, 0 }, { { "Accept-Language", "nl, en-US;q=0.7, en;q=0.3" }}, ""); zeep::http::scope scope(req); scope.put("ok", true); process_and_compare(doc, doc_test, scope); } catch (const std::runtime_error&) { std::cerr << "skipping test 14 since locale nl_NL.UTF-8 is not available" << std::endl; } } BOOST_AUTO_TEST_CASE(test_15) { #if not __APPLE__ try { std::locale l("da_DK.UTF-8"); auto doc = R"( )"_xml; auto doc_test = R"( 7 august 2019, 12:14 )"_xml; zeep::http::template_processor p(DOCROOT); zeep::http::tag_processor_v2 tp; zeep::http::request req("GET", "/", { 1, 0 }, { { "Accept-Language", "da, en-US;q=0.7, en;q=0.3" }}, ""); zeep::http::scope scope(req); scope.put("ok", true); process_and_compare(doc, doc_test, scope); } catch (const std::runtime_error&) { std::cerr << "skipping test 15 since locale da_DK.UTF-8 is not available" << std::endl; } #endif } BOOST_AUTO_TEST_CASE(test_16) { try { std::locale l("en_GB.UTF-8"); auto doc = R"( )"_xml; auto doc_test = R"( 12,345.68 12.06 K )"_xml; zeep::http::request req("GET", "/", { 1, 0 }, { { "Accept-Language", "en-GB, en-US;q=0.7, en;q=0.3" }}, ""); zeep::http::scope scope(req); scope.put("ok", true); process_and_compare(doc, doc_test, scope); } catch (const std::runtime_error&) { std::cerr << "skipping test 16 since locale en_GB.UTF-8 is not available" << std::endl; } } // BOOST_AUTO_TEST_CASE(test_17) // { // try // { // std::locale l("fr_FR.UTF-8"); // auto doc = R"( // // // // )"_xml; // auto doc_test = R"( // // 12 345,68 // // )"_xml; // zeep::http::request req; // req.headers.push_back({ "Accept-Language", "fr_FR, en-US;q=0.7, en;q=0.3" }); // zeep::http::scope scope(req); // scope.put("ok", true); // process_and_compare(doc, doc_test, scope); // } // catch (const std::runtime_error& e) // { // std::cerr << "skipping test 17 since locale fr_FR.UTF-8 is not available" << std::endl; // } // } BOOST_AUTO_TEST_CASE(test_18) { auto doc = R"( )"_xml; auto doc_test = R"( x )"_xml; zeep::http::scope scope; json p; p["n"] = "x"; scope.put("p", p); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_19) { auto doc = R"( )"_xml; auto doc_test = R"( )"_xml; zeep::http::scope scope; scope.put("b", true); scope.put("c", false); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_20) { auto doc = R"(
1
2
3
*
1
2
3
*
1
2
2
3
*
)"_xml; auto doc_test = R"(
2
2
2
)"_xml; zeep::http::scope scope; scope.put("a", 2); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_21) { auto doc = R"( )"_xml; auto doc_test = R"( a-b )"_xml; zeep::http::scope scope; scope.put("a", "a"); scope.put("b", "b"); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_22) { auto doc = R"(
hello world
)"_xml; auto doc_test = R"(
hello world
hello world
hello world
hello world
hello world
hello world
hello world
fragment-1
fragment-1
fragment-1
fragment-2
fragment-2
fragment-2
)"_xml; zeep::http::scope scope; scope.put("b", "b"); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_22a) { zeep::http::template_processor p(DOCROOT); zeep::xml::document doc1; p.load_template("fragment-file :: frag1", doc1); auto doct = R"(
fragment-1
)"_xml; BOOST_TEST(doc1 == doct); if (doc1 != doct) { std::cerr << doc1 << std::endl << doct << std::endl; } } BOOST_AUTO_TEST_CASE(test_23) { auto doc = R"( )"_xml; auto doc_test = R"( link link?b=b link/b link?b=b&test=test%26 link/bb link?c=bla%20met%20%3c%20en%20%3d )"_xml; zeep::http::scope scope; scope.put("b", "b"); scope.put("c", "bla met < en ="); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_24) { auto doc = R"( )"_xml; auto doc_test = R"( een twee drie een b en bla met < en = een twee b;:;bla met < en = )"_xml; zeep::http::scope scope; scope.put("b", "b"); scope.put("c", "bla met < en ="); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_25) { auto doc = R"( )"_xml; auto doc_test = R"( aap noot mies )"_xml; process_and_compare(doc, doc_test); } BOOST_AUTO_TEST_CASE(test_26) { auto doc = R"( )"_xml; auto doc_test = R"( )"_xml; process_and_compare(doc, doc_test); } BOOST_AUTO_TEST_CASE(test_27) { auto doc = R"( )"_xml; auto doc_test = R"( Error processing element 'span': Assertion failed for '1==0' )"_xml; process_and_compare(doc, doc_test); } BOOST_AUTO_TEST_CASE(test_28) { auto doc = R"( in een blokmet een em )"_xml; auto doc_test = R"( in een blokmet een em )"_xml; process_and_compare(doc, doc_test); } BOOST_AUTO_TEST_CASE(test_29) { auto doc = R"xml( fragment ref
)xml"_xml; auto doc_test = R"( fragmentref fragmentref fragmentref fragmentref )"_xml; process_and_compare(doc, doc_test); } BOOST_AUTO_TEST_CASE(test_30) { auto doc = R"xml( ref-1
The div
)xml"_xml; auto doc_test = R"(
The div
The div
)"_xml; process_and_compare(doc, doc_test); } BOOST_AUTO_TEST_CASE(test_31) { auto doc = R"xml(
De titel is vervangen
)xml"_xml; auto doc_test = R"( )"_xml; process_and_compare(doc, doc_test); } BOOST_AUTO_TEST_CASE(test_32) { auto doc = R"xml( ref-1
)xml"_xml; auto doc_test = R"(
ref-1
)"_xml; process_and_compare(doc, doc_test); } BOOST_AUTO_TEST_CASE(test_32a) { auto doc = R"xml( frag
)xml"_xml; auto doc_test = R"( frag
frag
)"_xml; process_and_compare(doc, doc_test); } BOOST_AUTO_TEST_CASE(test_32b) { auto doc = R"xml( )xml"_xml; auto doc_test = R"( hoi )"_xml; zeep::http::scope scope; scope.put("h", "hoi"); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_32c) { auto doc = R"xml( )xml"_xml; auto doc_test = R"( hoi )"_xml; zeep::http::scope scope; scope.put("h", "hoi"); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_32d) { auto doc = R"xml( )xml"_xml; auto doc_test = R"( hoi )"_xml; zeep::http::scope scope; zeep::json::element h{ { "txt", "hoi" } }; scope.put("h", h); process_and_compare(doc, doc_test, scope); } // BOOST_AUTO_TEST_CASE(test_32d) // { // auto doc = R"xml( // // // // // )xml"_xml; // auto doc_test = R"( // // // hoi // )"_xml; // zeep::http::scope scope; // scope.put("h", "hoi"); // process_and_compare(doc, doc_test, scope); // } BOOST_AUTO_TEST_CASE(test_33) { auto doc = R"xml(
)xml"_xml; auto doc_test = R"(
)"_xml; process_and_compare(doc, doc_test); } BOOST_AUTO_TEST_CASE(test_34) { auto doc = R"xml( )xml"_xml; auto doc_test = R"( S T )"_xml; zeep::http::scope scope; json j; j.push_back(json{ { "s", "S" } }); j.push_back(json{ { "s", "T" } }); scope.put("a", j); process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_35) { auto doc = R"xml( test [(${a}.${b})] )xml"_xml; auto doc_test = R"( test Error processing ${a}.${b} )"_xml; zeep::http::scope scope; scope.put("a", "aap"); scope.put("b", "noot"); zeep::http::template_processor p(DOCROOT); zeep::http::tag_processor_v2 tp; process_and_compare(doc, doc_test, scope); } BOOST_AUTO_TEST_CASE(test_36) { auto doc = R"xml( )xml"_xml; auto doc_test = R"( )"_xml; zeep::http::scope scope; scope.put("x", 2.0); zeep::http::template_processor p(DOCROOT); zeep::http::tag_processor_v2 tp; process_and_compare(doc, doc_test, scope); } libzeep-5.1.7/lib-http/test/rest-test.cpp0000664000175000017500000001535014176701531020171 0ustar maartenmaarten#include #include #include #include #include "../src/signals.hpp" #define BOOST_TEST_MODULE REST_Test #include #include "client-test-code.hpp" using namespace std; namespace z = zeep; namespace zx = zeep::xml; namespace zh = zeep::http; struct Opname { string id; map standen; template void serialize(Archive& ar, unsigned long /*version*/) { ar & zeep::make_nvp("id", id) & zeep::make_nvp("standen", standen); } }; enum class aggregatie_type { dag, week, maand, jaar }; void to_element(zeep::json::element& e, aggregatie_type aggregatie) { switch (aggregatie) { case aggregatie_type::dag: e = "dag"; break; case aggregatie_type::week: e = "week"; break; case aggregatie_type::maand: e = "maand"; break; case aggregatie_type::jaar: e = "jaar"; break; } } void from_element(const zeep::json::element& e, aggregatie_type& aggregatie) { if (e == "dag") aggregatie = aggregatie_type::dag; else if (e == "week") aggregatie = aggregatie_type::week; else if (e == "maand") aggregatie = aggregatie_type::maand; else if (e == "jaar") aggregatie = aggregatie_type::jaar; else throw runtime_error("Ongeldige aggregatie"); } enum class grafiek_type { warmte, electriciteit, electriciteit_hoog, electriciteit_laag, electriciteit_verbruik, electriciteit_levering, electriciteit_verbruik_hoog, electriciteit_verbruik_laag, electriciteit_levering_hoog, electriciteit_levering_laag }; void to_element(zeep::json::element& e, grafiek_type type) { switch (type) { case grafiek_type::warmte: e = "warmte"; break; case grafiek_type::electriciteit: e = "electriciteit"; break; case grafiek_type::electriciteit_hoog: e = "electriciteit-hoog"; break; case grafiek_type::electriciteit_laag: e = "electriciteit-laag"; break; case grafiek_type::electriciteit_verbruik: e = "electriciteit-verbruik"; break; case grafiek_type::electriciteit_levering: e = "electriciteit-levering"; break; case grafiek_type::electriciteit_verbruik_hoog: e = "electriciteit-verbruik-hoog"; break; case grafiek_type::electriciteit_verbruik_laag: e = "electriciteit-verbruik-laag"; break; case grafiek_type::electriciteit_levering_hoog: e = "electriciteit-levering-hoog"; break; case grafiek_type::electriciteit_levering_laag: e = "electriciteit-levering-laag"; break; } } void from_element(const zeep::json::element& e, grafiek_type& type) { if (e == "warmte") type = grafiek_type::warmte; else if (e == "electriciteit") type = grafiek_type::electriciteit; else if (e == "electriciteit-hoog") type = grafiek_type::electriciteit_hoog; else if (e == "electriciteit-laag") type = grafiek_type::electriciteit_laag; else if (e == "electriciteit-verbruik") type = grafiek_type::electriciteit_verbruik; else if (e == "electriciteit-levering") type = grafiek_type::electriciteit_levering; else if (e == "electriciteit-verbruik-hoog") type = grafiek_type::electriciteit_verbruik_hoog; else if (e == "electriciteit-verbruik-laag") type = grafiek_type::electriciteit_verbruik_laag; else if (e == "electriciteit-levering-hoog") type = grafiek_type::electriciteit_levering_hoog; else if (e == "electriciteit-levering-laag") type = grafiek_type::electriciteit_levering_laag; else throw runtime_error("Ongeldige grafiek type"); } struct GrafiekData { string type; map punten; map vsGem; template void serialize(Archive& ar, unsigned long) { ar & zeep::make_nvp("type", type) & zeep::make_nvp("punten", punten) & zeep::make_nvp("vsgem", vsGem); } }; using Opnames = std::vector; class e_rest_controller : public zeep::http::rest_controller { public: e_rest_controller() : zeep::http::rest_controller("ajax") { map_post_request("opname", &e_rest_controller::post_opname, "opname"); map_put_request("opname/{id}", &e_rest_controller::put_opname, "id", "opname"); map_get_request("opname/{id}", &e_rest_controller::get_opname, "id"); map_get_request("opname", &e_rest_controller::get_all_opnames); map_delete_request("opname/{id}", &e_rest_controller::delete_opname, "id"); map_get_request("data/{type}/{aggr}", &e_rest_controller::get_grafiek, "type", "aggr"); map_get_request("opname", &e_rest_controller::get_opnames); map_put_request("opnames", &e_rest_controller::set_opnames, "opnames"); map_get_request("all_data", &e_rest_controller::get_all_data); } // CRUD routines string post_opname(Opname opname) { return {}; } void put_opname(string opnameId, Opname opname) { {}; } Opnames get_opnames() { return { {}, {} }; } void set_opnames(Opnames opnames) { } Opname get_opname(string id) { if (id == "xxx") throw zeep::http::not_found; return {}; } Opname get_last_opname() { return {}; } vector get_all_opnames() { return {}; } void delete_opname(string id) { } GrafiekData get_grafiek(grafiek_type type, aggregatie_type aggregatie) { return{}; } zeep::http::reply get_all_data() { return { zeep::http::ok, { 1, 0 }, { { "Content-Length", "13" }, { "Content-Type", "text/plain" } }, "Hello, world!" }; } }; BOOST_AUTO_TEST_CASE(rest_1) { // simply see if the above compiles e_rest_controller rc; zeep::http::reply rep; boost::asio::io_context io_context; boost::asio::ip::tcp::socket s(io_context); zeep::http::request req{ "GET", "/ajax/all_data" }; BOOST_CHECK(rc.dispatch_request(s, req, rep)); BOOST_CHECK(rep.get_status() == zeep::http::ok); BOOST_CHECK(rep.get_content_type() == "text/plain"); } BOOST_AUTO_TEST_CASE(rest_2) { // start up a http server and stop it again zh::daemon d([]() { auto s = new zh::server; s->add_controller(new e_rest_controller()); return s; }, "zeep-http-test"); std::random_device rng; uint16_t port = 1024 + (rng() % 10240); std::thread t(std::bind(&zh::daemon::run_foreground, d, "::", port)); std::cerr << "started daemon at port " << port << std::endl; using namespace std::chrono_literals; std::this_thread::sleep_for(1s); try { auto rep = simple_request(port, "GET /ajax/all_data HTTP/1.0\r\n\r\n"); BOOST_CHECK(rep.get_status() == zeep::http::ok); BOOST_CHECK(rep.get_content_type() == "text/plain"); auto reply = simple_request(port, "GET /ajax/xxxx HTTP/1.0\r\n\r\n"); BOOST_TEST(reply.get_status() == zh::not_found); reply = simple_request(port, "GET /ajax/opname/xxx HTTP/1.0\r\n\r\n"); BOOST_TEST(reply.get_status() == zh::not_found); BOOST_CHECK_EQUAL(reply.get_content_type(), "application/json"); } catch (const std::exception& e) { std::cerr << e.what() << std::endl; } zeep::signal_catcher::signal_hangup(t); t.join(); }libzeep-5.1.7/lib-http/test/rsrc_webapp-test.cpp0000664000175000017500000000357614176701531021532 0ustar maartenmaarten// rsrc_webapp-test #include #include #include #include #include #include #include #include #include #define BOOST_TEST_MODULE Processor_Test #include using namespace std; using json = zeep::json::element; using namespace zeep::xml::literals; BOOST_AUTO_TEST_CASE(test_22) { auto doc = R"(
hello world
)"_xml; auto doc_test = R"(
hello world
hello world
hello world
hello world
hello world
hello world
hello world
fragment-1
fragment-1
fragment-1
fragment-2
fragment-2
fragment-2
)"_xml; zeep::http::tag_processor_v2 tp; zeep::http::rsrc_based_html_template_processor p; zeep::http::scope scope; scope.put("b", "b"); tp.process_xml(doc.child(), scope, "", p); BOOST_TEST(doc == doc_test); if (doc != doc_test) { cerr << doc << endl << doc_test << endl; } }libzeep-5.1.7/lib-http/test/security-test.cpp0000664000175000017500000000270714176701531021065 0ustar maartenmaarten#include #define BOOST_TEST_MODULE Security_Test #include #include #include #include #include #include #include #include #include #include #include #include #include "client-test-code.hpp" #include "../src/signals.hpp" namespace z = zeep; namespace zx = zeep::xml; namespace zh = zeep::http; BOOST_AUTO_TEST_CASE(sec_1) { zh::reply rep; BOOST_CHECK_THROW(rep = zh::reply::redirect("http://example.com\r\nSet-Cookie: wrong=false;"), zeep::exception); BOOST_CHECK_THROW(rep = zh::reply::redirect("http://example.com%0D%0ASet-Cookie: wrong=false;"), zeep::exception); rep = zh::reply::redirect("http://example.com/%0D%0ASet-Cookie:%20wrong=false;"); BOOST_CHECK_EQUAL(rep.get_header("Location"), "http://example.com/%0D%0ASet-Cookie:%20wrong=false;"); rep = zh::reply::redirect("http://example.com"); BOOST_CHECK_EQUAL(rep.get_header("Location"), "http://example.com"); /* std::cerr << rep << std::endl; std::ostringstream os; os << rep; zh::reply_parser p; std::string s = os.str(); zeep::char_streambuf sb(s.c_str(), s.length()); p.parse(sb); auto r2 = p.get_reply(); std::cerr << r2 << std::endl; BOOST_CHECK(r2.get_cookie("wrong").empty()); */ } libzeep-5.1.7/lib-http/test/soap-test.cpp0000664000175000017500000001304214176701531020152 0ustar maartenmaarten#include #include #define BOOST_TEST_MODULE SOAP_Test #include using namespace std; namespace z = zeep; namespace zx = zeep::xml; namespace zh = zeep::http; struct TestStruct { int a; string s; template void serialize(Archive& ar, unsigned long) { ar & zx::make_element_nvp("a", a) & zx::make_element_nvp("s", s); } }; struct my_test_controller : public zh::soap_controller { my_test_controller() : zh::soap_controller("ws", "http://www.hekkelman.com/libzeep/soap") { set_service("testService"); map_action("Test", &my_test_controller::test_method_1, "x"); map_action("Test2", &my_test_controller::test_method_2, "s"); map_action("Test3", &my_test_controller::test_method_3, "t"); } int test_method_1(int x) { BOOST_TEST(x == 42); return x; } void test_method_2(const std::string& s) { BOOST_TEST(s == "42"); } TestStruct test_method_3(const TestStruct& t) { return { t.a + 1, t.s + to_string(t.a) }; } }; BOOST_AUTO_TEST_CASE(soap_1) { using namespace zx::literals; my_test_controller srv; auto payload_test_1 = R"( 42 )"; zh::request req("POST", "/ws", { 1, 0 }, {}, payload_test_1); zh::reply rep; srv.handle_request(req, rep); BOOST_TEST(rep.get_status() == 200); std::stringstream srep; srep << rep; std::string line; while (getline(srep, line)) { if (line.empty() or line == "\r") break; } zx::document repDoc(srep); auto test = R"( 42 )"_xml; BOOST_TEST(repDoc == test); } BOOST_AUTO_TEST_CASE(soap_2) { using namespace zx::literals; my_test_controller srv; auto payload_test = R"( 42 )"; zh::request req("POST", "/ws", { 1, 0 }, {}, payload_test); zh::reply rep; srv.handle_request(req, rep); BOOST_TEST(rep.get_status() == 200); std::stringstream srep; srep << rep; std::string line; while (getline(srep, line)) { if (line.empty() or line == "\r") break; } zx::document repDoc(srep); auto test = R"( )"_xml; BOOST_TEST(repDoc == test); } BOOST_AUTO_TEST_CASE(soap_3) { using namespace zx::literals; my_test_controller srv; auto payload_test = R"( 42 42 )"; zh::request req("POST", "/ws", { 1, 0 }, {}, payload_test); zh::reply rep; srv.handle_request(req, rep); BOOST_TEST(rep.get_status() == 200); std::stringstream srep; srep << rep; std::string line; while (getline(srep, line)) { if (line.empty() or line == "\r") break; } zx::document repDoc(srep); auto test = R"( 434242 )"_xml; BOOST_TEST(repDoc == test); } BOOST_AUTO_TEST_CASE(soap_3f) { using namespace zx::literals; my_test_controller srv; auto payload_test = R"( 42 42 )"; zh::request req("POST", "/ws", { 1, 0 }, {}, payload_test); zh::reply rep; srv.handle_request(req, rep); BOOST_TEST(rep.get_status() == 500); std::stringstream srep; srep << rep; std::string line; while (getline(srep, line)) { if (line.empty() or line == "\r") break; } zx::document repDoc(srep); auto test = R"( soap:Server Invalid namespace for request )"_xml; BOOST_TEST(repDoc == test); } BOOST_AUTO_TEST_CASE(soap_w1) { using namespace zx::literals; my_test_controller srv; zeep::xml::document doc; doc.emplace_back(srv.make_wsdl()); cerr << setw(2) << doc << endl; }libzeep-5.1.7/lib-http/test/uri-test.cpp0000664000175000017500000000512014176701531020005 0ustar maartenmaarten#define BOOST_TEST_MODULE URI_Test #include #include namespace z = zeep; BOOST_AUTO_TEST_CASE(uri_1) { zeep::http::is_valid_uri("http://a/"); zeep::http::is_valid_uri("http://a:80/"); zeep::http::is_valid_uri("http://a.b/"); zeep::http::is_valid_uri("http://a/b"); zeep::http::is_valid_uri("http://user@a/b"); zeep::http::is_valid_uri("http://user:pass@a/b"); zeep::http::is_valid_uri("http://user:pass@a:80/b"); zeep::http::is_valid_uri("http://a?q"); zeep::http::is_valid_uri("http://a#f"); zeep::http::is_valid_uri("http://a/b?q"); zeep::http::is_valid_uri("http://a/b#f"); zeep::http::is_valid_uri("http://a/b/c?q"); zeep::http::is_valid_uri("http://a/b/c#f"); zeep::http::is_valid_uri("http://a/b/c.d?q"); zeep::http::is_valid_uri("http://a/b/c.d#f"); zeep::http::is_valid_uri("http://user@localhost/segment/index.html#frag"); zeep::http::is_valid_uri("http://user@[::1]/segment/index.html#frag"); zeep::http::is_valid_uri("http://user:pass@[::1]/segment/index.html#frag"); zeep::http::is_valid_uri("http://user@localhost/segment/index.html?query"); zeep::http::is_valid_uri("http://user@[::1]/segment/index.html?query"); zeep::http::is_valid_uri("http://user:pass@[::1]/segment/index.html?query"); zeep::http::is_valid_uri("http://user@localhost/segment/index.html?query#frag"); zeep::http::is_valid_uri("http://user@[::1]/segment/index.html?query#frag"); zeep::http::is_valid_uri("http://user:pass@[::1]/segment/index.html?query#frag"); } BOOST_AUTO_TEST_CASE(uri_2) { zeep::http::uri url("http://user:pass@[::1]/segment/index.html?query#frag"); BOOST_CHECK_EQUAL(url.get_scheme(), "http"); BOOST_CHECK_EQUAL(url.get_host(), "::1"); BOOST_CHECK_EQUAL(url.get_path().generic_string(), "segment/index.html"); BOOST_CHECK_EQUAL(url.get_query(), "query"); BOOST_CHECK_EQUAL(url.get_fragment(), "frag"); } BOOST_AUTO_TEST_CASE(uri_3) { zeep::http::uri url("http://www.example.com/~maarten"); BOOST_CHECK_EQUAL(url.get_path().generic_string(), "~maarten"); } BOOST_AUTO_TEST_CASE(uri_4) { zeep::http::uri url("http://www.example.com/%7Emaarten"); BOOST_CHECK_EQUAL(url.get_path().generic_string(), "~maarten"); } BOOST_AUTO_TEST_CASE(uri_5) { // This is a bit dubious... but it is valid according to RFC3986 zeep::http::uri uri("http://a/b%0D%0ASet-Cookie:%20false"); BOOST_CHECK_EQUAL(uri.get_path().generic_string(), "b\r\nSet-Cookie: false"); } BOOST_AUTO_TEST_CASE(uri_6) { zeep::http::uri uri("file:/a/b"); BOOST_CHECK(uri.is_absolute()); zeep::http::uri uri2("file://a/b"); BOOST_CHECK(not uri2.is_absolute()); }libzeep-5.1.7/lib-http/test/webapp-test.cpp0000664000175000017500000002000514176701531020463 0ustar maartenmaarten#include #define BOOST_TEST_MODULE WebApp_Test #include #include #include #include #include #include #include #include #include #include "client-test-code.hpp" #include "../src/signals.hpp" using namespace std; namespace z = zeep; namespace zx = zeep::xml; using webapp = zeep::http::html_controller; void compare(zeep::xml::document& a, zeep::xml::document& b) { BOOST_CHECK_EQUAL(a, b); if (a != b) { cerr << string(80, '-') << endl << a << endl << string(80, '-') << endl << b << endl << string(80, '-') << endl; } } BOOST_AUTO_TEST_CASE(webapp_1) { class my_webapp : public webapp { public: my_webapp() { // mount("test", &my_webapp::handle_test); mount_get("test", &my_webapp::handle_get_test); mount_post("test", &my_webapp::handle_post_test); } virtual void handle_test(const zeep::http::request& request, const zeep::http::scope& scope, zeep::http::reply& reply) { reply = zeep::http::reply::stock_reply(zeep::http::ok); } virtual void handle_get_test(const zeep::http::request& request, const zeep::http::scope& scope, zeep::http::reply& reply) { reply = zeep::http::reply::stock_reply(zeep::http::ok); reply.set_content("get", "text/plain"); } virtual void handle_post_test(const zeep::http::request& request, const zeep::http::scope& scope, zeep::http::reply& reply) { reply = zeep::http::reply::stock_reply(zeep::http::ok); reply.set_content("post", "text/plain"); } } app; zeep::http::request req("GET", "/test", { 1, 0 }); zeep::http::reply rep; app.handle_request(req, rep); BOOST_CHECK_EQUAL(rep.get_status(), zeep::http::ok); BOOST_CHECK_EQUAL(rep.get_content(), "get"); req.set_method("POST"); app.handle_request(req, rep); BOOST_CHECK_EQUAL(rep.get_status(), zeep::http::ok); BOOST_CHECK_EQUAL(rep.get_content(), "post"); req.set_method("DELETE"); app.handle_request(req, rep); BOOST_CHECK_EQUAL(rep.get_status(), zeep::http::not_found); } // BOOST_AUTO_TEST_CASE(webapp_2) // { // webapp app; // app.mount("test", &zeep::http::controller::handle_file); // zeep::http::request req; // req.method = zeep::"GET"; // req.set_uri("/test"); // zeep::http::reply rep; // app.handle_request(req, rep); // BOOST_CHECK_EQUAL(rep.get_status(), zeep::http::internal_server_error); // } // BOOST_AUTO_TEST_CASE(webapp_4) // { // using namespace zeep::xml::literals; // webapp app; // zx::document doc; // app.load_template("fragment-file :: frag1", doc); // auto test1 = R"( //
fragment-1
)"_xml; // compare(doc, test1); // doc.clear(); // app.load_template("fragment-file :: #frag2", doc); // auto test2 = R"( //
fragment-2
)"_xml; // compare(doc, test2); // } // test various ways of mounting handlers BOOST_AUTO_TEST_CASE(webapp_5) { class my_webapp : public webapp { public: my_webapp() { mount("test", &my_webapp::handle_test1); mount("*/*.x", &my_webapp::handle_test2); mount("**/*.x", &my_webapp::handle_test2b); mount("test/*", &my_webapp::handle_test3); mount("test/**", &my_webapp::handle_test4); mount("{css,scripts}/", &my_webapp::handle_testf); } virtual void handle_test1(const zeep::http::request& request, const zeep::http::scope& scope, zeep::http::reply& reply) { reply = zeep::http::reply::stock_reply(zeep::http::ok); reply.set_content("1", "text/plain"); } virtual void handle_test2(const zeep::http::request& request, const zeep::http::scope& scope, zeep::http::reply& reply) { reply = zeep::http::reply::stock_reply(zeep::http::ok); reply.set_content("2", "text/plain"); } virtual void handle_test2b(const zeep::http::request& request, const zeep::http::scope& scope, zeep::http::reply& reply) { reply = zeep::http::reply::stock_reply(zeep::http::ok); reply.set_content("2b", "text/plain"); } virtual void handle_test3(const zeep::http::request& request, const zeep::http::scope& scope, zeep::http::reply& reply) { reply = zeep::http::reply::stock_reply(zeep::http::ok); reply.set_content("3", "text/plain"); } virtual void handle_test4(const zeep::http::request& request, const zeep::http::scope& scope, zeep::http::reply& reply) { reply = zeep::http::reply::stock_reply(zeep::http::ok); reply.set_content("4", "text/plain"); } virtual void handle_testf(const zeep::http::request& request, const zeep::http::scope& scope, zeep::http::reply& reply) { reply = zeep::http::reply::stock_reply(zeep::http::ok); reply.set_content("f", "text/plain"); } } app; zeep::http::request req("GET", "/test"); zeep::http::reply rep; app.handle_request(req, rep); BOOST_CHECK_EQUAL(rep.get_status(), zeep::http::ok); BOOST_CHECK_EQUAL(rep.get_content(), "1"); req.set_uri("/test/x"); app.handle_request(req, rep); BOOST_CHECK_EQUAL(rep.get_status(), zeep::http::ok); BOOST_CHECK_EQUAL(rep.get_content(), "3"); req.set_uri("/test/x/x"); app.handle_request(req, rep); BOOST_CHECK_EQUAL(rep.get_status(), zeep::http::ok); BOOST_CHECK_EQUAL(rep.get_content(), "4"); req.set_uri("iew.x"); app.handle_request(req, rep); BOOST_CHECK_EQUAL(rep.get_status(), zeep::http::ok); BOOST_CHECK_EQUAL(rep.get_content(), "2b"); req.set_uri("x/iew.x"); app.handle_request(req, rep); BOOST_CHECK_EQUAL(rep.get_status(), zeep::http::ok); BOOST_CHECK_EQUAL(rep.get_content(), "2"); req.set_uri("x/x/iew.x"); app.handle_request(req, rep); BOOST_CHECK_EQUAL(rep.get_status(), zeep::http::ok); BOOST_CHECK_EQUAL(rep.get_content(), "2b"); req.set_uri("css/styles/my-style.css"); app.handle_request(req, rep); BOOST_CHECK_EQUAL(rep.get_status(), zeep::http::ok); BOOST_CHECK_EQUAL(rep.get_content(), "f"); req.set_uri("scripts/x.js"); app.handle_request(req, rep); BOOST_CHECK_EQUAL(rep.get_status(), zeep::http::ok); BOOST_CHECK_EQUAL(rep.get_content(), "f"); } class hello_controller : public zeep::http::html_controller { public: hello_controller() : zeep::http::html_controller("/") { mount("", &hello_controller::handle_index); } void handle_index(const zeep::http::request& req, const zeep::http::scope& scope, zeep::http::reply& rep) { rep = zeep::http::reply::stock_reply(zeep::http::ok); rep.set_content("Hello", "text/plain"); } }; BOOST_AUTO_TEST_CASE(webapp_8) { // start up a http server with a html_controller and stop it again zeep::http::daemon d([]() { auto server = new zeep::http::server; server->add_controller(new hello_controller()); return server; }, "zeep-http-test"); std::random_device rng; uint16_t port = 1024 + (rng() % 10240); std::thread t(std::bind(&zeep::http::daemon::run_foreground, d, "::", port)); std::cerr << "started daemon at port " << port << std::endl; using namespace std::chrono_literals; std::this_thread::sleep_for(2s); try { auto reply = simple_request(port, "GET / HTTP/1.0\r\n\r\n"); BOOST_TEST(reply.get_status() == zeep::http::ok); BOOST_TEST(reply.get_content() == "Hello"); } catch (const std::exception& ex) { std::cerr << ex.what() << std::endl; } zeep::signal_catcher::signal_hangup(t); t.join(); } BOOST_AUTO_TEST_CASE(webapp_10) { zeep::http::server srv; srv.add_controller(new hello_controller()); std::thread t([&srv]() mutable { using namespace std::chrono_literals; std::this_thread::sleep_for(2s); srv.stop(); }); std::random_device rng; uint16_t port = 1024 + (rng() % 10240); srv.bind("::", port); srv.run(2); t.join(); } // a more generic set of tests, should be in a separate file I guess BOOST_AUTO_TEST_CASE(split_1) { std::vector p; zeep::split(p, ",een,twee"s, ",", false); BOOST_ASSERT(p.size() == 3); BOOST_CHECK_EQUAL(p[0], ""); BOOST_CHECK_EQUAL(p[1], "een"); BOOST_CHECK_EQUAL(p[2], "twee"); zeep::split(p, ",een,twee"s, ",", true); BOOST_ASSERT(p.size() == 2); BOOST_CHECK_EQUAL(p[0], "een"); BOOST_CHECK_EQUAL(p[1], "twee"); }libzeep-5.1.7/lib-json/0000775000175000017500000000000014176701531014542 5ustar maartenmaartenlibzeep-5.1.7/lib-json/src/0000775000175000017500000000000014176701531015331 5ustar maartenmaartenlibzeep-5.1.7/lib-json/src/element.cpp0000664000175000017500000005266614176701531017505 0ustar maartenmaarten// Copyright Maarten L. Hekkelman. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include namespace zeep::json { /// empty factory with a certain type element::element(value_type t) : m_type(t), m_data(t) { validate(); } /// default factory element::element(std::nullptr_t) : element(value_type::null) { validate(); } element::element(const element& j) : m_type(j.m_type) { j.validate(); switch (m_type) { case value_type::null: break; case value_type::array: m_data = *j.m_data.m_array; break; case value_type::object: m_data = *j.m_data.m_object; break; case value_type::string: m_data = *j.m_data.m_string; break; case value_type::number_int: m_data = j.m_data.m_int; break; case value_type::number_float: m_data = j.m_data.m_float; break; case value_type::boolean: m_data = j.m_data.m_boolean; break; } validate(); } element::element(element&& j) : m_type(std::move(j.m_type)), m_data(std::move(j.m_data)) { j.validate(); j.m_type = value_type::null; j.m_data = {}; validate(); } element::element(initializer_list_t init) { bool isAnObject = std::all_of(init.begin(), init.end(), [](auto& ref) { return ref->is_array() and ref->m_data.m_array->size() == 2 and ref->m_data.m_array->front().is_string(); }); if (isAnObject) { m_type = value_type::object; m_data = value_type::object; for (auto& ref: init) { auto element = ref.data(); m_data.m_object->emplace( std::move(*element.m_data.m_array->front().m_data.m_string), std::move(element.m_data.m_array->back()) ); } } else { m_type = value_type::array; m_data.m_array = create(init.begin(), init.end()); } } element element::object(initializer_list_t init) { bool isAnObject = std::all_of(init.begin(), init.end(), [](auto& ref) { return ref->is_array() and ref->m_data.m_array->size() == 2 and ref->m_data.m_array->front().is_string(); }); if (not isAnObject) throw std::invalid_argument("Cannot create an object from this initializer list"); element result(value_type::object); for (auto& ref: init) { auto element = ref.data(); result.m_data.m_object->emplace( std::move(*element.m_data.m_array->front().m_data.m_string), std::move(element.m_data.m_array->back()) ); } return result; } element element::array(initializer_list_t init) { element result; result.m_data.m_array = create(init.begin(), init.end()); result.m_type = value_type::array; return result; } element::element(size_t cnt, const element& v) : m_type(value_type::array) { m_data.m_array = create(cnt, v); validate(); } element& element::operator=(element j) noexcept( std::is_nothrow_move_constructible_v and std::is_nothrow_move_assignable_v and std::is_nothrow_move_constructible_v and std::is_nothrow_move_assignable_v) { j.validate(); using std::swap; swap(m_type, j.m_type); swap(m_data, j.m_data); validate(); return *this; } element::~element() noexcept { validate(); m_data.destroy(m_type); } std::string element::type_name() const { switch (m_type) { case value_type::null: return "null"; case value_type::array: return "array"; case value_type::object: return "object"; case value_type::string: return "string"; case value_type::number_int: return "number_int"; case value_type::number_float: return "number_float"; case value_type::boolean: return "boolean"; default: assert(false); return ""; } } element::operator bool() const noexcept { bool result; switch (m_type) { case value_type::null: result = false; break; case value_type::boolean: result = m_data.m_boolean; break; case value_type::number_int: result = m_data.m_int != 0; break; case value_type::number_float: result = m_data.m_float != 0; break; case value_type::string: result = not m_data.m_string->empty(); break; default: result = not empty(); break; } return result; } // array access element::reference element::at(size_t index) { if (not is_array()) throw std::runtime_error("Type should have been array to use at()"); return m_data.m_array->at(index); } element::const_reference element::at(size_t index) const { if (not is_array()) throw std::runtime_error("Type should have been array to use at()"); return m_data.m_array->at(index); } element::reference element::operator[](size_t index) { if (is_null()) { m_type = value_type::array; m_data.m_array = create(); } else if (not is_array()) throw std::runtime_error("Type should have been array to use operator[]"); if (index + 1 > m_data.m_array->size()) m_data.m_array->resize(index + 1); return m_data.m_array->operator[](index); } element::const_reference element::operator[](size_t index) const { if (not is_array()) throw std::runtime_error("Type should have been array to use operator[]"); return m_data.m_array->operator[](index); } // object member access element::reference element::at(const typename object_type::key_type& key) { if (not is_object()) throw std::runtime_error("Type should have been object to use at()"); return m_data.m_object->at(key); } element::const_reference element::at(const typename object_type::key_type& key) const { if (not is_object()) throw std::runtime_error("Type should have been object to use at()"); return m_data.m_object->at(key); } element::reference element::operator[](const typename object_type::key_type& key) { if (is_null()) { m_type = value_type::object; m_data.m_object = create(); } else if (not is_object()) throw std::runtime_error("Type should have been object to use operator[]"); return m_data.m_object->operator[](key); } element::const_reference element::operator[](const typename object_type::key_type& key) const { if (not is_object()) throw std::runtime_error("Type should have been object to use operator[]"); return m_data.m_object->operator[](key); } bool element::empty() const { switch (m_type) { case value_type::null: return true; case value_type::array: return m_data.m_array->empty(); case value_type::object: return m_data.m_object->empty(); case value_type::string: return m_data.m_string->empty(); default: return false; } } size_t element::size() const { switch (m_type) { case value_type::null: return 0; case value_type::array: return m_data.m_array->size(); case value_type::object: return m_data.m_object->size(); default: return 1; } } size_t element::max_size() const noexcept { switch (m_type) { case value_type::array: return m_data.m_array->max_size(); case value_type::object: return m_data.m_object->max_size(); default: return size(); } } void element::clear() noexcept { switch (m_type) { case value_type::array: m_data.m_array->clear(); break; case value_type::object: m_data.m_object->clear(); break; case value_type::string: m_data.m_string->clear(); break; case value_type::number_int: m_data.m_int = 0; break; case value_type::number_float: m_data.m_float = 0; break; case value_type::boolean: m_data.m_boolean = false; break; default: break; } } element::iterator element::insert(const_iterator pos, const element& val) { if (is_array()) { if (pos.m_obj != this) throw std::runtime_error("Invalid pos for array"); return insert_iterator(pos, val); } throw std::runtime_error("Cannot use insert() with " + type_name()); } element::iterator element::insert(const_iterator pos, size_type cnt, const element& val) { if (is_array()) { if (pos.m_obj != this) throw std::runtime_error("Invalid pos for array"); return insert_iterator(pos, cnt, val); } throw std::runtime_error("Cannot use insert() with " + type_name()); } element::iterator element::insert(const_iterator pos, const_iterator first, const_iterator last) { if (is_array()) { if (pos.m_obj != this or first.m_obj != this or last.m_obj != this) throw std::runtime_error("Invalid pos for array"); return insert_iterator(pos, first.m_it.m_array_it, last.m_it.m_array_it); } throw std::runtime_error("Cannot use insert() with " + type_name()); } element::iterator element::insert(const_iterator pos, initializer_list_t lst) { if (is_array()) { if (pos.m_obj != this) throw std::runtime_error("Invalid pos for array"); return insert_iterator(pos, lst.begin(), lst.end()); } throw std::runtime_error("Cannot use insert() with " + type_name()); } void element::insert(const_iterator first, const_iterator last) { if (not is_object()) throw std::runtime_error("Cannot use insert() with " + type_name()); if (first.m_obj != this or last.m_obj != this) throw std::runtime_error("Invalid iterator for object"); m_data.m_object->insert(first.m_it.m_object_it, last.m_it.m_object_it); } void element::push_back(element&& val) { if (not (is_null() or is_array())) throw std::runtime_error("Cannot use push_back with " + type_name()); if (is_null()) { m_type = value_type::array; m_data = value_type::array; } m_data.m_array->push_back(std::move(val)); val.m_type = value_type::null; } void element::push_back(const element& val) { if (not (is_null() or is_array())) throw std::runtime_error("Cannot use push_back with " + type_name()); if (is_null()) { m_type = value_type::array; m_data = value_type::array; } m_data.m_array->push_back(val); } bool element::contains(element test) const { bool result = false; if (is_object()) result = m_data.m_object->count(test.as()) > 0; else if (is_array()) result = std::find(m_data.m_array->begin(), m_data.m_array->end(), test) != m_data.m_array->end(); return result; } bool operator==(element::const_reference& lhs, element::const_reference& rhs) { using detail::value_type; auto lhs_type = lhs.type(); auto rhs_type = rhs.type(); if (lhs_type == rhs_type) { switch (lhs_type) { case value_type::array: return *lhs.m_data.m_array == *rhs.m_data.m_array; case value_type::object: return *lhs.m_data.m_object == *rhs.m_data.m_object; case value_type::string: return *lhs.m_data.m_string == *rhs.m_data.m_string; case value_type::number_int: return lhs.m_data.m_int == rhs.m_data.m_int; case value_type::number_float: return lhs.m_data.m_float == rhs.m_data.m_float; case value_type::boolean: return lhs.m_data.m_boolean == rhs.m_data.m_boolean; case value_type::null: return true; } } else if (lhs_type == value_type::number_float and rhs_type == value_type::number_int) return lhs.m_data.m_float == static_cast(rhs.m_data.m_int); else if (lhs_type == value_type::number_int and rhs_type == value_type::number_float) return static_cast(lhs.m_data.m_int) == rhs.m_data.m_float; return false; } bool operator!=(element::const_reference& lhs, element::const_reference& rhs) { return not operator==(lhs, rhs); } bool operator<(element::const_reference& lhs, element::const_reference& rhs) { using detail::value_type; auto lhs_type = lhs.type(); auto rhs_type = rhs.type(); if (lhs_type == rhs_type) { switch (lhs_type) { case value_type::array: return *lhs.m_data.m_array < *rhs.m_data.m_array; case value_type::object: return *lhs.m_data.m_object < *rhs.m_data.m_object; case value_type::string: return *lhs.m_data.m_string < *rhs.m_data.m_string; case value_type::number_int: return lhs.m_data.m_int < rhs.m_data.m_int; case value_type::number_float: return lhs.m_data.m_float < rhs.m_data.m_float; case value_type::boolean: return lhs.m_data.m_boolean < rhs.m_data.m_boolean; default: break; } } else if (lhs_type == value_type::number_float and rhs_type == value_type::number_int) return lhs.m_data.m_float < static_cast(rhs.m_data.m_int); else if (lhs_type == value_type::number_int and rhs_type == value_type::number_float) return static_cast(lhs.m_data.m_int) < rhs.m_data.m_float; return lhs_type < rhs_type; } element& element::operator-() { switch (m_type) { case value_type::number_int: m_data.m_int = -m_data.m_int; break; case value_type::number_float: m_data.m_float = -m_data.m_float; break; default: throw std::runtime_error("Can only negate numbers"); } return *this; } element operator+(const element& lhs, const element& rhs) { using detail::value_type; auto lhs_type = lhs.type(); auto rhs_type = rhs.type(); element result; if (lhs_type == rhs_type) { switch (lhs_type) { case value_type::boolean: case value_type::number_int: result = lhs.m_data.m_int + rhs.m_data.m_int; break; case value_type::number_float: result = lhs.m_data.m_float + rhs.m_data.m_float; break; case value_type::string: result = *lhs.m_data.m_string + *rhs.m_data.m_string; break; case value_type::null: break; default: throw std::runtime_error("Invalid types for operator +"); } } else if (lhs_type == value_type::number_float and rhs.is_number()) result = lhs.m_data.m_float + rhs.as(); else if (lhs_type == value_type::number_int and rhs.is_number()) result = lhs.m_data.m_int + rhs.as(); else if (lhs_type == value_type::null) result = rhs; else if (rhs_type == value_type::null) result = lhs; else if (lhs_type == value_type::string or rhs_type == value_type::string) result = lhs.as() + rhs.as(); else throw std::runtime_error("Invalid types for operator +"); return result; } element operator-(const element& lhs, const element& rhs) { using detail::value_type; auto lhs_type = lhs.type(); auto rhs_type = rhs.type(); element result; if (lhs_type == rhs_type) { switch (lhs_type) { case value_type::boolean: case value_type::number_int: result = lhs.m_data.m_int - rhs.m_data.m_int; break; case value_type::number_float: result = lhs.m_data.m_float - rhs.m_data.m_float; break; default: throw std::runtime_error("Invalid types for operator -"); } } else if (lhs_type == value_type::number_float and rhs.is_number()) result = lhs.m_data.m_float - rhs.as(); else if (lhs_type == value_type::number_int and rhs.is_number()) result = lhs.m_data.m_int - rhs.as(); else throw std::runtime_error("Invalid types for operator -"); return result; } element operator*(const element& lhs, const element& rhs) { using detail::value_type; auto lhs_type = lhs.type(); auto rhs_type = rhs.type(); element result; if (lhs_type == rhs_type) { switch (lhs_type) { case value_type::boolean: case value_type::number_int: result = lhs.m_data.m_int * rhs.m_data.m_int; break; case value_type::number_float: result = lhs.m_data.m_float * rhs.m_data.m_float; break; default: throw std::runtime_error("Invalid types for operator *"); } } else if (lhs_type == value_type::number_float and rhs.is_number()) result = lhs.m_data.m_float * rhs.as(); else if (lhs_type == value_type::number_int and rhs.is_number()) result = lhs.m_data.m_int * rhs.as(); else throw std::runtime_error("Invalid types for operator *"); return result; } element operator/(const element& lhs, const element& rhs) { using detail::value_type; auto lhs_type = lhs.type(); auto rhs_type = rhs.type(); element result; if (lhs_type == rhs_type) { switch (lhs_type) { case value_type::boolean: case value_type::number_int: result = lhs.m_data.m_int / rhs.m_data.m_int; break; case value_type::number_float: result = lhs.m_data.m_float / rhs.m_data.m_float; break; default: throw std::runtime_error("Invalid types for operator /"); } } else if (lhs_type == value_type::number_float and rhs.is_number()) result = lhs.m_data.m_float / rhs.as(); else if (lhs_type == value_type::number_int and rhs.is_number()) result = lhs.m_data.m_int / rhs.as(); else throw std::runtime_error("Invalid types for operator /"); return result; } element operator%(const element& lhs, const element& rhs) { using detail::value_type; auto lhs_type = lhs.type(); auto rhs_type = rhs.type(); element result; if (lhs_type == rhs_type) { switch (lhs_type) { case value_type::boolean: case value_type::number_int: result = lhs.m_data.m_int % rhs.m_data.m_int; break; default: throw std::runtime_error("Invalid types for operator %"); } } else if (lhs_type == value_type::number_int and rhs.is_number()) result = lhs.m_data.m_int % rhs.as(); else throw std::runtime_error("Invalid types for operator %"); return result; } template<> std::string element::as() const { if (type() == value_type::string) return *m_data.m_string; std::ostringstream s; s << *this; return s.str(); } template<> bool element::as() const { switch (m_type) { case value_type::boolean: return m_data.m_boolean; case value_type::number_int: return m_data.m_int != 0; case value_type::number_float: return m_data.m_float != 0; default: return not empty(); } } // -------------------------------------------------------------------- void serialize(std::ostream& os, const element& v) { switch (v.m_type) { case element::value_type::array: { auto& a = *v.m_data.m_array; os << '['; for (size_t i = 0; i < a.size(); ++i) { serialize(os, a[i]); if (i + 1 < a.size()) os << ','; } os << ']'; break; } case element::value_type::boolean: os << std::boolalpha << v.m_data.m_boolean; break; case element::value_type::null: os << "null"; break; case element::value_type::number_float: if (v.m_data.m_float == 0 or std::isnormal(v.m_data.m_float)) os << v.m_data.m_float; else // os << "\"NaN\""; os << "null"; break; case element::value_type::number_int: os << v.m_data.m_int; break; case element::value_type::object: { os << '{'; bool first = true; for (auto& kv: *v.m_data.m_object) { if (not first) os << ','; os << '"' << kv.first << "\":"; serialize(os, kv.second); first = false; } os << '}'; break; } case element::value_type::string: os << '"'; for (uint8_t c: *v.m_data.m_string) { switch (c) { case '\"': os << "\\\""; break; case '\\': os << "\\\\"; break; case '/': os << "\\/"; break; case '\b': os << "\\b"; break; case '\n': os << "\\n"; break; case '\r': os << "\\r"; break; case '\t': os << "\\t"; break; default: if (c < 0x0020) { static const char kHex[17] = "0123456789abcdef"; os << "\\u00" << kHex[(c >> 4) & 0x0f] << kHex[c & 0x0f]; } else os << c; break; } } os << '"'; break; } } // void serialize(std::ostream& os, const element& v, int indent, int level) // { // switch (v.m_type) // { // case value_type::array: // { // auto& a = *v.m_data.m_array; // if (a.empty()) // os << std::setw(level * indent) << "[]" << std::endl; // else // { // os << std::setw(level * indent) << '[' << std::endl; // for (size_t i = 0; i < a.size(); ++i) // { // serialize(os, a[i], indent, level + 1); // if (i + 1 < a.size()) // os << ','; // os << std::endl; // } // os << std::setw(level * indent) << ']'; // } // break; // } // case value_type::boolean: // { // auto& b = *v.m_data.m_boolean; // os << std::setw(level * indent) << std::boolalpha << b; // break; // } // case value_type::null: // os << std::setw(level * indent) << "null"; // break; // case value_type::number_float: // os << std::setw(level * indent) << v.m_data.m_float; // break; // case value_type::number_int: // os << std::setw(level * indent) << v.m_data.m_int; // break; // case value_type::number_uint: // os << std::setw(level * indent) << v.m_data.m_uint; // break; // case value_type::object: // { // auto& o = *v.m_data.m_object; // if (o.empty()) // os << std::setw(level * indent) << "{}" << std::endl; // else // { // os << std::setw(level * indent) << '{' << std::endl; // for (size_t i = 0; i < a.size(); ++i) // { // os << // serialize(os, a[i], indent, level + 1); // if (i + 1 < a.size()) // os << ','; // os << std::endl; // } // os << std::setw(level * indent) << ']'; // } // break; // } // case value_type::string: // os << std::setw(level * indent) << *v.m_data.m_string; // break; // } // } // -------------------------------------------------------------------- element parse(const std::string& s) { return element(); } std::ostream& operator<<(std::ostream& os, const element& v) { // int indentation = os.width(); // os.width(0); serialize(os, v); return os; } } // namespace zeep::jsonlibzeep-5.1.7/lib-json/src/json-parser.cpp0000664000175000017500000003426214176701531020307 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include namespace zeep::json { // -------------------------------------------------------------------- class json_parser { public: json_parser(std::istream& is) : m_is(is) { } void parse(json::element& object); private: enum class token_t : uint8_t { Eof, LeftBrace, RightBrace, LeftBracket, RightBracket, Comma, Colon, String, Integer, Number, True, False, Null, Undef }; std::string describe_token(token_t t) const { switch (t) { case token_t::Eof: return "end of data"; case token_t::LeftBrace: return "left brace ('{')"; case token_t::RightBrace: return "richt brace ('}')"; case token_t::LeftBracket: return "left bracket ('[')"; case token_t::RightBracket: return "right bracket (']')"; case token_t::Comma: return "comma"; case token_t::Colon: return "colon"; case token_t::String: return "string"; case token_t::Integer: return "integer"; case token_t::Number: return "number"; case token_t::True: return "true"; case token_t::False: return "false"; case token_t::Null: return "null"; case token_t::Undef: return "undefined token"; default: assert(false); return "???"; } } void match(token_t expected); void parse_value(json::element& e); void parse_object(json::element& e); void parse_array(json::element& e); uint8_t get_next_byte(); unicode get_next_unicode(); unicode get_next_char(); void retract(); token_t get_next_token(); std::istream& m_is; // a minimal stack for ungetc like operations unicode m_buffer[2]; unicode* m_buffer_ptr = m_buffer; std::string m_token; double m_token_float; int64_t m_token_int; token_t m_lookahead; }; uint8_t json_parser::get_next_byte() { int result = m_is.rdbuf()->sbumpc(); if (result == std::streambuf::traits_type::eof()) result = 0; return static_cast(result); } unicode json_parser::get_next_unicode() { unicode result = get_next_byte(); if (result & 0x080) { unsigned char ch[3]; if ((result & 0x0E0) == 0x0C0) { ch[0] = get_next_byte(); if ((ch[0] & 0x0c0) != 0x080) throw std::runtime_error("Invalid utf-8"); result = ((result & 0x01F) << 6) | (ch[0] & 0x03F); } else if ((result & 0x0F0) == 0x0E0) { ch[0] = get_next_byte(); ch[1] = get_next_byte(); if ((ch[0] & 0x0c0) != 0x080 or (ch[1] & 0x0c0) != 0x080) throw std::runtime_error("Invalid utf-8"); result = ((result & 0x00F) << 12) | ((ch[0] & 0x03F) << 6) | (ch[1] & 0x03F); } else if ((result & 0x0F8) == 0x0F0) { ch[0] = get_next_byte(); ch[1] = get_next_byte(); ch[2] = get_next_byte(); if ((ch[0] & 0x0c0) != 0x080 or (ch[1] & 0x0c0) != 0x080 or (ch[2] & 0x0c0) != 0x080) throw std::runtime_error("Invalid utf-8"); result = ((result & 0x007) << 18) | ((ch[0] & 0x03F) << 12) | ((ch[1] & 0x03F) << 6) | (ch[2] & 0x03F); if (result > 0x10ffff) throw std::runtime_error("invalid utf-8 character (out of range)"); } } return result; } unicode json_parser::get_next_char() { unicode result = 0; if (m_buffer_ptr > m_buffer) // if buffer is not empty we already did all the validity checks result = *--m_buffer_ptr; else { result = get_next_unicode(); if (result >= 0x080) { if (result == 0x0ffff or result == 0x0fffe) throw std::runtime_error("character " + to_hex(result) + " is not allowed"); // surrogate support else if (result >= 0x0D800 and result <= 0x0DBFF) { unicode uc2 = get_next_char(); if (uc2 >= 0x0DC00 and uc2 <= 0x0DFFF) result = (result - 0x0D800) * 0x400 + (uc2 - 0x0DC00) + 0x010000; else throw std::runtime_error("leading surrogate character without trailing surrogate character"); } else if (result >= 0x0DC00 and result <= 0x0DFFF) throw std::runtime_error("trailing surrogate character without a leading surrogate"); } } // append(m_token, result); // somehow, append refuses to inline, so we have to do it ourselves if (result < 0x080) m_token += (static_cast(result)); else if (result < 0x0800) { char ch[2] = { static_cast(0x0c0 | (result >> 6)), static_cast(0x080 | (result & 0x3f))}; m_token.append(ch, 2); } else if (result < 0x00010000) { char ch[3] = { static_cast(0x0e0 | (result >> 12)), static_cast(0x080 | ((result >> 6) & 0x3f)), static_cast(0x080 | (result & 0x3f))}; m_token.append(ch, 3); } else { char ch[4] = { static_cast(0x0f0 | (result >> 18)), static_cast(0x080 | ((result >> 12) & 0x3f)), static_cast(0x080 | ((result >> 6) & 0x3f)), static_cast(0x080 | (result & 0x3f))}; m_token.append(ch, 4); } return result; } void json_parser::retract() { assert(not m_token.empty()); *m_buffer_ptr++ = pop_last_char(m_token); } auto json_parser::get_next_token() -> token_t { enum class state_t { Start, Negative, Zero, Number, NumberFraction, NumberExpSign, NumberExpDigit1, NumberExpDigit2, Literal, String, Escape, EscapeHex1, EscapeHex2, EscapeHex3, EscapeHex4 } state = state_t::Start; token_t token = token_t::Undef; double fraction = 1.0, exponent = 1; bool negative = false, negativeExp = false; unicode hx = {}; m_token.clear(); while (token == token_t::Undef) { unicode ch = get_next_char(); switch (state) { case state_t::Start: switch (ch) { case 0: token = token_t::Eof; break; case '{': token = token_t::LeftBrace; break; case '}': token = token_t::RightBrace; break; case '[': token = token_t::LeftBracket; break; case ']': token = token_t::RightBracket; break; case ',': token = token_t::Comma; break; case ':': token = token_t::Colon; break; case ' ': case '\n': case '\r': case '\t': m_token.clear(); break; case '"': m_token.pop_back(); state = state_t::String; break; case '-': state = state_t::Negative; break; default: if (ch == '0') { state = state_t::Zero; m_token_int = 0; } else if (ch >= '1' and ch <= '9') { m_token_int = ch - '0'; state = state_t::Number; } else if (ch < 128 and std::isalpha(ch)) state = state_t::Literal; else throw zeep::exception("invalid character (" + (std::isprint(ch) ? std::string(1, static_cast(ch)) : to_hex(ch)) + ") in json"); } break; case state_t::Negative: if (ch == '0') { state = state_t::Zero; negative = true; } else if (ch >= '1' and ch <= '9') { state = state_t::Number; m_token_int = ch - '0'; negative = true; } else throw zeep::exception("invalid character '-' in json"); break; case state_t::Zero: #if DISALLOW_LEADING_ZERO if ((ch >= '0' and ch <= '9') or ch == '.') throw zeep::exception("invalid number in json, should not start with zero"); #else if (ch >= '0' and ch <= '9') throw zeep::exception("invalid number in json, should not start with zero"); else if (ch == '.') { m_token_float = 0; m_token_int = 0; fraction = 0.1; state = state_t::NumberFraction; } #endif else { retract(); m_token_int = 0; token = token_t::Integer; } break; case state_t::Number: if (ch >= '0' and ch <= '9') m_token_int = 10 * m_token_int + (ch - '0'); else if (ch == '.') { m_token_float = static_cast(m_token_int); fraction = 0.1; state = state_t::NumberFraction; } else if (ch == 'e' or ch == 'E') { m_token_float = static_cast(m_token_int); state = state_t::NumberExpSign; } else { retract(); token = token_t::Integer; if (negative) m_token_int = -m_token_int; } break; case state_t::NumberFraction: if (ch >= '0' and ch <= '9') { m_token_float += fraction * (ch - '0'); fraction /= 10; } else if (ch == 'e' or ch == 'E') state = state_t::NumberExpSign; else { retract(); token = token_t::Number; if (negative) m_token_float = -m_token_float; } break; case state_t::NumberExpSign: if (ch == '+') state = state_t::NumberExpDigit1; else if (ch == '-') { negativeExp = true; state = state_t::NumberExpDigit1; } else if (ch >= '0' and ch <= '9') { exponent = (ch - '0'); state = state_t::NumberExpDigit2; } break; case state_t::NumberExpDigit1: if (ch >= '0' and ch <= '9') { exponent = (ch - '0'); state = state_t::NumberExpDigit2; } else throw zeep::exception("invalid floating point format in json"); break; case state_t::NumberExpDigit2: if (ch >= '0' and ch <= '9') exponent = 10 * exponent + (ch - '0'); else { retract(); m_token_float *= std::pow(10, (negativeExp ? -1 : 1) * exponent); if (negative) m_token_float = -m_token_float; token = token_t::Number; } break; case state_t::Literal: if (ch > 128 or not std::isalpha(ch)) { retract(); if (m_token == "true") token = token_t::True; else if (m_token == "false") token = token_t::False; else if (m_token == "null") token = token_t::Null; else throw zeep::exception("Invalid literal found in json: " + m_token); } break; case state_t::String: if (ch == '\"') { token = token_t::String; m_token.pop_back(); } else if (ch == 0) throw zeep::exception("Invalid unterminated string in json"); else if (ch == '\\') { state = state_t::Escape; m_token.pop_back(); } break; case state_t::Escape: switch (ch) { case '"': case '\\': case '/': break; case 'n': m_token.back() = '\n'; break; case 't': m_token.back() = '\t'; break; case 'r': m_token.back() = '\r'; break; case 'f': m_token.back() = '\f'; break; case 'b': m_token.back() = '\b'; break; case 'u': state = state_t::EscapeHex1; m_token.pop_back(); break; default: throw zeep::exception("Invalid escape sequence in json (\\" + std::string{static_cast(ch)} + ')'); } if (state == state_t::Escape) state = state_t::String; break; case state_t::EscapeHex1: if (ch >= '0' and ch <= '9') hx = ch - '0'; else if (ch >= 'a' and ch <= 'f') hx = 10 + ch - 'a'; else if (ch >= 'A' and ch <= 'F') hx = 10 + ch - 'A'; else throw zeep::exception("Invalid hex sequence in json"); m_token.pop_back(); state = state_t::EscapeHex2; break; case state_t::EscapeHex2: if (ch >= '0' and ch <= '9') hx = 16 * hx + ch - '0'; else if (ch >= 'a' and ch <= 'f') hx = 16 * hx + 10 + ch - 'a'; else if (ch >= 'A' and ch <= 'F') hx = 16 * hx + 10 + ch - 'A'; else throw zeep::exception("Invalid hex sequence in json"); m_token.pop_back(); state = state_t::EscapeHex3; break; case state_t::EscapeHex3: if (ch >= '0' and ch <= '9') hx = 16 * hx + ch - '0'; else if (ch >= 'a' and ch <= 'f') hx = 16 * hx + 10 + ch - 'a'; else if (ch >= 'A' and ch <= 'F') hx = 16 * hx + 10 + ch - 'A'; else throw zeep::exception("Invalid hex sequence in json"); m_token.pop_back(); state = state_t::EscapeHex4; break; case state_t::EscapeHex4: if (ch >= '0' and ch <= '9') hx = 16 * hx + ch - '0'; else if (ch >= 'a' and ch <= 'f') hx = 16 * hx + 10 + ch - 'a'; else if (ch >= 'A' and ch <= 'F') hx = 16 * hx + 10 + ch - 'A'; else throw zeep::exception("Invalid hex sequence in json"); m_token.pop_back(); append(m_token, hx); state = state_t::String; break; } } return token; } void json_parser::match(token_t expected) { if (m_lookahead != expected) throw zeep::exception("Syntax error in json, expected " + describe_token(expected) + " but found " + describe_token(m_lookahead)); m_lookahead = get_next_token(); } void json_parser::parse_value(json::element& e) { switch (m_lookahead) { case token_t::Eof: break; case token_t::Null: match(m_lookahead); break; case token_t::False: match(m_lookahead); e = false; break; case token_t::True: match(m_lookahead); e = true; break; case token_t::Integer: match(m_lookahead); e = m_token_int; break; case token_t::Number: match(m_lookahead); e = m_token_float; break; case token_t::LeftBrace: match(m_lookahead); parse_object(e); match(token_t::RightBrace); break; case token_t::LeftBracket: match(m_lookahead); parse_array(e); match(token_t::RightBracket); break; case token_t::String: e = m_token; match(m_lookahead); break; default: throw std::runtime_error("Syntax error in json, unexpected token " + describe_token(m_lookahead)); } } void json_parser::parse_object(json::element& e) { for (;;) { if (m_lookahead == token_t::RightBrace or m_lookahead == token_t::Eof) break; auto name = m_token; match(token_t::String); match(token_t::Colon); json::element v; parse_value(v); e.emplace(name, v); if (m_lookahead != token_t::Comma) break; match(m_lookahead); } } void json_parser::parse_array(json::element& e) { for (;;) { if (m_lookahead == token_t::RightBracket or m_lookahead == token_t::Eof) break; json::element v; parse_value(v); e.emplace_back(v); if (m_lookahead != token_t::Comma) break; match(m_lookahead); } } void json_parser::parse(json::element& obj) { m_lookahead = get_next_token(); parse_value(obj); if (m_lookahead != token_t::Eof) throw zeep::exception("Extraneaous data after parsing json"); } void parse_json(const std::string& json, element& object) { std::istringstream s(json); json_parser p(s); p.parse(object); } void parse_json(std::istream& is, element& object) { json_parser p(is); p.parse(object); } namespace literals { element operator""_json(const char* s, size_t n) { element result; parse_json(std::string{s, n}, result); return result; } } } libzeep-5.1.7/lib-json/test/0000775000175000017500000000000014176701531015521 5ustar maartenmaartenlibzeep-5.1.7/lib-json/test/json-test.cpp0000664000175000017500000001501314176701531020153 0ustar maartenmaarten#define BOOST_TEST_MODULE Processor_Test #include #include #include #include #include #include using namespace std; using json = zeep::json::element; using namespace zeep::json::literals; // ----------------------------------------------------------------------- struct MyPOD2 { float f = -1.5; std::vector v = { 1, 2, 3, 4 }; bool operator==(const MyPOD2& rhs) const { return f == rhs.f and v == rhs.v; } template void serialize(Archive& ar, unsigned long version) { ar & zeep::make_nvp("f-f", f) & zeep::make_nvp("v", v) ; } }; struct MyPOD { std::string s; int i; std::optional o{13}; std::vector fp{2, MyPOD2()}; bool operator==(const MyPOD& rhs) const { return s == rhs.s and i == rhs.i and o == rhs.o and fp == rhs.fp; } template void serialize(Archive& ar, unsigned long version) { ar & zeep::make_nvp("s-s", s) & zeep::make_nvp("i-i", i) & zeep::make_nvp("opt", o) & zeep::make_nvp("fp", fp) ; } }; // ----------------------------------------------------------------------- BOOST_AUTO_TEST_CASE(j_1) { json jnull = R"(null)"_json; BOOST_TEST(jnull.is_null()); } BOOST_AUTO_TEST_CASE(j_2) { json jint = R"(1)"_json; BOOST_TEST(jint.is_number()); BOOST_TEST(jint.is_number_int()); BOOST_TEST(jint.as() == 1); BOOST_TEST(jint.as() == 1.0); BOOST_TEST(jint.as() == "1"); BOOST_TEST(jint.as() == true); #ifndef _MSC_VER BOOST_CHECK_THROW(jint.as>(), std::exception); #endif } BOOST_AUTO_TEST_CASE(j_3) { json jint = R"(-1)"_json; BOOST_TEST(jint.is_number()); BOOST_TEST(jint.is_number_int()); BOOST_TEST(jint.as() == -1); BOOST_TEST(jint.as() == -1.0); BOOST_TEST(jint.as() == "-1"); BOOST_TEST(jint.as() == true); #ifndef _MSC_VER BOOST_CHECK_THROW(jint.as>(), std::exception); #endif } BOOST_AUTO_TEST_CASE(j_4) { json jfloat = R"(1.0)"_json; BOOST_TEST(jfloat.is_number()); BOOST_TEST(jfloat.is_number_float()); BOOST_TEST(jfloat.as() == 1); BOOST_TEST(jfloat.as() == 1.0); BOOST_TEST(jfloat.as() == "1"); BOOST_TEST(jfloat.as() == true); #ifndef _MSC_VER BOOST_CHECK_THROW(jfloat.as>(), std::exception); #endif } BOOST_AUTO_TEST_CASE(j_5) { json jfloat = R"(-1.0)"_json; BOOST_TEST(jfloat.is_number()); BOOST_TEST(jfloat.is_number_float()); BOOST_TEST(jfloat.as() == -1); BOOST_TEST(jfloat.as() == -1.0); BOOST_TEST(jfloat.as() == "-1"); BOOST_TEST(jfloat.as() == true); #ifndef _MSC_VER BOOST_CHECK_THROW(jfloat.as>(), std::exception); #endif } BOOST_AUTO_TEST_CASE(j_6) { for (string fs: { "1e3", "1.0e3", "10.0", "1.0", "1.0e-2", "0.1", "-1e3", "-1.0e3", "-10.0", "-1.0", "-1.0e-2", "-0.1" }) { json jfloat; parse_json(fs, jfloat); BOOST_TEST(jfloat.is_number()); BOOST_TEST(jfloat.is_number_float()); BOOST_TEST(jfloat.as() == static_cast(stof(fs))); BOOST_TEST(jfloat.as() == stof(fs)); std::ostringstream s; s << stof(fs); fs = s.str(); BOOST_TEST(jfloat.as() == fs); BOOST_TEST(jfloat.as() == true); } } BOOST_AUTO_TEST_CASE(j_7) { for (string fs: { "01", "-01" }) { json jf; BOOST_CHECK_THROW(parse_json(fs, jf), zeep::exception); } } BOOST_AUTO_TEST_CASE(j_8) { json j = { { "aap", 1 }, { "noot", 2.0 } }; size_t i = 0; for (auto& [key, value]: j.items()) { switch (i++) { case 0: BOOST_TEST(key == "aap"); BOOST_TEST(value.is_number_int()); BOOST_TEST(value.as() == 1); break; case 1: BOOST_TEST(key == "noot"); BOOST_TEST(value.is_number_float()); BOOST_TEST(value.as() == 2.0); break; } } } BOOST_AUTO_TEST_CASE(j_9) { json j; zeep::json::serializer::serialize(j, true); BOOST_TEST(j.is_boolean()); BOOST_TEST(j == true); zeep::json::serializer::serialize(j, false); BOOST_TEST(j.is_boolean()); BOOST_TEST(j == false); zeep::json::serializer::serialize(j, 1); BOOST_TEST(j.is_number_int()); BOOST_TEST(j == 1); zeep::json::serializer::serialize(j, 1.0); BOOST_TEST(j.is_number_float()); BOOST_TEST(j == 1.0); zeep::json::serializer::serialize(j, "aap"); BOOST_TEST(j.is_string()); BOOST_TEST(j == "aap"); std::optional i; zeep::json::serializer::serialize(j, i); BOOST_TEST(j.is_null()); i = 1; zeep::json::serializer::serialize(j, i); BOOST_TEST(j.is_number_int()); BOOST_TEST(j == 1); } BOOST_AUTO_TEST_CASE(j_10) { static_assert(std::is_constructible::value, "oi"); } enum class MyEnum { aap, noot, mies }; std::ostream& operator<<(std::ostream& os, MyEnum e) { os << zeep::value_serializer::to_string(e); return os; } BOOST_AUTO_TEST_CASE(j_11) { zeep::value_serializer::instance() ("aap", MyEnum::aap) ("noot", MyEnum::noot) ("mies", MyEnum::mies); json e = MyEnum::aap; BOOST_TEST(e.as() == "aap"); // BOOST_TEST(e.as() == MyEnum::aap); // reinit the enum serializer zeep::value_serializer::init({ { MyEnum::aap, "aap" }, { MyEnum::noot, "noot" }, { MyEnum::mies, "mies" } }); e = MyEnum::noot; BOOST_TEST(e.as() == "noot"); } struct MyPOD3 { MyEnum a; template void serialize(Archive& ar, unsigned long version) { ar & zeep::make_nvp("a", a) ; } }; BOOST_AUTO_TEST_CASE(j_12) { MyPOD p1{ "1", 2 }, p1a; json e; to_element(e, p1); from_element(e, p1a); BOOST_TEST((p1 == p1a)); MyPOD3 p3{MyEnum::noot}, p3a; to_element(e, p3); from_element(e, p3a); BOOST_TEST(p3.a == p3a.a); } struct POD3 { boost::posix_time::ptime now; template void serialize(Archive& ar, unsigned long version) { ar & zeep::make_nvp("now", now); } }; BOOST_AUTO_TEST_CASE(j_13) { POD3 p{ boost::posix_time::second_clock::local_time() }, pa; json e; to_element(e, p); from_element(e, pa); BOOST_TEST((p.now == pa.now)); } enum class E { aap, noot, mies }; struct Se { E m_e; template void serialize(Archive& ar, unsigned long) { ar & zeep::make_nvp("e", m_e); } bool operator==(const Se& se) const { return m_e == se.m_e; } }; BOOST_AUTO_TEST_CASE(j_test_array_1) { using array_type = std::vector; array_type v{ { E::aap }, { E::noot }, { E::mies }}, v2; json e; to_element(e, v); from_element(e, v2); BOOST_TEST(v == v2); } libzeep-5.1.7/lib-xml/0000775000175000017500000000000014176701531014371 5ustar maartenmaartenlibzeep-5.1.7/lib-xml/src/0000775000175000017500000000000014176701531015160 5ustar maartenmaartenlibzeep-5.1.7/lib-xml/src/character-classification.cpp0000664000175000017500000000514714176701531022620 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include namespace zeep::xml { // some very basic code to check the class of scanned characters bool is_name_start_char(unicode uc) { return uc == L':' or (uc >= L'A' and uc <= L'Z') or uc == L'_' or (uc >= L'a' and uc <= L'z') or (uc >= 0x0C0 and uc <= 0x0D6) or (uc >= 0x0D8 and uc <= 0x0F6) or (uc >= 0x0F8 and uc <= 0x02FF) or (uc >= 0x0370 and uc <= 0x037D) or (uc >= 0x037F and uc <= 0x01FFF) or (uc >= 0x0200C and uc <= 0x0200D) or (uc >= 0x02070 and uc <= 0x0218F) or (uc >= 0x02C00 and uc <= 0x02FEF) or (uc >= 0x03001 and uc <= 0x0D7FF) or (uc >= 0x0F900 and uc <= 0x0FDCF) or (uc >= 0x0FDF0 and uc <= 0x0FFFD) or (uc >= 0x010000 and uc <= 0x0EFFFF); } bool is_name_char(unicode uc) { return uc == '-' or uc == '.' or (uc >= '0' and uc <= '9') or uc == 0x0B7 or is_name_start_char(uc) or (uc >= 0x00300 and uc <= 0x0036F) or (uc >= 0x0203F and uc <= 0x02040); } bool is_valid_xml_1_0_char(unicode uc) { return uc == 0x09 or uc == 0x0A or uc == 0x0D or (uc >= 0x020 and uc <= 0x0D7FF) or (uc >= 0x0E000 and uc <= 0x0FFFD) or (uc >= 0x010000 and uc <= 0x010FFFF); } bool is_valid_xml_1_1_char(unicode uc) { return uc == 0x09 or uc == 0x0A or uc == 0x0D or (uc >= 0x020 and uc < 0x07F) or uc == 0x085 or (uc >= 0x0A0 and uc <= 0x0D7FF) or (uc >= 0x0E000 and uc <= 0x0FFFD) or (uc >= 0x010000 and uc <= 0x010FFFF); } bool is_valid_system_literal_char(unicode uc) { return uc > 0x1f and uc != ' ' and uc != '<' and uc != '>' and uc != '"' and uc != '#'; } bool is_valid_system_literal(const std::string& s) { bool result = true; for (std::string::const_iterator ch = s.begin(); result == true and ch != s.end(); ++ch) result = is_valid_system_literal_char(*ch); return result; } bool is_valid_public_id_char(unicode uc) { static const std::string kPubChars(" \r\n-'()+,./:=?;!*#@$_%"); return (uc >= 'a' and uc <= 'z') or (uc >= 'A' and uc <= 'Z') or (uc >= '0' and uc <= '9') or (uc < 128 and kPubChars.find(static_cast(uc)) != std::string::npos); } bool is_valid_public_id(const std::string& s) { bool result = true; for (std::string::const_iterator ch = s.begin(); result == true and ch != s.end(); ++ch) result = is_valid_public_id_char(*ch); return result; } } // namespace zeep::xml libzeep-5.1.7/lib-xml/src/doctype.cpp0000664000175000017500000003652714176701531017350 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2010-2011. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #define _SCL_SECURE_NO_WARNINGS #include #include #include #include #include namespace zeep::xml::doctype { // -------------------------------------------------------------------- // validator code // a refcounted state base class struct state_base : std::enable_shared_from_this { state_base() : m_ref_count(1) {} virtual std::tuple allow(const std::string& name) = 0; virtual bool allow_char_data() { return false; } virtual bool allow_empty() { return false; } virtual bool must_be_empty() { return false; } virtual void reset() {} void reference() { ++m_ref_count; } void release() { if (--m_ref_count == 0) delete this; } protected: virtual ~state_base() { assert(m_ref_count == 0); } private: int m_ref_count; }; struct state_any : public state_base { virtual std::tuple allow(const std::string& name) { return std::make_tuple(true, true); } virtual bool allow_char_data() { return true; } virtual bool allow_empty() { return true; } }; struct state_empty : public state_base { virtual std::tuple allow(const std::string& name) { return std::make_tuple(false, true); } virtual bool allow_empty() { return true; } virtual bool must_be_empty() { return true; } }; struct state_element : public state_base { state_element(const std::string& name) : m_name(name), m_done(false) {} virtual std::tuple allow(const std::string& name) { bool result = false; if (not m_done and m_name == name) m_done = result = true; // m_done = true; return std::make_tuple(result, m_done); } virtual void reset() { m_done = false; } std::string m_name; bool m_done; }; struct state_repeated : public state_base { state_repeated(content_spec_ptr sub) : m_sub(sub->create_state()), m_state(0) {} ~state_repeated() { m_sub->release(); } virtual void reset() { m_sub->reset(); m_state = 0; } virtual bool allow_char_data() { return m_sub->allow_char_data(); } state_ptr m_sub; int m_state; }; // repeat for ? struct state_repeated_zero_or_once : public state_repeated { state_repeated_zero_or_once(content_spec_ptr sub) : state_repeated(sub) {} std::tuple allow(const std::string& name); virtual bool allow_empty() { return true; } }; std::tuple state_repeated_zero_or_once::allow(const std::string& name) { // use a state machine enum State { state_Start = 0, state_Loop }; bool result = false, done = false; switch (m_state) { case state_Start: std::tie(result, done) = m_sub->allow(name); if (result == true) m_state = state_Loop; else done = true; break; case state_Loop: std::tie(result, done) = m_sub->allow(name); if (result == false and done) done = true; break; } return std::make_tuple(result, done); } struct state_repeated_any : public state_repeated { state_repeated_any(content_spec_ptr sub) : state_repeated(sub) {} std::tuple allow(const std::string& name); virtual bool allow_empty() { return true; } }; std::tuple state_repeated_any::allow(const std::string& name) { // use a state machine enum State { state_Start = 0, state_Loop }; bool result = false, done = false; switch (m_state) { case state_Start: std::tie(result, done) = m_sub->allow(name); if (result == true) m_state = state_Loop; else done = true; break; case state_Loop: std::tie(result, done) = m_sub->allow(name); if (result == false and done) { m_sub->reset(); std::tie(result, done) = m_sub->allow(name); if (result == false) done = true; } break; } return std::make_tuple(result, done); } struct state_repeated_at_least_once : public state_repeated { state_repeated_at_least_once(content_spec_ptr sub) : state_repeated(sub) {} std::tuple allow(const std::string& name); virtual bool allow_empty() { return m_sub->allow_empty(); } }; std::tuple state_repeated_at_least_once::allow(const std::string& name) { // use a state machine enum State { state_Start = 0, state_FirstLoop, state_NextLoop }; bool result = false, done = false; switch (m_state) { case state_Start: std::tie(result, done) = m_sub->allow(name); if (result == true) m_state = state_FirstLoop; break; case state_FirstLoop: std::tie(result, done) = m_sub->allow(name); if (result == false and done) { m_sub->reset(); std::tie(result, done) = m_sub->allow(name); if (result == true) m_state = state_NextLoop; } break; case state_NextLoop: std::tie(result, done) = m_sub->allow(name); if (result == false and done) { m_sub->reset(); std::tie(result, done) = m_sub->allow(name); if (result == false) done = true; } break; } return std::make_tuple(result, done); } // allow a sequence struct state_seq : public state_base { state_seq(const content_spec_list& allowed) : m_state(0) { for (content_spec_ptr a : allowed) m_states.push_back(a->create_state()); } ~state_seq() { for (state_ptr s : m_states) s->release(); } virtual std::tuple allow(const std::string& name); virtual void reset() { m_state = 0; std::for_each(m_states.begin(), m_states.end(), [](auto state) { state->reset(); }); } virtual bool allow_char_data() { bool result = false; for (state_ptr s : m_states) { if (s->allow_char_data()) { result = true; break; } } return result; } virtual bool allow_empty(); std::list m_states; std::list::iterator m_next; int m_state; }; std::tuple state_seq::allow(const std::string& name) { bool result = false, done = false; enum State { state_Start, state_Element }; switch (m_state) { case state_Start: m_next = m_states.begin(); if (m_next == m_states.end()) { done = true; break; } m_state = state_Element; // fall through case state_Element: std::tie(result, done) = (*m_next)->allow(name); while (result == false and done) { ++m_next; if (m_next == m_states.end()) { done = true; break; } std::tie(result, done) = (*m_next)->allow(name); } break; } return std::make_tuple(result, done); } bool state_seq::allow_empty() { bool result; if (m_states.empty()) result = true; else { result = accumulate(m_states.begin(), m_states.end(), true, [](bool flag, auto& state) { return state->allow_empty() and flag; }); } return result; } // allow one of a list struct state_choice : public state_base { state_choice(const content_spec_list& allowed, bool mixed) : m_mixed(mixed), m_state(0) { for (content_spec_ptr a : allowed) m_states.push_back(a->create_state()); } ~state_choice() { for (state_ptr s : m_states) s->release(); } virtual std::tuple allow(const std::string& name); virtual void reset() { m_state = 0; std::for_each(m_states.begin(), m_states.end(), [](auto& state) { state->reset(); }); } virtual bool allow_char_data() { return m_mixed; } virtual bool allow_empty(); std::list m_states; bool m_mixed; int m_state; state_ptr m_sub; }; std::tuple state_choice::allow(const std::string& name) { bool result = false, done = false; enum State { state_Start, state_Choice }; switch (m_state) { case state_Start: for (auto choice = m_states.begin(); choice != m_states.end(); ++choice) { std::tie(result, done) = (*choice)->allow(name); if (result == true) { m_sub = *choice; m_state = state_Choice; break; } } break; case state_Choice: std::tie(result, done) = m_sub->allow(name); break; } return std::make_tuple(result, done); } bool state_choice::allow_empty() { return m_mixed or std::find_if(m_states.begin(), m_states.end(), std::bind(&state_base::allow_empty, std::placeholders::_1)) != m_states.end(); } // -------------------------------------------------------------------- validator::validator(content_spec_ptr allowed) : m_state(allowed->create_state()), m_allowed(allowed), m_done(m_state->allow_empty()) { } validator::validator(const element_* e) : m_allowed(e ? e->get_allowed() : nullptr) { if (m_allowed == nullptr) { m_state = new state_any(); m_done = true; } else { m_state = m_allowed->create_state(); m_done = m_state->allow_empty(); } } validator::~validator() { m_state->release(); } bool validator::allow(const std::string& name) { bool result; std::tie(result, m_done) = m_state->allow(name); return result; } bool validator::done() { return m_done; } ContentSpecType validator::get_content_spec() const { return m_allowed ? m_allowed->get_content_spec() : ContentSpecType::Any; } // -------------------------------------------------------------------- state_ptr content_spec_any::create_state() const { return new state_any(); } // -------------------------------------------------------------------- state_ptr content_spec_empty::create_state() const { return new state_empty(); } // -------------------------------------------------------------------- state_ptr content_spec_element::create_state() const { return new state_element(m_name); } // -------------------------------------------------------------------- content_spec_repeated::~content_spec_repeated() { delete m_allowed; } state_ptr content_spec_repeated::create_state() const { switch (m_repetition) { case '?': return new state_repeated_zero_or_once(m_allowed); case '*': return new state_repeated_any(m_allowed); case '+': return new state_repeated_at_least_once(m_allowed); default: assert(false); throw zeep::exception("illegal repetition character"); } } bool content_spec_repeated::element_content() const { return m_allowed->element_content(); } // -------------------------------------------------------------------- content_spec_seq::~content_spec_seq() { for (content_spec_ptr a : m_allowed) delete a; } void content_spec_seq::add(content_spec_ptr a) { m_allowed.push_back(a); } state_ptr content_spec_seq::create_state() const { return new state_seq(m_allowed); } bool content_spec_seq::element_content() const { bool result = true; for (content_spec_ptr a : m_allowed) { if (not a->element_content()) { result = false; break; } } return result; } // -------------------------------------------------------------------- content_spec_choice::~content_spec_choice() { for (content_spec_ptr a : m_allowed) delete a; } void content_spec_choice::add(content_spec_ptr a) { m_allowed.push_back(a); } state_ptr content_spec_choice::create_state() const { return new state_choice(m_allowed, m_mixed); } bool content_spec_choice::element_content() const { bool result = true; if (m_mixed) result = false; else { for (content_spec_ptr a : m_allowed) { if (not a->element_content()) { result = false; break; } } } return result; } // -------------------------------------------------------------------- bool attribute_::is_name(std::string& s) const { bool result = true; trim(s); if (not s.empty()) { std::string::iterator c = s.begin(); if (c != s.end()) result = is_name_start_char(*c); while (result and ++c != s.end()) result = is_name_char(*c); } return result; } bool attribute_::is_names(std::string& s) const { bool result = true; trim(s); if (not s.empty()) { std::string::iterator c = s.begin(); std::string t; while (result and c != s.end()) { result = is_name_start_char(*c); t += *c; ++c; while (result and c != s.end() and is_name_char(*c)) { t += *c; ++c; } if (c == s.end()) break; result = isspace(*c) != 0; ++c; t += ' '; while (c != s.end() and isspace(*c)) ++c; } swap(s, t); } return result; } bool attribute_::is_nmtoken(std::string& s) const { trim(s); bool result = not s.empty(); std::string::iterator c = s.begin(); while (result and ++c != s.end()) result = is_name_char(*c); return result; } bool attribute_::is_nmtokens(std::string& s) const { // remove leading and trailing spaces trim(s); bool result = not s.empty(); std::string::iterator c = s.begin(); std::string t; while (result and c != s.end()) { result = false; do { if (not is_name_char(*c)) break; result = true; t += *c; ++c; } while (c != s.end()); if (not result or c == s.end()) break; result = false; do { if (*c != ' ') break; result = true; ++c; } while (c != s.end() and *c == ' '); t += ' '; } if (result) swap(s, t); return result; } bool attribute_::validate_value(std::string& value, const entity_list& entities) const { bool result = true; if (m_type == AttributeType::CDATA) result = true; else if (m_type == AttributeType::ENTITY) { result = is_name(value); if (result) result = is_unparsed_entity(value, entities); } else if (m_type == AttributeType::ID or m_type == AttributeType::IDREF) result = is_name(value); else if (m_type == AttributeType::ENTITIES) { result = is_names(value); if (result) { std::vector values; split(values, value, " "); for (const std::string& v : values) { if (not is_unparsed_entity(v, entities)) { result = false; break; } } } } else if (m_type == AttributeType::IDREFS) result = is_names(value); else if (m_type == AttributeType::NMTOKEN) result = is_nmtoken(value); else if (m_type == AttributeType::NMTOKENS) result = is_nmtokens(value); else if (m_type == AttributeType::Enumerated or m_type == AttributeType::Notation) { trim(value); result = find(m_enum.begin(), m_enum.end(), value) != m_enum.end(); } if (result and m_default == AttributeDefault::Fixed and value != m_default_value) result = false; return result; } bool attribute_::is_unparsed_entity(const std::string& s, const entity_list& l) const { bool result = false; entity_list::const_iterator i = std::find_if(l.begin(), l.end(), [s](auto e) { return e->name() == s; }); if (i != l.end()) result = (*i)->is_parsed() == false; return result; } // -------------------------------------------------------------------- element_::~element_() { for (attribute_* attr : m_attlist) delete attr; delete m_allowed; } void element_::set_allowed(content_spec_ptr allowed) { if (allowed != m_allowed) { delete m_allowed; m_allowed = allowed; } } void element_::add_attribute(attribute_* attrib) { std::unique_ptr attr(attrib); if (find_if(m_attlist.begin(), m_attlist.end(), [attrib](auto a) { return a->name() == attrib->name(); }) == m_attlist.end()) m_attlist.push_back(attr.release()); } const attribute_* element_::get_attribute(const std::string& name) const { attribute_list::const_iterator dta = find_if(m_attlist.begin(), m_attlist.end(), [name](auto a) { return a->name() == name; }); const attribute_* result = nullptr; if (dta != m_attlist.end()) result = *dta; return result; } // validator element::get_validator() const // { // // validator valid; // // if (m_allowed) // // valid = validator(m_allowed); // return { m_allowed }; // } bool element_::empty() const { return dynamic_cast(m_allowed) != nullptr; } } // namespace zeep::xml::doctype libzeep-5.1.7/lib-xml/src/document.cpp0000664000175000017500000002317414176701531017511 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include namespace zeep::xml { // -------------------------------------------------------------------- document::document() : m_validating(false) , m_preserve_cdata(false) , m_has_xml_decl(false) , m_encoding(encoding_type::UTF8) , m_version(1.0f) , m_standalone(false) { } document::document(const document& doc) : element(doc) , m_doctype(doc.m_doctype) , m_validating(doc.m_validating) , m_preserve_cdata(doc.m_preserve_cdata) , m_has_xml_decl(doc.m_has_xml_decl) , m_encoding(doc.m_encoding) , m_version(doc.m_version) , m_standalone(doc.m_standalone) , m_fmt(doc.m_fmt) { } document::document(document&& doc) : element(doc) , m_doctype(doc.m_doctype) , m_validating(doc.m_validating) , m_preserve_cdata(doc.m_preserve_cdata) , m_has_xml_decl(doc.m_has_xml_decl) , m_encoding(doc.m_encoding) , m_version(doc.m_version) , m_standalone(doc.m_standalone) , m_fmt(doc.m_fmt) { } document& document::operator=(const document& doc) { element::operator=(doc); m_doctype = doc.m_doctype; m_validating = doc.m_validating; m_preserve_cdata = doc.m_preserve_cdata; m_fmt = doc.m_fmt; m_has_xml_decl = doc.m_has_xml_decl; m_encoding = doc.m_encoding; m_version = doc.m_version; m_standalone = doc.m_standalone; return *this; } document& document::operator=(document&& doc) { element::operator=(doc); m_doctype = doc.m_doctype; m_validating = doc.m_validating; m_preserve_cdata = doc.m_preserve_cdata; m_fmt = doc.m_fmt; m_has_xml_decl = doc.m_has_xml_decl; m_encoding = doc.m_encoding; m_version = doc.m_version; m_standalone = doc.m_standalone; return *this; } document::document(const std::string& s) : document() { std::istringstream is(s); parse(is); } document::document(std::istream& is) : document() { parse(is); } document::document(std::istream& is, const std::string& base_dir) : document() { m_validating = true; m_dtd_dir = base_dir; parse(is); } document::~document() { } // -------------------------------------------------------------------- element::node_iterator document::insert_impl(const_iterator pos, node* n) { if (not empty()) throw zeep::exception("Cannot add a node to a non-empty document"); return element::insert_impl(pos, n); } // -------------------------------------------------------------------- bool document::is_html5() const { return m_doctype.m_root == "html" and m_nodes.front().name() == "html" and m_doctype.m_pubid == "" and m_doctype.m_dtd == "about:legacy-compat"; } // -------------------------------------------------------------------- bool document::operator==(const document& other) const { return equals(&other); } std::ostream& operator<<(std::ostream& os, const document& doc) { auto fmt = doc.m_fmt; if (os.width() > 0) { fmt.indent_width = os.width(); fmt.indent = true; } doc.write(os, fmt); return os; } std::istream& operator>>(std::istream& is, document& doc) { doc.parse(is); return is; } void document::write(std::ostream& os, format_info fmt) const { if (m_version > 1.0f or m_write_xml_decl) { assert(m_encoding == encoding_type::UTF8); os << ""; if (m_wrap_prolog) os << std::endl; } if (not m_notations.empty() or m_write_doctype) { os << "' << std::endl; } os << "]"; } os << ">" << std::endl; } for (auto& n: nodes()) n.write(os, fmt); } // -------------------------------------------------------------------- void document::XmlDeclHandler(encoding_type encoding, bool standalone, float version) { m_has_xml_decl = true; // m_encoding = encoding; m_standalone = standalone; m_version = version; m_fmt.version = version; } void document::StartElementHandler(const std::string& name, const std::string& uri, const parser::attr_list_type& atts) { std::string qname = name; if (not uri.empty()) { std::string prefix; bool found; auto i = std::find_if(m_namespaces.begin(), m_namespaces.end(), [uri](auto& ns) { return ns.second == uri; }); if (i != m_namespaces.end()) { prefix = i->first; found = true; } else std::tie(prefix, found) = m_cur->prefix_for_namespace(uri); if (prefix.empty() and not found) throw exception("namespace not found: " + uri); if (not prefix.empty()) qname = prefix + ':' + name; } m_cur = &m_cur->emplace_back(qname); for (auto ns = m_namespaces.begin(); ns != m_namespaces.end(); ++ns) { if (ns->first.empty()) m_cur->attributes().emplace("xmlns", ns->second); else m_cur->attributes().emplace("xmlns:" + ns->first, ns->second); } for (const parser::attr_type& a : atts) { qname = a.m_name; if (not a.m_ns.empty()) { auto p = m_cur->prefix_for_namespace(a.m_ns); if (not p.second) throw exception("namespace not found: " + a.m_ns); qname = p.first.empty() ? a.m_name : p.first + ':' + a.m_name; } m_cur->attributes().emplace(qname, a.m_value, a.m_id); } m_namespaces.clear(); } void document::EndElementHandler(const std::string& name, const std::string& uri) { if (m_cdata != nullptr) throw exception("CDATA section not closed"); m_cur = m_cur->parent(); } void document::CharacterDataHandler(const std::string& data) { if (m_cdata != nullptr) m_cdata->append(data); else m_cur->add_text(data); } void document::ProcessingInstructionHandler(const std::string& target, const std::string& data) { m_cur->nodes().emplace_back(processing_instruction(target, data)); } void document::CommentHandler(const std::string& s) { m_cur->nodes().emplace_back(comment(s)); } void document::StartCdataSectionHandler() { m_cdata = &m_cur->nodes().emplace_back(cdata()); } void document::EndCdataSectionHandler() { m_cdata = nullptr; } void document::StartNamespaceDeclHandler(const std::string& prefix, const std::string& uri) { m_namespaces.push_back(make_pair(prefix, uri)); } void document::EndNamespaceDeclHandler(const std::string& prefix) { } void document::DoctypeDeclHandler(const std::string& root, const std::string& publicId, const std::string& uri) { m_doctype.m_root = root; m_doctype.m_pubid = publicId; m_doctype.m_dtd = uri; } void document::NotationDeclHandler(const std::string& name, const std::string& sysid, const std::string& pubid) { if (m_notations.empty()) m_root_size_at_first_notation = nodes().size(); notation n = {name, sysid, pubid}; auto i = find_if(m_notations.begin(), m_notations.end(), [name](auto& nt) { return nt.m_name >= name; }); m_notations.insert(i, n); } std::istream* document::external_entity_ref(const std::string& base, const std::string& pubid, const std::string& sysid) { std::istream* result = nullptr; if (m_external_entity_ref_loader) result = m_external_entity_ref_loader(base, pubid, sysid); if (result == nullptr and not sysid.empty()) { std::string path; if (base.empty()) path = sysid; else path = base + '/' + sysid; std::unique_ptr file(new std::ifstream(path, std::ios::binary)); if (not file->is_open()) file->open(m_dtd_dir + '/' + path, std::ios::binary); if (file->is_open()) result = file.release(); } return result; } void document::parse(std::istream& is) { parser p(is); using std::placeholders::_1; using std::placeholders::_2; using std::placeholders::_3; p.xml_decl_handler = std::bind(&document::XmlDeclHandler, this, _1, _2, _3); p.doctype_decl_handler = std::bind(&document::DoctypeDeclHandler, this, _1, _2, _3); p.start_element_handler = std::bind(&document::StartElementHandler, this, _1, _2, _3); p.end_element_handler = std::bind(&document::EndElementHandler, this, _1, _2); p.character_data_handler = std::bind(&document::CharacterDataHandler, this, _1); if (m_preserve_cdata) { p.start_cdata_section_handler = std::bind(&document::StartCdataSectionHandler, this); p.end_cdata_section_handler = std::bind(&document::EndCdataSectionHandler, this); } p.start_namespace_decl_handler = std::bind(&document::StartNamespaceDeclHandler, this, _1, _2); p.processing_instruction_handler = std::bind(&document::ProcessingInstructionHandler, this, _1, _2); p.comment_handler = std::bind(&document::CommentHandler, this, _1); p.notation_decl_handler = std::bind(&document::NotationDeclHandler, this, _1, _2, _3); p.external_entity_ref_handler = std::bind(&document::external_entity_ref, this, _1, _2, _3); m_cur = this; p.parse(m_validating, m_validating_ns); assert(m_cur == this); } namespace literals { document operator""_xml(const char* text, size_t length) { zeep::xml::document doc; doc.set_preserve_cdata(true); zeep::char_streambuf buffer(text, length); std::istream is(&buffer); is >> doc; return doc; } } } // namespace zeep::xml libzeep-5.1.7/lib-xml/src/node.cpp0000664000175000017500000005137514176701531016624 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include namespace zeep::xml { const std::set kEmptyHTMLElements{ "area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr" }; // -------------------------------------------------------------------- void write_string(std::ostream& os, const std::string& s, bool escape_whitespace, bool escape_quot, bool trim, float version) { bool last_is_space = false; auto sp = s.begin(); auto se = s.end(); while (sp < se) { auto sb = sp; unicode c; std::tie(c, sp) = get_first_char(sp, se); switch (c) { case '&': os << "&"; last_is_space = false; break; case '<': os << "<"; last_is_space = false; break; case '>': os << ">"; last_is_space = false; break; case '\"': if (escape_quot) os << """; else os << static_cast(c); last_is_space = false; break; case '\n': if (escape_whitespace) os << " "; else os << static_cast(c); last_is_space = true; break; case '\r': if (escape_whitespace) os << " "; else os << static_cast(c); last_is_space = false; break; case '\t': if (escape_whitespace) os << " "; else os << static_cast(c); last_is_space = false; break; case ' ': if (not trim or not last_is_space) os << ' '; last_is_space = true; break; case 0: throw exception("Invalid null character in XML content"); default: if (c >= 0x0A0 or (version == 1.0 ? is_valid_xml_1_0_char(c) : is_valid_xml_1_1_char(c))) for (auto ci = sb; ci < sp; ++ci) os << *ci; else os << "&#" << static_cast(c) << ';'; last_is_space = false; break; } sb = sp; } } // -------------------------------------------------------------------- node::~node() { // avoid deep recursion and stack overflows while (m_next != nullptr) { node* n = m_next; m_next = n->m_next; n->m_next = nullptr; delete n; } } element* node::root() { element* result = nullptr; if (m_parent != nullptr) result = m_parent->root(); return result; } const element* node::root() const { const element* result = nullptr; if (m_parent != nullptr) result = m_parent->root(); return result; } bool node::equals(const node* n) const { assert(false); return n == this; } std::string node::lang() const { std::string result; if (m_parent != nullptr) result = m_parent->lang(); return result; } void node::insert_sibling(node* n, node* before) { node* p = this; while (p->m_next != nullptr and p->m_next != before) p = p->m_next; if (p->m_next != before and before != nullptr) throw zeep::exception("before argument in insert_sibling is not valid"); p->m_next = n; n->m_prev = p; n->m_parent = m_parent; n->m_next = before; if (before != nullptr) before->m_prev = n; // #if DEBUG // validate(); // n->validate(); // if (before) before->validate(); // #endif } void node::remove_sibling(node* n) { assert (this != n); if (this == n) throw exception("inconsistent node tree"); node* p = this; while (p != nullptr and p->m_next != n) p = p->m_next; if (p != nullptr and p->m_next == n) { p->m_next = n->m_next; if (p->m_next != nullptr) p->m_next->m_prev = p; n->m_next = n->m_prev = n->m_parent = nullptr; } else throw exception("remove for a node not found in the list"); } void node::parent(element* n) { assert(m_parent == nullptr); m_parent = n; } std::string node::get_qname() const { return ""; } std::string node::name() const { std::string qn = get_qname(); std::string::size_type s = qn.find(':'); if (s != std::string::npos) qn.erase(0, s + 1); return qn; } std::string node::get_prefix() const { std::string qn = get_qname(); std::string::size_type s = qn.find(':'); std::string p; if (s != std::string::npos) p = qn.substr(0, s); return p; } std::string node::get_ns() const { std::string p = get_prefix(); return namespace_for_prefix(p); } std::string node::namespace_for_prefix(const std::string& prefix) const { std::string result; if (m_parent != nullptr) result = m_parent->namespace_for_prefix(prefix); return result; } std::pair node::prefix_for_namespace(const std::string& uri) const { std::pair result{}; if (m_parent != nullptr) result = m_parent->prefix_for_namespace(uri); return result; } std::string node::prefix_tag(const std::string& tag, const std::string& uri) const { auto prefix = prefix_for_namespace(uri); return prefix.second ? prefix.first + ':' + tag : tag; } void node::validate() { if (m_parent and dynamic_cast(this) != nullptr and (std::find_if(m_parent->m_nodes.begin(), m_parent->m_nodes.end(), [this](auto& i) { return &i == this; }) == m_parent->m_nodes.end())) throw exception("validation error: parent does not know node"); if (m_next and m_next->m_prev != this) throw exception("validation error: m_next->m_prev != this"); if (m_prev and m_prev->m_next != this) throw exception("validation error: m_prev->m_next != this"); node* n = this; while (n != nullptr and n->m_next != this) n = n->m_next; if (n == this) throw exception("cycle in node list"); n = this; while (n != nullptr and n->m_prev != this) n = n->m_prev; if (n == this) throw exception("cycle in node list"); if (m_next) m_next->validate(); } // -------------------------------------------------------------------- // comment bool comment::equals(const node* n) const { return dynamic_cast(n) != nullptr and m_text == static_cast(n)->m_text; } node* comment::clone() const { return new comment(m_text); } node* comment::move() { return new comment(std::move(*this)); } void comment::write(std::ostream& os, format_info fmt) const { // if (fmt.indent_width != 0) // os << std::endl << std::string(fmt.indent_width, ' '); if (not fmt.suppress_comments) { os << ""; if (fmt.indent_width != 0) os << std::endl; } } // -------------------------------------------------------------------- // processing_instruction bool processing_instruction::equals(const node* n) const { return dynamic_cast(n) != nullptr and m_text == static_cast(n)->m_text; } node* processing_instruction::clone() const { return new processing_instruction(m_target, m_target); } node* processing_instruction::move() { return new processing_instruction(std::move(*this)); } void processing_instruction::write(std::ostream& os, format_info fmt) const { if (fmt.indent) os << std::endl << std::string(fmt.indent_level * fmt.indent_width, ' '); os << ""; if (fmt.indent != 0) os << std::endl; } // -------------------------------------------------------------------- // text bool text::equals(const node* n) const { bool result = false; auto t = dynamic_cast(n); if (t != nullptr) { std::string text = m_text; trim(text); std::string ttext = t->m_text; trim(ttext); result = text == ttext; } return result; } bool text::is_space() const { bool result = true; for (auto ch: m_text) { if (not (ch == ' ' or ch == '\t' or ch == '\n' or ch == '\r')) { result = false; break; } } return result; } node* text::clone() const { return new text(m_text); } node* text::move() { return new text(std::move(*this)); } void text::write(std::ostream& os, format_info fmt) const { write_string(os, m_text, fmt.escape_white_space, fmt.escape_double_quote, false, fmt.version); } // -------------------------------------------------------------------- // cdata bool cdata::equals(const node* n) const { return dynamic_cast(n) != nullptr and m_text == static_cast(n)->m_text; } node* cdata::clone() const { return new cdata(m_text); } node* cdata::move() { return new cdata(std::move(*this)); } void cdata::write(std::ostream& os, format_info fmt) const { if (fmt.indent) os << std::endl << std::string(fmt.indent_level * fmt.indent_width, ' '); os << ""; if (fmt.indent) os << std::endl; } // -------------------------------------------------------------------- // attribute bool attribute::equals(const node* n) const { bool result = false; const attribute* a = dynamic_cast(n); if (a != nullptr) { result = m_qname == a->m_qname and m_value == a->m_value; } return result; } std::string attribute::uri() const { assert(is_namespace()); if (not is_namespace()) throw exception("Attribute is not a namespace"); return m_value; } node* attribute::clone() const { return new attribute(m_qname, m_value, m_id); } node* attribute::move() { return new attribute(std::move(*this)); } void attribute::write(std::ostream& os, format_info fmt) const { if (fmt.indent_width != 0) os << std::endl << std::string(fmt.indent_width, ' '); else os << ' '; os << m_qname << "=\""; write_string(os, m_value, fmt.escape_white_space, true, false, fmt.version); os << '"'; } // // -------------------------------------------------------------------- // // name_space // bool name_space::equals(const node* n) const // { // bool result = false; // const name_space* ns = dynamic_cast(n); // if (ns != nullptr) // result = m_uri == ns->m_uri; // return result; // } // node* name_space::clone() const // { // return new name_space(m_prefix, m_uri); // } // node* name_space::move() // { // return new name_space(std::move(*this)); // } // void name_space::write(std::ostream& os, format_info fmt) const // { // if (fmt.indent_width != 0) // os << std::endl << std::string(fmt.indent_width, ' '); // else // os << ' '; // if (m_prefix.empty()) // os << "xmlns"; // else // os << "xmlns:" << m_prefix; // os << "=\""; // write_string(os, m_uri, fmt.escape_white_space, false, fmt.version); // os << '"'; // } // -------------------------------------------------------------------- // element element::element() : m_nodes(*this) , m_attributes(*this) { } element::element(const std::string& qname) : m_qname(qname) , m_nodes(*this) , m_attributes(*this) { } element::element(const std::string& qname, std::initializer_list attributes) : m_qname(qname) , m_nodes(*this) , m_attributes(*this) { for (auto& a: attributes) set_attribute(a.get_qname(), a.value()); } // copy constructor. Copy data and children, but not parent and sibling element::element(const element& e) : node() , m_qname(e.m_qname) , m_nodes(*this, e.m_nodes) , m_attributes(*this, e.m_attributes) { } element::element(element&& e) : element() { swap(e); } element& element::operator=(const element& e) { if (this != &e) { m_nodes = e.m_nodes; m_attributes = e.m_attributes; } return *this; } element& element::operator=(element&& e) { if (this != &e) { clear(); swap(e); } return *this; } element::~element() { } void element::swap(element& e) noexcept { std::swap(m_qname, e.m_qname); m_nodes.swap(e.m_nodes); m_attributes.swap(e.m_attributes); } node* element::clone() const { return new element(*this); } node* element::move() { return new element(std::move(*this)); } std::string element::lang() const { std::string result; auto i = m_attributes.find("xml:lang"); if (i != m_attributes.end()) result = i->value(); else if (m_parent != nullptr) result = m_parent->lang(); return result; } std::string element::id() const { std::string result; for (auto& a: m_attributes) { if (a.is_id()) { result = a.value(); break; } } return result; } std::string element::get_attribute(const std::string& qname) const { std::string result; auto a = m_attributes.find(qname); if (a != m_attributes.end()) result = a->value(); return result; } void element::set_attribute(const std::string& qname, const std::string& value) { m_attributes.emplace(qname, value); } bool element::equals(const node* n) const { bool result = false; const element* e = dynamic_cast(n); if (e != nullptr) { result = name() == e->name() and get_ns() == e->get_ns(); const node* a = m_nodes.m_head;; const node* b = e->m_nodes.m_head; while (a != nullptr or b != nullptr) { if (a != nullptr and b != nullptr and a->equals(b)) { a = a->m_next; b = b->m_next; continue; } const text* t; t = dynamic_cast(a); if (t != nullptr and t->is_space()) { a = a->m_next; continue; } t = dynamic_cast(b); if (t != nullptr and t->is_space()) { b = b->m_next; continue; } result = false; break; } result = result and ((a == nullptr) == (b == nullptr)); if (result) { result = m_attributes == e->m_attributes; if (not result) { std::set as(m_attributes.begin(), m_attributes.end()); std::set bs(e->m_attributes.begin(), e->m_attributes.end()); std::set nsa, nsb; auto ai = as.begin(), bi = bs.begin(); for (;;) { if (ai == as.end() and bi == bs.end()) break; if (ai != as.end() and ai->is_namespace()) { nsa.insert(ai->value()); ++ai; continue; } if (bi != bs.end() and bi->is_namespace()) { nsb.insert(bi->value()); ++bi; continue; } if (ai == as.end() or bi == bs.end() or *ai++ != *bi++) { result = false; break; } } result = ai == as.end() and bi == bs.end() and nsa == nsb; } } } return result; } void element::clear() { m_nodes.clear(); m_attributes.clear(); } std::string element::get_content() const { std::string result; for (auto& n: m_nodes) { auto t = dynamic_cast(&n); if (t != nullptr) result += t->get_text(); } return result; } void element::set_content(const std::string& s) { // remove all existing text nodes (including cdata ones) for (auto n = m_nodes.begin(); n != m_nodes.end(); ++n) { if (dynamic_cast(&*n) != nullptr) n = m_nodes.erase(n); } // and add a new text node with the content m_nodes.insert(m_nodes.end(), text(s)); } std::string element::str() const { std::string result; for (auto& n: m_nodes) result += n.str(); return result; } void element::add_text(const std::string& s) { text* textNode = dynamic_cast(m_nodes.m_tail); if (textNode != nullptr and dynamic_cast(textNode) == nullptr) textNode->append(s); else m_nodes.emplace_back(text(s)); } void element::set_text(const std::string& s) { set_content(s); } void element::flatten_text() { auto n = m_nodes.m_head; while (n != m_nodes.m_tail) { auto tn = dynamic_cast(n); if (tn == nullptr) { n = n->m_next; continue; } if (n->m_next == nullptr) // should never happen break; auto ntn = dynamic_cast(n->m_next); if (ntn == nullptr) { n = n->m_next; continue; } tn->append(ntn->get_text()); m_nodes.erase(n->m_next); } } void element::write(std::ostream& os, format_info fmt) const { // if width is set, we wrap and indent the file size_t indentation = fmt.indent_level * fmt.indent_width; if (fmt.indent) { if (fmt.indent_level > 0) os << std::endl; os << std::string(indentation, ' '); } os << '<' << m_qname; // if the left flag is set, wrap and indent attributes as well auto attr_fmt = fmt; attr_fmt.indent_width = 0; for (auto& attr: attributes()) { attr.write(os, attr_fmt); if (attr_fmt.indent_width == 0 and fmt.indent_attributes) attr_fmt.indent_width = indentation + 1 + m_qname.length() + 1; } if ((fmt.html and kEmptyHTMLElements.count(m_qname)) or (not fmt.html and fmt.collapse_tags and nodes().empty())) os << "/>"; else { os << '>'; auto sub_fmt = fmt; ++sub_fmt.indent_level; bool wrote_element = false; for (auto& n: nodes()) { n.write(os, sub_fmt); wrote_element = dynamic_cast(&n) != nullptr; } if (wrote_element and fmt.indent != 0) os << std::endl << std::string(indentation, ' '); os << "'; } } std::ostream& operator<<(std::ostream& os, const element& e) { auto flags = os.flags({}); auto width = os.width(0); format_info fmt; fmt.indent = width > 0; fmt.indent_width = width; fmt.indent_attributes = flags & std::ios_base::left; e.write(os, fmt); return os; } std::string element::namespace_for_prefix(const std::string& prefix) const { std::string result; for (auto& a: m_attributes) { if (not a.is_namespace()) continue; if (a.name() == "xmlns") { if (prefix.empty()) { result = a.value(); break; } continue; } if (a.name() == prefix) { result = a.value(); break; } } if (result.empty() and dynamic_cast(m_parent) != nullptr) result = static_cast(m_parent)->namespace_for_prefix(prefix); return result; } std::pair element::prefix_for_namespace(const std::string& uri) const { std::string result; bool found = false; for (auto& a: m_attributes) { if (not a.is_namespace()) continue; if (a.value() == uri) { found = true; if (a.get_qname().length() > 6) result = a.get_qname().substr(6); break; } } if (not found and dynamic_cast(m_parent) != nullptr) std::tie(result, found) = static_cast(m_parent)->prefix_for_namespace(uri); return make_pair(result, found); } void element::move_to_name_space(const std::string& prefix, const std::string& uri, bool recursive, bool including_attributes) { // first some sanity checks auto p = prefix_for_namespace(uri); if (p.second) { if (p.first != prefix) throw exception("Invalid prefix in move_to_name_space, already known as '" + p.first + "'"); } else { bool set = false; for (auto& a: m_attributes) { if (not a.is_namespace()) continue; if (a.get_qname().length() > 6 and a.get_qname().substr(6) == prefix) { set = true; a.value(uri); break; } } if (not set) m_attributes.emplace(prefix.empty() ? "xmlns" : "xmlns:" + prefix, uri); } set_qname(prefix, name()); if (including_attributes) { // first process the namespace attributes... for (auto& attr: m_attributes) { if (not attr.is_namespace()) continue; auto nsp = prefix_for_namespace(attr.uri()); if (not nsp.second) attr.set_qname("xmlns", nsp.first); } // ... and then the others, makes sure the namespaces are known for (auto& attr: m_attributes) { if (attr.is_namespace()) continue; auto ns = attr.get_ns(); if (ns.empty()) attr.set_qname(prefix + ':' + attr.name()); else { auto nsp = prefix_for_namespace(ns); if (not nsp.second) throw exception("Cannot move element to new namespace, namespace not found: " + ns); attr.set_qname(nsp.first, attr.name()); } } } if (recursive) { for (element& e: *this) e.move_to_name_space(prefix, uri, true, including_attributes); } } element_set element::find(const char *path) const { return xpath(path).evaluate(*this); } element* element::find_first(const char *path) const { element_set s = xpath(path).evaluate(*this); element *result = nullptr; if (not s.empty()) result = s.front(); return result; } void element::validate() { node::validate(); for (auto& n: nodes()) n.validate(); for (auto& a: attributes()) { if (a.parent() != this) throw exception("validation error: attribute has incorrect parent"); } } // -------------------------------------------------------------------- void fix_namespaces(element& e, element& source, element& dest) { std::stack s; s.push(&e); std::map mapped; while (not s.empty()) { auto n = s.top(); s.pop(); auto p = n->get_prefix(); if (not p.empty()) { if (mapped.count(p)) { if (mapped[p] != p) n->set_qname(mapped[p], n->name()); } else { auto ns = n->namespace_for_prefix(p); if (ns.empty()) ns = source.namespace_for_prefix(p); auto dp = dest.prefix_for_namespace(ns); if (dp.second) { mapped[p] = dp.first; n->set_qname(dp.first, n->name()); } else { mapped[p] = p; dest.attributes().emplace({ "xmlns:" + p, ns }); } } } auto el = dynamic_cast(n); if (el == nullptr) continue; for (auto& c: *el) s.push(&c); for (auto& a: el->attributes()) s.push(&a); } } }libzeep-5.1.7/lib-xml/src/xml-parser.cpp0000664000175000017500000026671214176701531017774 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include namespace zeep::xml { bool is_absolute_path(const std::string& s) { bool result = false; if (not s.empty()) { if (s[0] == '/') result = true; else if (isalpha(s[0])) { std::string::const_iterator ch = s.begin() + 1; while (ch != s.end() and isalpha(*ch)) ++ch; result = ch != s.end() and *ch == ':'; } } return result; } bool is_valid_url(const std::string& url) { // The rules for url in namespaces are a bit different from the URI requirements in RFC3986 auto cp = url.find(':'); return cp > 1 and cp != std::string::npos and std::isalpha(url[0]); } // parsing XML is somewhat like macro processing, // we can encounter entities that need to be expanded into replacement text // and so we declare data_source objects that can be stacked. class data_source; // exception generated by data_source class source_exception : public zeep::exception { public: source_exception(const std::string& msg) : exception(msg), m_wmsg(msg) {} ~source_exception() throw() {} std::string m_wmsg; }; // A data source can have a base dir which is the directory the data came from. // This information is needed when a relative uri is found in an external ID. class data_source { public: data_source(const data_source&) = delete; data_source& operator=(const data_source&) = delete; data_source() : m_base("."), m_encoding(encoding_type::UTF8), m_line_nr(1) { static int sNextID = 0; m_id = sNextID++; } virtual ~data_source() {} // data_source is a virtual base class. Derivatives need to declare the next function. virtual unicode get_next_char() = 0; void base(const std::string& dir) { m_base = dir; } const std::string& base() const { return m_base; } encoding_type encoding() const { return m_encoding; } virtual void encoding(encoding_type enc) { m_encoding = enc; } virtual bool has_bom() { return false; } void version(float v) { m_version = v; } int id() const { return m_id; } int line_nr() const { return m_line_nr; } void line_nr(int l) { m_line_nr = l; } protected: std::string m_base; encoding_type m_encoding; float m_version = 1.0f; int m_id; // for nesting checks int m_line_nr; // for reporting errors }; // -------------------------------------------------------------------- // An std::istream implementation of data_source. class istream_data_source : public data_source { public: istream_data_source(std::istream& data) : m_data(&data), m_owns_data(false) { guess_encoding(); } istream_data_source(std::istream *data) : m_data(data) { guess_encoding(); } ~istream_data_source() { if (m_owns_data) delete m_data; } virtual bool has_bom() { return m_has_bom; } virtual unicode get_next_char(); virtual void encoding(encoding_type enc); private: void guess_encoding(); void parse_text_decl(); unicode next_utf8_char(); unicode next_utf16le_char(); unicode next_utf16be_char(); unicode next_iso88591_char(); unicode next_ascii_char(); unsigned char next_byte() { int result = m_data->rdbuf()->sbumpc(); if (result == std::streambuf::traits_type::eof()) result = 0; return static_cast(result); } std::istream* m_data; bool m_owns_data = true; unicode m_char_buffer = 0; // used in detecting \r\n algorithm typedef unicode (istream_data_source::*next_func)(void); next_func m_next; bool m_has_bom = false; }; void istream_data_source::guess_encoding() { // see if there is a BOM // if there isn't, we assume the data is UTF-8 int ch = m_data->rdbuf()->sgetc(); if (ch != std::streambuf::traits_type::eof()) { char ch1 = static_cast(ch); if (ch1 == static_cast(0xfe)) { char ch2 = static_cast(m_data->rdbuf()->snextc()); if (ch2 == static_cast(0xff)) { m_data->rdbuf()->snextc(); m_encoding = encoding_type::UTF16BE; m_has_bom = true; } else m_data->rdbuf()->sungetc(); } else if (ch1 == static_cast(0xff)) { char ch2 = static_cast(m_data->rdbuf()->snextc()); if (ch2 == static_cast(0xfe)) { m_data->rdbuf()->snextc(); m_encoding = encoding_type::UTF16LE; m_has_bom = true; } else m_data->rdbuf()->sungetc(); } else if (ch1 == static_cast(0xef)) { char ch2 = static_cast(m_data->rdbuf()->snextc()); char ch3 = static_cast(m_data->rdbuf()->snextc()); if (ch2 == static_cast(0xbb) and ch3 == static_cast(0xbf)) { m_data->rdbuf()->snextc(); m_encoding = encoding_type::UTF8; m_has_bom = true; } else { m_data->rdbuf()->sungetc(); m_data->rdbuf()->sputbackc(ch1); } } } encoding(m_encoding); } void istream_data_source::encoding(encoding_type enc) { if (enc != m_encoding) { if (is_single_byte_encoding(enc) and is_single_byte_encoding(m_encoding)) m_encoding = enc; else throw invalid_exception("Invalid encoding specified, incompatible with actual encoding"); } data_source::encoding(enc); switch (m_encoding) { case encoding_type::UTF8: m_next = &istream_data_source::next_utf8_char; break; case encoding_type::UTF16LE: m_next = &istream_data_source::next_utf16le_char; break; case encoding_type::UTF16BE: m_next = &istream_data_source::next_utf16be_char; break; case encoding_type::ISO88591: m_next = &istream_data_source::next_iso88591_char; break; case encoding_type::ASCII: m_next = &istream_data_source::next_ascii_char; break; default: break; } } unicode istream_data_source::next_utf8_char() { unicode result = next_byte(); if (result & 0x080) { unsigned char ch[3]; if ((result & 0x0E0) == 0x0C0) { ch[0] = next_byte(); if ((ch[0] & 0x0c0) != 0x080) throw source_exception("Invalid utf-8"); result = ((result & 0x01F) << 6) | (ch[0] & 0x03F); } else if ((result & 0x0F0) == 0x0E0) { ch[0] = next_byte(); ch[1] = next_byte(); if ((ch[0] & 0x0c0) != 0x080 or (ch[1] & 0x0c0) != 0x080) throw source_exception("Invalid utf-8"); result = ((result & 0x00F) << 12) | ((ch[0] & 0x03F) << 6) | (ch[1] & 0x03F); } else if ((result & 0x0F8) == 0x0F0) { ch[0] = next_byte(); ch[1] = next_byte(); ch[2] = next_byte(); if ((ch[0] & 0x0c0) != 0x080 or (ch[1] & 0x0c0) != 0x080 or (ch[2] & 0x0c0) != 0x080) throw source_exception("Invalid utf-8"); result = ((result & 0x007) << 18) | ((ch[0] & 0x03F) << 12) | ((ch[1] & 0x03F) << 6) | (ch[2] & 0x03F); if (result > 0x10ffff) throw source_exception("invalid utf-8 character (out of range)"); } } return result; } unicode istream_data_source::next_utf16le_char() { unsigned char c1 = next_byte(), c2 = next_byte(); unicode ch = (static_cast(c2) << 8) | c1; if (ch >= 0x080) { // surrogate support if (ch >= 0x0D800 and ch <= 0x0DBFF) { unicode uc2 = next_utf16le_char(); if (uc2 >= 0x0DC00 and uc2 <= 0x0DFFF) ch = (ch - 0x0D800) * 0x400 + (uc2 - 0x0DC00) + 0x010000; else throw not_wf_exception("Document (line: " + std::to_string(m_line_nr) + " not well-formed: leading surrogate character without trailing surrogate character"); } else if (ch >= 0x0DC00 and ch <= 0x0DFFF) throw not_wf_exception("Document (line: " + std::to_string(m_line_nr) + " not well-formed: trailing surrogate character without a leading surrogate"); } return ch; } unicode istream_data_source::next_utf16be_char() { unsigned char c1 = next_byte(), c2 = next_byte(); unicode ch = (static_cast(c1) << 8) | c2; if (ch >= 0x080) { // surrogate support if (ch >= 0x0D800 and ch <= 0x0DBFF) { unicode uc2 = next_utf16be_char(); if (uc2 >= 0x0DC00 and uc2 <= 0x0DFFF) ch = (ch - 0x0D800) * 0x400 + (uc2 - 0x0DC00) + 0x010000; else throw not_wf_exception("Document (line: " + std::to_string(m_line_nr) + " not well-formed: leading surrogate character without trailing surrogate character"); } else if (ch >= 0x0DC00 and ch <= 0x0DFFF) throw not_wf_exception("Document (line: " + std::to_string(m_line_nr) + " not well-formed: trailing surrogate character without a leading surrogate"); } return ch; } unicode istream_data_source::next_iso88591_char() { return (unicode)next_byte(); } unicode istream_data_source::next_ascii_char() { unicode c = next_byte(); if (c > 127) throw not_wf_exception("Invalid ascii value"); return c; } unicode istream_data_source::get_next_char() { unicode ch = m_char_buffer; if (ch == 0) ch = (this->*m_next)(); else m_char_buffer = 0; if (ch == 0x0ffff or ch == 0x0fffe) throw not_wf_exception("Document (line: " + std::to_string(m_line_nr) + " not well-formed: character " + to_hex(ch) + " is not allowed"); if (ch == '\r') { ch = (this->*m_next)(); if (ch != '\n' and (m_version == 1.0 or ch != 0x85 or m_encoding == encoding_type::ASCII)) m_char_buffer = ch; ch = '\n'; } if (m_encoding != encoding_type::ASCII) { if (m_version > 1.0 and ch == 0x85) ch = '\n'; else if (m_encoding != encoding_type::ISO88591 and m_version > 1.0 and ch == 0x2028) ch = '\n'; } if (ch == '\n') ++m_line_nr; return ch; } // -------------------------------------------------------------------- class string_data_source : public data_source { public: string_data_source(const std::string& data) : m_data(data), m_ptr(m_data.begin()) { } unicode get_next_char() { unicode result = 0; if (m_ptr != m_data.end()) std::tie(result, m_ptr) = get_first_char(m_ptr, m_data.end()); if (result == '\n') ++m_line_nr; return result; } private: std::string m_data; std::string::iterator m_ptr; }; // -------------------------------------------------------------------- class entity_data_source : public string_data_source { public: entity_data_source(const std::string& text, const std::string& entity_path) : string_data_source(text) { base(entity_path); } }; // -------------------------------------------------------------------- class parameter_entity_data_source : public string_data_source { public: parameter_entity_data_source(const std::string& data, const std::string& base_dir) : string_data_source(" " + data + " ") { base(base_dir); } }; // -------------------------------------------------------------------- class valid_nesting_validator { public: valid_nesting_validator(data_source& source) : m_id(source.id()) {} void check(data_source& source) { if (source.id() != m_id) throw invalid_exception("proper nesting validation error"); } private: int m_id; }; // -------------------------------------------------------------------- struct parser_imp { parser_imp(std::istream& data, parser& parser); ~parser_imp(); // Here comes the parser part void parse(bool validate, bool validate_ns); // the productions. Some are inlined below for obvious reasons. // names of the productions try to follow those in the TR http://www.w3.org/TR/xml void prolog(); void xml_decl(); void text_decl(); void s(bool at_least_one = false); void eq(); void misc(); void element(doctype::validator& valid); void content(doctype::validator& valid); void comment(); void pi(); void pereference(); void doctypedecl(); data_source* get_data_source(const std::string& pubid, std::string uri); std::tuple read_external_id(); void intsubset(); void extsubset(); void declsep(); void conditionalsect(); void ignoresectcontents(); void markup_decl(); void element_decl(); void contentspec(doctype::element_& element); doctype::content_spec_ptr cp(); void attlist_decl(); void notation_decl(); void entity_decl(); void parameter_entity_decl(); void general_entity_decl(); void entity_value(); // at several locations we need to parse out entity references from strings: void parse_parameter_entity_declaration(std::string& s); void parse_general_entity_declaration(std::string& s); // same goes for attribute values std::string normalize_attribute_value(const std::string& s, bool isCDATA) { push_data_source(new string_data_source(s), false); std::string result = normalize_attribute_value(); if (m_standalone and result != s) not_valid("Document cannot be standalone since an attribute was modified"); if (not isCDATA) collapse_spaces(result); return result; } std::string normalize_attribute_value(); void collapse_spaces(std::string& s); // The scanner is next. We recognize the following tokens: enum XMLToken { Undef, Eq = '=', QuestionMark = '?', GreaterThan = '>', OpenBracket = '[', CloseBracket = ']', OpenParenthesis = '(', CloseParenthesis = ')', Percent = '%', Plus = '+', Pipe = '|', Asterisk = '*', Slash = '/', Comma = ',', Eof = 256, Other, // // these are tokens for the markup XMLDecl, // Content, // anything else up to the next element start }; // for debugging and error reporting we have the following describing routine constexpr const char* describe_token(XMLToken token) { switch (token) { case XMLToken::Undef: return "undefined"; case XMLToken::Eq: return "="; case XMLToken::QuestionMark: return "?"; case XMLToken::GreaterThan: return ">"; case XMLToken::OpenBracket: return "["; case XMLToken::CloseBracket: return "]"; case XMLToken::OpenParenthesis: return "("; case XMLToken::CloseParenthesis:return ")"; case XMLToken::Percent: return "%"; case XMLToken::Plus: return "+"; case XMLToken::Pipe: return "|"; case XMLToken::Asterisk: return "*"; case XMLToken::Slash: return "/"; case XMLToken::Comma: return ","; case XMLToken::Eof: return "end of file"; case XMLToken::Other: return "an invalid character"; case XMLToken::XMLDecl: return "'() const { return m_source; } data_source& operator*() const { return *m_source; } bool inserted() const { return m_inserted; } parser_imp& m_impl; data_source* m_source; std::array m_buffer; std::ptrdiff_t m_buffer_offset; XMLToken m_lookahead; std::string m_token; bool m_inserted; }; void push_data_source(data_source* source, bool insert) { source->version(m_version); m_source.emplace(this, source, insert); } void pop_data_source() { assert(not m_source.empty()); m_source.pop(); } // And during parsing we keep track of the namespaces we encounter. class ns_state { public: ns_state(parser_imp *imp) : m_parser_imp(imp), m_next(imp->m_ns) { m_parser_imp->m_ns = this; } ~ns_state() { m_parser_imp->m_ns = m_next; } std::string default_ns() { std::string result = m_default_ns; if (result.empty() and m_next != nullptr) result = m_next->default_ns(); return result; } void default_ns(const std::string& ns) { m_default_ns = ns; } std::string ns_for_prefix(const std::string& prefix) { std::string result; if (m_unbound.count(prefix) == 0) { auto np = m_known.find(prefix); if (np != m_known.end()) result = np->second; else if (m_next != nullptr) result = m_next->ns_for_prefix(prefix); } return result; } void bind(const std::string& prefix, const std::string& uri) { m_known[prefix] = uri; } void unbind(const std::string& prefix) { m_unbound.insert(prefix); } bool is_known_prefix(const std::string& prefix) { bool result = false; if (not m_unbound.count(prefix)) { if (m_known.count(prefix)) result = true; else if (m_next != nullptr) result = m_next->is_known_prefix(prefix); } return result; } bool is_known_uri(const std::string& uri) { return find_if(m_known.begin(), m_known.end(), [uri] (auto k) { return k.second == uri; }) != m_known.end() or (m_next != nullptr and m_next->is_known_uri(uri)); } private: parser_imp *m_parser_imp; std::string m_default_ns; ns_state *m_next; std::map m_known; std::set m_unbound; }; bool is_char(unicode uc) { return m_version == 1.0 ? is_valid_xml_1_0_char(uc) : is_valid_xml_1_1_char(uc); } bool is_space(unicode uc) { return uc == ' ' or uc == '\t' or uc == '\n' or uc == '\r'; } bool is_space(const std::string& s) { return not s.empty() and s.find_first_not_of(" \t\r\n") == std::string::npos; } bool is_referrable_char(unicode charref) { return m_version == 1.0 ? charref == 0x09 or charref == 0x0A or charref == 0x0D or (charref > 0x01F and charref < 0x0D800) or (charref > 0x0DFFF and charref < 0x0FFFE) or (charref > 0x0FFFF and charref < 0x00110000) : // 1.1 (charref > 0x0 and charref < 0x0D800) or (charref > 0x0DFFF and charref < 0x0FFFE) or (charref > 0x0FFFF and charref < 0x00110000) ; } parser& m_parser; bool m_validating; bool m_validating_ns; bool m_has_dtd; XMLToken m_lookahead; std::string m_token; std::stack m_source; std::array m_buffer; std::array::iterator m_buffer_ptr = m_buffer.begin(); float m_version = 1.0f; encoding_type m_encoding = encoding_type::UTF8; bool m_standalone; // parser state bool m_external_subset = false; bool m_internal_subset = false; bool m_allow_peref = false; bool m_in_declsep = false; bool m_in_external_dtd = false; bool m_in_content = false; std::vector m_entities_on_stack; ns_state* m_ns; std::string m_root_element; doctype::entity_list m_parameter_entities; doctype::entity_list m_general_entities; doctype::element_list m_doctype; std::set m_notations; std::set m_ids; // attributes of type ID should be unique std::set m_unresolved_ids; // keep track of IDREFS that were not found yet std::unique_ptr m_xmlSpaceAttr; }; // -------------------------------------------------------------------- // some inlines inline void parser_imp::s(bool at_least_one) { if (at_least_one) match(XMLToken::Space); while (m_lookahead == XMLToken::Space) match(XMLToken::Space); } inline void parser_imp::eq() { s(); match(XMLToken::Eq); s(); } // -------------------------------------------------------------------- parser_imp::parser_imp(std::istream& data, parser& parser) : m_parser(parser), m_validating(true), m_has_dtd(false), m_lookahead(XMLToken::Eof) , m_encoding(encoding_type::ASCII), m_standalone(false), m_ns(nullptr) { push_data_source(new istream_data_source(data), false); m_encoding = m_source.top()->encoding(); // these entities are always recognized: m_general_entities.push_back(new doctype::general_entity("lt", "<")); m_general_entities.push_back(new doctype::general_entity("gt", ">")); m_general_entities.push_back(new doctype::general_entity("amp", "&")); m_general_entities.push_back(new doctype::general_entity("apos", "'")); m_general_entities.push_back(new doctype::general_entity("quot", """)); m_xmlSpaceAttr.reset(new doctype::attribute_("xml:space", doctype::AttributeType::Enumerated, { "preserve", "default" })); } parser_imp::~parser_imp() { while (not m_source.empty()) m_source.pop(); // there may be parameter_entity_data_source's left in the stack // as a result of a validation error/exception for (doctype::entity *e : m_parameter_entities) delete e; for (doctype::entity *e : m_general_entities) delete e; for (doctype::element_ *e : m_doctype) delete e; } const doctype::entity& parser_imp::get_general_entity(const std::string& name) const { auto e = std::find_if(m_general_entities.begin(), m_general_entities.end(), [name](auto e) { return e->name() == name; }); if (e == m_general_entities.end()) not_well_formed("undefined entity reference '" + name + "'"); if ((*e)->is_external() and m_standalone) not_valid("Document cannot be standalone since entity " + name + " is defined externally"); return **e; } const doctype::entity& parser_imp::get_parameter_entity(const std::string& name) const { auto e = find_if(m_parameter_entities.begin(), m_parameter_entities.end(), [name](auto e) { return e->name() == name; }); if (e == m_parameter_entities.end()) not_well_formed("Undefined parameter entity '" + m_token + '\''); return **e; } const doctype::element_ *parser_imp::get_element(const std::string& name) const { const doctype::element_ *result = nullptr; auto e = find_if(m_doctype.begin(), m_doctype.end(), [name](auto e) { return e->name() == name; }); if (e != m_doctype.end()) result = *e; return result; } unicode parser_imp::get_next_char() { unicode result = 0; if (m_buffer_ptr > m_buffer.begin()) // if buffer is not empty we already did all the validity checks result = *--m_buffer_ptr; if (result == 0) { while (not m_source.empty()) { try { result = m_source.top()->get_next_char(); } catch (source_exception& e) { not_well_formed(e.m_wmsg); } if (result == 0 and m_source.top().inserted()) { m_source.pop(); continue; } break; } } append(m_token, result); return result; } void parser_imp::retract() { assert(not m_token.empty()); assert(m_buffer_ptr < m_buffer.end()); *m_buffer_ptr++ = pop_last_char(m_token); } void parser_imp::match(XMLToken token) { if (m_lookahead != token) { std::string expected = describe_token(token); std::string found = describe_token(m_lookahead); not_well_formed( "Error parsing XML, expected '" + expected + "' but found '" + found + "' ('" + m_token + "')"); } if (m_in_content) m_lookahead = get_next_content(); else { m_lookahead = get_next_token(); if (m_lookahead == XMLToken::PEReference and not m_in_declsep) { if (m_allow_peref) pereference(); else not_well_formed("Invalid entity reference at this location"); } } } void parser_imp::not_well_formed(const std::string& msg) const { std::stringstream s; if (m_source.empty()) s << "Document not well-formed: " << msg; else s << "Document (line: " << m_source.top()->line_nr() << ") not well-formed: " << msg; throw not_wf_exception(s.str()); } void parser_imp::not_valid(const std::string& msg) const { if (m_validating) { std::stringstream s; if (m_source.empty()) s << "Document not valid: " << msg; else s << "Document (line: " << m_source.top()->line_nr() << ") not valid: " << msg; throw invalid_exception(s.str()); } else m_parser.report_invalidation(msg); } /* get_next_token is a hand optimised scanner for tokens in the input stream. */ parser_imp::XMLToken parser_imp::get_next_token() { enum State { state_Start = 0, state_WhiteSpace = 10, state_Tag = 20, state_String = 30, state_PERef = 40, state_HashName = 49, state_Name = 50, state_CommentOrDoctype = 60, state_Comment = 70, state_DocTypeDecl = 80, state_PI = 90, }; XMLToken token = XMLToken::Undef; unicode quote_char = 0; int state = state_Start; bool might_be_name = false; m_token.clear(); while (token == XMLToken::Undef) { unicode uc = get_next_char(); switch (state) { // start scanning. case state_Start: switch (uc) { case 0: token = XMLToken::Eof; break; case ' ': case '\t': case '\n': state = state_WhiteSpace; break; case '<': state = state_Tag; break; case '\'': case '"': { state = state_String; quote_char = uc; break; } case '%': state = state_PERef; break; case '#': state = state_HashName; break; case '=': token = XMLToken::Eq; break; case '?': token = XMLToken::QuestionMark; break; case '>': token = XMLToken::GreaterThan; break; case '[': token = XMLToken::OpenBracket; break; case ']': token = XMLToken::CloseBracket; break; case '(': token = XMLToken::OpenParenthesis; break; case ')': token = XMLToken::CloseParenthesis; break; // case '%': token = XMLToken::Percent; break; case '+': token = XMLToken::Plus; break; case '|': token = XMLToken::Pipe; break; case '*': token = XMLToken::Asterisk; break; case '/': token = XMLToken::Slash; break; case ',': token = XMLToken::Comma; break; default: if (is_name_start_char(uc)) { might_be_name = true; state = state_Name; } else if (is_name_char(uc)) state = state_Name; else if (is_char(uc)) token = XMLToken::Other; else not_well_formed("Unexpected character: " + ((uc < 128 and std::isprint(uc)) ? std::string(1, static_cast(uc)) : to_hex(uc)) ); break; } break; // collect all whitespace case state_WhiteSpace: if (uc != ' ' and uc != '\t' and uc != '\n') { retract(); token = XMLToken::Space; } break; // We scanned a < character, decide what to do next. case state_Tag: if (uc == '!') // comment or doctype thing state = state_CommentOrDoctype; else if (uc == '/') // end tag token = XMLToken::ETag; else if (uc == '?') // processing instruction state = state_PI; else // anything else { retract(); token = XMLToken::STag; } break; // So we had case state_Comment: if (uc == '-') token = XMLToken::Comment; else not_well_formed("Invalid formatted comment"); break; // scan for processing instructions case state_PI: if (not is_name_char(uc)) { retract(); // we treat the xml processing instruction separately. if (m_token.substr(2) == "xml") token = XMLToken::XMLDecl; else if (iequals(m_token.substr(2), "xml")) not_well_formed(" in text break; case ' ': case '\t': case '\n': case '\r': state = state_WhiteSpace; break; default: if (is_char(uc)) state = state_Content; // anything else else not_well_formed("Unexpected character in content: " + (std::isprint(uc) ? std::string(1, static_cast(uc)) : to_hex(uc)) ); break; } break; // collect all whitespace case state_WhiteSpace: if (not is_space(uc)) { retract(); token = XMLToken::Space; } break; // content. Only stop collecting character when uc is special case state_Content: if (uc == ']') state = state_Illegal; else if (uc == 0 or uc == '<' or uc == '&') { retract(); token = XMLToken::Content; } else if (not is_referrable_char(uc)) not_well_formed("Illegal character in content text"); break; // beginning of a tag? case state_Tag: if (uc == '/') token = XMLToken::ETag; else if (uc == '?') // processing instruction state = state_PI; else if (uc == '!') // comment or CDATA state = state_CommentOrCDATA; else { retract(); token = XMLToken::STag; } break; // processing instructions case state_PI: if (not is_name_char(uc)) { retract(); token = XMLToken::PI; } break; // comment or CDATA case state_CommentOrCDATA: if (uc == '-') // comment state = state_Comment; else if (uc == '[') state = state_CDATA; // CDATA else not_well_formed("invalid content"); break; case state_Comment: if (uc == '-') token = XMLToken::Comment; else not_well_formed("invalid content"); break; // CDATA (we parsed ') { token = XMLToken::CDSect; m_token = m_token.substr(9, m_token.length() - 12); } else if (uc == 0) not_well_formed("runaway cdata section"); else if (uc != ']') state = state_CDATA + 2; break; // reference, either a character reference or a general entity reference case state_Reference: if (uc == '#') state = state_Reference + 2; else if (is_name_start_char(uc)) state = state_Reference + 1; else not_well_formed("stray ampersand found in content"); break; case state_Reference + 1: if (not is_name_char(uc)) { if (uc != ';') not_well_formed("invalid entity found in content, missing semicolon?"); token = XMLToken::Reference; m_token = m_token.substr(1, m_token.length() - 2); } break; case state_Reference + 2: if (uc == 'x') state = state_Reference + 4; else if (uc >= '0' and uc <= '9') { charref = uc - '0'; state += 1; } else not_well_formed("invalid character reference"); break; case state_Reference + 3: if (uc >= '0' and uc <= '9') charref = charref * 10 + (uc - '0'); else if (uc == ';') { if (not is_referrable_char(charref)) not_well_formed("Illegal character in content text"); m_token.clear(); append(m_token, charref); token = XMLToken::CharRef; } else not_well_formed("invalid character reference"); break; case state_Reference + 4: if (uc >= 'a' and uc <= 'f') { charref = uc - 'a' + 10; state += 1; } else if (uc >= 'A' and uc <= 'F') { charref = uc - 'A' + 10; state += 1; } else if (uc >= '0' and uc <= '9') { charref = uc - '0'; state += 1; } else not_well_formed("invalid character reference"); break; case state_Reference + 5: if (uc >= 'a' and uc <= 'f') charref = (charref << 4) + (uc - 'a' + 10); else if (uc >= 'A' and uc <= 'F') charref = (charref << 4) + (uc - 'A' + 10); else if (uc >= '0' and uc <= '9') charref = (charref << 4) + (uc - '0'); else if (uc == ';') { if (not is_referrable_char(charref)) not_well_formed("Illegal character in content text"); m_token.clear(); append(m_token, charref); token = XMLToken::CharRef; } else not_well_formed("invalid character reference"); break; // ]]> is illegal case state_Illegal: if (uc == ']') state += 1; else { retract(); state = state_Content; } break; case state_Illegal + 1: if (uc == '>') not_well_formed("the sequence ']]>' is illegal in content text"); else if (uc != ']') { retract(); retract(); state = state_Content; } break; default: assert(false); not_well_formed("state reached that should not be reachable"); } } //#if DEBUG // if (VERBOSE) // std::cout << "content: " << describe_token(token) << " (" << m_token << ')' << std::endl; //#endif return token; } float parser_imp::parse_version() { float result = -1; if (m_token.length() >= 3) { auto i = m_token.begin(); if (*i == '1' and *(i + 1) == '.') { result = 1.0f; float dec = 10; for (i += 2; i != m_token.end(); ++i) { if (*i < '0' or *i > '9') { result = -1; break; } result += (*i - '0') / dec; dec += 10; } } } if (result < 1.0 or result >= 2.0) not_well_formed("Invalid version specified: '" + m_token + "'"); return result; } void parser_imp::parse(bool validate, bool validate_ns) { m_validating = validate; m_validating_ns = validate_ns; m_lookahead = get_next_token(); prolog(); const doctype::element_ *e = get_element(m_root_element); if (m_has_dtd and e == nullptr and m_validating) not_valid("Element '" + m_root_element + "' is not defined in DTD"); if (e) { doctype::content_spec_element allowed(m_root_element); doctype::validator valid(&allowed); element(valid); } else { doctype::content_spec_any allowed; doctype::validator valid(&allowed); element(valid); } misc(); if (m_lookahead != XMLToken::Eof) not_well_formed("garbage at end of file"); if (not m_unresolved_ids.empty()) { not_valid("document contains references to the following undefined ID's: '" + join(m_unresolved_ids, ", ") + "'"); } } void parser_imp::prolog() { xml_decl(); misc(); if (m_lookahead == XMLToken::DocType) { doctypedecl(); misc(); } else if (m_validating) not_valid("document type declaration is missing"); } void parser_imp::xml_decl() { if (m_lookahead == XMLToken::XMLDecl) { encoding_type encoding = m_encoding; if (m_encoding == encoding_type::UTF8) m_source.top()->encoding(encoding_type::ASCII); match(XMLToken::XMLDecl); s(true); if (m_token != "version") not_well_formed("expected a version attribute in XML declaration"); match(XMLToken::Name); eq(); auto version = parse_version(); m_version = version; if (m_version >= 2.0f or m_version < 1.0f) not_well_formed("This library only supports XML version 1.0 or 1.1"); m_source.top()->version(version); match(XMLToken::String); if (m_lookahead == XMLToken::Space) { s(true); if (m_token == "encoding") { match(XMLToken::Name); eq(); to_lower(m_token); if (m_token == "us-ascii") encoding = encoding_type::ASCII; else if (m_token == "iso-8859-1") encoding = encoding_type::ISO88591; else if (m_token == "utf-8") encoding = encoding_type::UTF8; else if (m_token == "utf-16") { if (m_source.top()->encoding() != encoding_type::UTF16LE and m_source.top()->encoding() != encoding_type::UTF16BE) not_well_formed("Inconsistent encoding attribute in XML declaration"); encoding = m_source.top()->encoding(); } else not_well_formed("Unsupported encoding value '" + m_token + "'"); match(XMLToken::String); s(); } if (m_token == "standalone") { match(XMLToken::Name); eq(); if (m_token != "yes" and m_token != "no") not_well_formed("Invalid XML declaration, standalone value should be either yes or no"); m_standalone = (m_token == "yes"); match(XMLToken::String); s(); } } m_encoding = encoding; m_source.top()->encoding(encoding); match(XMLToken::QuestionMark); match(XMLToken::GreaterThan); m_parser.xml_decl(m_encoding, m_standalone, m_version); } else m_encoding = m_source.top()->encoding(); } void parser_imp::text_decl() { if (m_lookahead == XMLToken::XMLDecl) { encoding_type encoding = m_source.top()->encoding(); if (encoding == encoding_type::UTF8 and not m_source.top()->has_bom()) m_source.top()->encoding(encoding_type::ISO88591); match(XMLToken::XMLDecl); s(true); if (m_token == "version") { match(XMLToken::Name); eq(); auto version = parse_version(); if (version > m_version) not_well_formed("Version mismatch between document and external entity"); match(XMLToken::String); s(m_version == 1.0); } if (m_token != "encoding") { if (m_version == 1.0) not_well_formed("encoding attribute is mandatory in text declaration"); } else { match(XMLToken::Name); eq(); match(XMLToken::String); s(); } m_source.top()->encoding(encoding); match(XMLToken::QuestionMark); match(XMLToken::GreaterThan); } } void parser_imp::misc() { for (;;) { switch (m_lookahead) { case XMLToken::Space: s(); continue; case XMLToken::Comment: comment(); continue; case XMLToken::PI: pi(); continue; default:; } break; } } void parser_imp::doctypedecl() { match(XMLToken::DocType); m_has_dtd = true; s(true); auto name = m_token; match(XMLToken::Name); m_root_element = name; std::unique_ptr dtd; if (m_lookahead == XMLToken::Space) { s(true); if (m_lookahead == XMLToken::Name) { std::string pubid, uri; if (m_token == "SYSTEM") { match(XMLToken::Name); s(true); uri = m_token; if (not is_valid_system_literal(uri)) not_well_formed("invalid system literal"); } else if (m_token == "PUBLIC") { match(XMLToken::Name); s(true); pubid = m_token; match(XMLToken::String); // validate the public ID if (not is_valid_public_id(pubid)) not_well_formed("Invalid public ID"); s(true); uri = m_token; } else not_well_formed("Expected external id starting with either SYSTEM or PUBLIC"); match(XMLToken::String); dtd.reset(get_data_source(pubid, uri)); if (m_validating and not dtd) not_valid("Could not load DTD " + uri); m_parser.doctype_decl(m_root_element, pubid, uri); } s(); } if (m_lookahead == XMLToken::OpenBracket) { match(XMLToken::OpenBracket); intsubset(); match(XMLToken::CloseBracket); s(); } // internal subset takes precedence over external subset, so // if the external subset is defined, include it here. if (dtd.get() != nullptr) { push_data_source(dtd.release(), false); m_external_subset = true; m_in_external_dtd = true; m_lookahead = get_next_token(); text_decl(); extsubset(); match(XMLToken::Eof); pop_data_source(); m_in_external_dtd = false; } match(XMLToken::GreaterThan); // test if all ndata references can be resolved for (const doctype::entity *e : m_general_entities) { if (e->is_parsed() == false and m_notations.count(e->get_ndata()) == 0) not_valid("Undefined NOTATION '" + e->get_ndata() + "'"); } // and the notations in the doctype attlists for (const doctype::element_ *element : m_doctype) { for (const doctype::attribute_ *attr : element->get_attributes()) { if (attr->get_type() != doctype::AttributeType::Notation) continue; for (const std::string& n : attr->get_enums()) { if (m_notations.count(n) == 0) not_valid("Undefined NOTATION '" + n + "'"); } } } } void parser_imp::pereference() { const doctype::entity& e = get_parameter_entity(m_token); push_data_source(new parameter_entity_data_source(e.get_replacement(), e.get_path()), true); match(XMLToken::PEReference); } void parser_imp::intsubset() { save_state state_intsubset(m_internal_subset, true); save_state state_allow_peref(m_allow_peref, true); for (;;) { switch (m_lookahead) { case XMLToken::Element: case XMLToken::AttList: case XMLToken::Entity: case XMLToken::Notation: markup_decl(); continue; case XMLToken::PI: pi(); continue; case XMLToken::Comment: comment(); continue; case XMLToken::Space: case XMLToken::PEReference: declsep(); continue; default:; } break; } } void parser_imp::declsep() { save_state state_declsep(m_in_declsep, true); switch (m_lookahead) { case XMLToken::PEReference: { const doctype::entity& e = get_parameter_entity(m_token); match(XMLToken::PEReference); push_data_source(new parameter_entity_data_source(e.get_replacement(), e.get_path()), false); m_lookahead = get_next_token(); extsubset(); match(XMLToken::Eof); pop_data_source(); break; } case XMLToken::Space: s(); break; default:; } } void parser_imp::extsubset() { save_state state_extsubset(m_external_subset, true); save_state state_allow_peref(m_allow_peref, true); for (;;) { switch (m_lookahead) { case XMLToken::Element: case XMLToken::AttList: case XMLToken::Entity: case XMLToken::Notation: markup_decl(); continue; case XMLToken::IncludeIgnore: conditionalsect(); continue; case XMLToken::PI: pi(); continue; case XMLToken::Comment: comment(); continue; case XMLToken::Space: case XMLToken::PEReference: declsep(); continue; default:; } break; } } void parser_imp::conditionalsect() { valid_nesting_validator check(*m_source.top()); match(XMLToken::IncludeIgnore); s(); bool include = false; if (m_token == "INCLUDE") include = true; else if (m_token == "IGNORE") include = false; else if (m_lookahead == XMLToken::Name) not_well_formed("Unexpected literal '" + m_token + "'"); match(XMLToken::Name); check.check(*m_source.top()); s(); if (include) { match(XMLToken::OpenBracket); extsubset(); match(XMLToken::CloseBracket); match(XMLToken::CloseBracket); check.check(*m_source.top()); match(XMLToken::GreaterThan); } else { ignoresectcontents(); check.check(*m_source.top()); m_lookahead = get_next_token(); } } void parser_imp::ignoresectcontents() { // yet another tricky routine, skip int state = 0; bool done = false; while (not done) { unicode ch = get_next_char(); if (ch == 0) not_well_formed("runaway IGNORE section"); switch (state) { case 0: if (ch == ']') state = 1; else if (ch == '<') state = 10; break; case 1: if (ch == ']') state = 2; else { retract(); state = 0; } break; case 2: if (ch == '>') done = true; else if (ch != ']') { retract(); state = 0; } break; case 10: if (ch == '!') state = 11; else { retract(); state = 0; } break; case 11: if (ch == '[') { ignoresectcontents(); state = 0; } else { retract(); state = 0; } break; } } } void parser_imp::markup_decl() { save_state state_allow_peref(m_allow_peref, m_external_subset); switch (m_lookahead) { case XMLToken::Element: element_decl(); break; case XMLToken::AttList: attlist_decl(); break; case XMLToken::Entity: entity_decl(); break; case XMLToken::Notation: notation_decl(); break; case XMLToken::PI: pi(); break; case XMLToken::Comment: comment(); break; case XMLToken::Space: s(); break; default:; } } void parser_imp::element_decl() { valid_nesting_validator check(*m_source.top()); match(XMLToken::Element); s(true); std::string name = m_token; if (starts_with(name, "xmlns:")) not_well_formed("Element names should not start with xmlns:"); auto e = std::find_if(m_doctype.begin(), m_doctype.end(), [name](auto e) { return e->name() == name; }); if (e == m_doctype.end()) e = m_doctype.insert(m_doctype.end(), new doctype::element_(name, true, m_in_external_dtd)); else if ((*e)->is_declared()) not_valid("duplicate element declaration for element '" + name + "'"); match(XMLToken::Name); s(true); contentspec(**e); s(); check.check(*m_source.top()); match(XMLToken::GreaterThan); } void parser_imp::contentspec(doctype::element_& element) { if (m_lookahead == XMLToken::Name) { if (m_token == "EMPTY") element.set_allowed(new doctype::content_spec_empty); else if (m_token == "ANY") element.set_allowed(new doctype::content_spec_any); else not_well_formed("Invalid element content specification"); match(XMLToken::Name); } else { valid_nesting_validator check(*m_source.top()); match(XMLToken::OpenParenthesis); std::unique_ptr allowed; s(); bool mixed = false; bool more = false; if (m_lookahead == XMLToken::PCData) // Mixed { mixed = true; match(m_lookahead); s(); std::set seen; while (m_lookahead == XMLToken::Pipe) { more = true; match(XMLToken::Pipe); s(); if (seen.count(m_token) > 0) not_valid("no duplicates allowed in mixed content for element declaration"); seen.insert(m_token); match(XMLToken::Name); s(); } doctype::content_spec_choice *choice = new doctype::content_spec_choice(true); for (auto& c : seen) choice->add(new doctype::content_spec_element(c)); allowed.reset(choice); } else // children { allowed.reset(cp()); s(); if (m_lookahead == XMLToken::Comma) { doctype::content_spec_seq *seq = new doctype::content_spec_seq(allowed.release()); allowed.reset(seq); more = true; do { match(m_lookahead); s(); seq->add(cp()); s(); } while (m_lookahead == XMLToken::Comma); } else if (m_lookahead == XMLToken::Pipe) { doctype::content_spec_choice *choice = new doctype::content_spec_choice(allowed.release(), false); allowed.reset(choice); more = true; do { match(m_lookahead); s(); choice->add(cp()); s(); } while (m_lookahead == XMLToken::Pipe); } } s(); check.check(*m_source.top()); match(XMLToken::CloseParenthesis); if (m_lookahead == XMLToken::Asterisk) { allowed.reset(new doctype::content_spec_repeated(allowed.release(), '*')); match(XMLToken::Asterisk); } else if (more) { if (mixed) { allowed.reset(new doctype::content_spec_repeated(allowed.release(), '*')); match(XMLToken::Asterisk); } else if (m_lookahead == XMLToken::Plus) { allowed.reset(new doctype::content_spec_repeated(allowed.release(), '+')); match(XMLToken::Plus); } else if (m_lookahead == XMLToken::QuestionMark) { allowed.reset(new doctype::content_spec_repeated(allowed.release(), '?')); match(XMLToken::QuestionMark); } } element.set_allowed(allowed.release()); } } doctype::content_spec_ptr parser_imp::cp() { std::unique_ptr result; if (m_lookahead == XMLToken::OpenParenthesis) { valid_nesting_validator check(*m_source.top()); match(XMLToken::OpenParenthesis); s(); result.reset(cp()); s(); if (m_lookahead == XMLToken::Comma) { doctype::content_spec_seq *seq = new doctype::content_spec_seq(result.release()); result.reset(seq); do { match(m_lookahead); s(); seq->add(cp()); s(); } while (m_lookahead == XMLToken::Comma); } else if (m_lookahead == XMLToken::Pipe) { doctype::content_spec_choice *choice = new doctype::content_spec_choice(result.release(), false); result.reset(choice); do { match(m_lookahead); s(); choice->add(cp()); s(); } while (m_lookahead == XMLToken::Pipe); } s(); check.check(*m_source.top()); match(XMLToken::CloseParenthesis); } else { std::string name = m_token; match(XMLToken::Name); result.reset(new doctype::content_spec_element(name)); } switch (m_lookahead) { case XMLToken::Asterisk: result.reset(new doctype::content_spec_repeated(result.release(), '*')); match(XMLToken::Asterisk); break; case XMLToken::Plus: result.reset(new doctype::content_spec_repeated(result.release(), '+')); match(XMLToken::Plus); break; case XMLToken::QuestionMark: result.reset(new doctype::content_spec_repeated(result.release(), '?')); match(XMLToken::QuestionMark); break; default:; } return result.release(); } void parser_imp::entity_decl() { match(XMLToken::Entity); s(true); if (m_lookahead == XMLToken::Percent) // PEDecl parameter_entity_decl(); else general_entity_decl(); } void parser_imp::parameter_entity_decl() { match(XMLToken::Percent); s(true); std::string name = m_token; match(XMLToken::Name); if (m_validating_ns and name.find(':') != std::string::npos) not_well_formed("Entity names should not contain a colon"); if (starts_with(name, "xmlns:")) not_well_formed("Entity names should not start with xmlns:"); s(true); std::string path; std::string value; { // PEDef is either a EntityValue... if (m_lookahead == XMLToken::String) { value = m_token; match(XMLToken::String); parse_parameter_entity_declaration(value); } else // ... or an external id { std::tie(path, value) = read_external_id(); match(XMLToken::String); } s(); } match(XMLToken::GreaterThan); if (find_if(m_parameter_entities.begin(), m_parameter_entities.end(), [name](auto e) { return e->name() == name; }) == m_parameter_entities.end()) { m_parameter_entities.push_back(new doctype::parameter_entity(name, value, path)); } } void parser_imp::general_entity_decl() { std::string name = m_token; match(XMLToken::Name); s(true); if (m_validating_ns and name.find(':') != std::string::npos) not_well_formed("Entity names should not contain a colon"); if (starts_with(name, "xmlns:")) not_well_formed("Entity names should not start with xmlns:"); std::string value, ndata; bool external = false; bool parsed = true; if (m_lookahead == XMLToken::String) { value = m_token; match(XMLToken::String); parse_general_entity_declaration(value); } else // ... or an ExternalID { std::tie(std::ignore, value) = read_external_id(); match(XMLToken::String); external = true; if (m_lookahead == XMLToken::Space) { s(true); if (m_lookahead == XMLToken::Name and m_token == "NDATA") { match(XMLToken::Name); s(true); parsed = false; ndata = m_token; match(XMLToken::Name); } } } s(); match(XMLToken::GreaterThan); if (std::find_if(m_general_entities.begin(), m_general_entities.end(), [name](auto e) { return e->name() == name; }) == m_general_entities.end()) { m_general_entities.push_back(new doctype::general_entity(name, value, external, parsed)); if (not parsed) m_general_entities.back()->set_ndata(ndata); if (m_in_external_dtd) m_general_entities.back()->set_externally_defined(true); } } void parser_imp::attlist_decl() { match(XMLToken::AttList); s(true); std::string element = m_token; match(XMLToken::Name); auto dte = find_if(m_doctype.begin(), m_doctype.end(), [element](auto e) { return e->name() == element; }); if (dte == m_doctype.end()) dte = m_doctype.insert(m_doctype.end(), new doctype::element_(element, false, m_in_external_dtd)); // attribute defaults while (m_lookahead == XMLToken::Space) { s(true); if (m_lookahead != XMLToken::Name) break; std::string name = m_token; match(XMLToken::Name); s(true); std::unique_ptr attribute; // att type: several possibilities: if (m_lookahead == XMLToken::OpenParenthesis) // enumeration { std::vector enums; match(m_lookahead); s(); enums.push_back(m_token); if (m_lookahead == XMLToken::Name) match(XMLToken::Name); else match(XMLToken::NMToken); s(); while (m_lookahead == XMLToken::Pipe) { match(XMLToken::Pipe); s(); if (find(enums.begin(), enums.end(), m_token) != enums.end()) not_valid("Duplicate token in enumerated attribute declaration ('" + m_token + "')"); enums.push_back(m_token); if (m_lookahead == XMLToken::Name) match(XMLToken::Name); else match(XMLToken::NMToken); s(); } s(); match(XMLToken::CloseParenthesis); attribute.reset(new doctype::attribute_(name, doctype::AttributeType::Enumerated, enums)); } else { std::string type = m_token; match(XMLToken::Name); std::vector notations; if (type == "CDATA") attribute.reset(new doctype::attribute_(name, doctype::AttributeType::CDATA)); else if (type == "ID") attribute.reset(new doctype::attribute_(name, doctype::AttributeType::ID)); else if (type == "IDREF") attribute.reset(new doctype::attribute_(name, doctype::AttributeType::IDREF)); else if (type == "IDREFS") attribute.reset(new doctype::attribute_(name, doctype::AttributeType::IDREFS)); else if (type == "ENTITY") attribute.reset(new doctype::attribute_(name, doctype::AttributeType::ENTITY)); else if (type == "ENTITIES") attribute.reset(new doctype::attribute_(name, doctype::AttributeType::ENTITIES)); else if (type == "NMTOKEN") attribute.reset(new doctype::attribute_(name, doctype::AttributeType::NMTOKEN)); else if (type == "NMTOKENS") attribute.reset(new doctype::attribute_(name, doctype::AttributeType::NMTOKENS)); else if (type == "NOTATION") { s(true); match(XMLToken::OpenParenthesis); s(); notations.push_back(m_token); match(XMLToken::Name); s(); while (m_lookahead == XMLToken::Pipe) { match(XMLToken::Pipe); s(); if (find(notations.begin(), notations.end(), m_token) != notations.end()) not_valid("Duplicate token in enumerated attribute declaration ('" + m_token + "')"); notations.push_back(m_token); match(XMLToken::Name); s(); } s(); match(XMLToken::CloseParenthesis); attribute.reset(new doctype::attribute_(name, doctype::AttributeType::Notation, notations)); } else not_well_formed("invalid attribute type"); } // att def s(true); std::string value; switch (m_lookahead) { case XMLToken::Required: match(m_lookahead); attribute->set_default(doctype::AttributeDefault::Required, ""); break; case XMLToken::Implied: match(m_lookahead); attribute->set_default(doctype::AttributeDefault::Implied, ""); break; case XMLToken::Fixed: { match(m_lookahead); if (attribute->get_type() == doctype::AttributeType::ID) not_valid("the default declaration for an ID attribute declaration should be #IMPLIED or #REQUIRED"); s(true); std::string token_value = m_token; normalize_attribute_value(token_value, attribute->get_type() == doctype::AttributeType::CDATA); if (not token_value.empty() and not attribute->validate_value(token_value, m_general_entities)) { not_valid("default value '" + token_value + "' for attribute '" + name + "' is not valid"); } attribute->set_default(doctype::AttributeDefault::Fixed, token_value); match(XMLToken::String); break; } default: { if (attribute->get_type() == doctype::AttributeType::ID) not_valid("the default declaration for an ID attribute declaration should be #IMPLIED or #REQUIRED"); if (m_standalone) not_valid("Document cannot be standalone since there is a default value for an attribute"); std::string token_value = m_token; normalize_attribute_value(token_value, attribute->get_type() == doctype::AttributeType::CDATA); collapse_spaces(token_value); if (not token_value.empty() and not attribute->validate_value(token_value, m_general_entities)) { not_valid("default value '" + token_value + "' for attribute '" + name + "' is not valid"); } attribute->set_default(doctype::AttributeDefault::None, token_value); match(XMLToken::String); break; } } if (attribute->get_type() == doctype::AttributeType::ID) { const doctype::attribute_list& atts = (*dte)->get_attributes(); if (std::find_if(atts.begin(), atts.end(), [](auto a) { return a->get_type() == doctype::AttributeType::ID; }) != atts.end()) not_valid("only one attribute per element can have the ID type"); } attribute->set_external(m_in_external_dtd); // attribute->version(m_version); (*dte)->add_attribute(attribute.release()); } match(XMLToken::GreaterThan); } void parser_imp::notation_decl() { match(XMLToken::Notation); s(true); std::string name = m_token, pubid, sysid; if (m_validating_ns and name.find(':') != std::string::npos) not_well_formed("Notation names should not contain a colon"); if (m_notations.count(name) > 0) not_valid("notation names should be unique"); m_notations.insert(name); match(XMLToken::Name); s(true); if (m_token == "SYSTEM") { match(XMLToken::Name); s(true); sysid = m_token; match(XMLToken::String); if (not is_valid_system_literal(sysid)) not_well_formed("invalid system literal"); } else if (m_token == "PUBLIC") { match(XMLToken::Name); s(true); pubid = m_token; match(XMLToken::String); // validate the public ID if (not is_valid_public_id(pubid)) not_well_formed("Invalid public ID"); s(); if (m_lookahead == XMLToken::String) { sysid = m_token; match(XMLToken::String); } } else not_well_formed("Expected either SYSTEM or PUBLIC"); s(); match(XMLToken::GreaterThan); collapse_spaces(sysid); replace_all(pubid, "\t", " "); replace_all(pubid, "\n", " "); collapse_spaces(pubid); m_parser.notation_decl(name, sysid, pubid); } data_source* parser_imp::get_data_source(const std::string& pubid, std::string uri) { data_source *result = nullptr; std::istream *is = m_parser.external_entity_ref(m_source.top()->base(), pubid, uri); if (is != nullptr) { result = new istream_data_source(is); std::string::size_type s = uri.rfind('/'); if (s == std::string::npos) result->base(m_source.top()->base()); else { uri.erase(s, std::string::npos); if (is_absolute_path(uri)) result->base(uri); else result->base(m_source.top()->base() + '/' + uri); } } return result; } std::tuple parser_imp::read_external_id() { std::string result; std::string path; std::string pubid, uri; if (m_token == "SYSTEM") { match(XMLToken::Name); s(true); uri = m_token; if (not is_valid_system_literal(uri)) not_well_formed("invalid system literal"); } else if (m_token == "PUBLIC") { match(XMLToken::Name); s(true); pubid = m_token; match(XMLToken::String); // validate the public ID if (not is_valid_public_id(pubid)) not_well_formed("Invalid public ID"); s(true); uri = m_token; } else not_well_formed("Expected external id starting with either SYSTEM or PUBLIC"); std::unique_ptr data(get_data_source(pubid, uri)); if (data) { push_data_source(data.release(), false); path = m_source.top()->base(); m_lookahead = get_next_token(); text_decl(); if (m_lookahead != XMLToken::Eof) { result = m_token; while (m_buffer_ptr > m_buffer.begin()) append(result, *--m_buffer_ptr); while (unicode ch = m_source.top()->get_next_char()) append(result, ch); } pop_data_source(); } return std::make_tuple(path, result); } void parser_imp::parse_parameter_entity_declaration(std::string& s) { std::string result; int state = 0; unicode charref = 0; std::string name; int open = 0; for (std::string::const_iterator i = s.begin(); i != s.end(); ++i) { unicode c = *i; switch (state) { case 0: if (c == '&') state = 1; else if (c == '%') { if (m_allow_peref) { name.clear(); state = 20; } else not_well_formed("parameter entities may not occur in declarations that are not in an external subset"); } else if (c == '<') { ++open; append(result, c); } else if (c == '>') { --open; append(result, c); } else if (not is_char(c)) not_well_formed("Invalid character in entity value"); else append(result, c); break; case 1: if (c == '#') state = 2; else { result += '&'; append(result, c); state = 0; } break; case 2: if (c == 'x') state = 4; else if (c >= '0' and c <= '9') { charref = c - '0'; state = 3; } else not_well_formed("invalid character reference"); break; case 3: if (c >= '0' and c <= '9') charref = charref * 10 + (c - '0'); else if (c == ';') { if (not is_referrable_char(charref)) not_well_formed("Illegal character referenced: " + to_hex(charref) + '\''); append(result, charref); state = 0; } else not_well_formed("invalid character reference"); break; case 4: if (c >= 'a' and c <= 'f') { charref = c - 'a' + 10; state = 5; } else if (c >= 'A' and c <= 'F') { charref = c - 'A' + 10; state = 5; } else if (c >= '0' and c <= '9') { charref = c - '0'; state = 5; } else not_well_formed("invalid character reference"); break; case 5: if (c >= 'a' and c <= 'f') charref = (charref << 4) + (c - 'a' + 10); else if (c >= 'A' and c <= 'F') charref = (charref << 4) + (c - 'A' + 10); else if (c >= '0' and c <= '9') charref = (charref << 4) + (c - '0'); else if (c == ';') { if (not is_referrable_char(charref)) not_well_formed("Illegal character referenced: '" + to_hex(charref) + '\''); append(result, charref); state = 0; } else not_well_formed("invalid character reference"); break; case 20: if (c == ';') { const doctype::entity& e = get_parameter_entity(name); result += e.get_replacement(); state = 0; } else if (is_name_char(c)) append(name, c); else not_well_formed("invalid parameter entity reference"); break; default: assert(false); not_well_formed("invalid state"); } } if (state != 0) not_well_formed("invalid reference"); if (open != 0) not_valid("invalid reference"); swap(s, result); } // parse out the general and parameter entity references in a value std::string // for a general entity reference which is about to be stored. void parser_imp::parse_general_entity_declaration(std::string& s) { std::string result; int state = 0; unicode charref = 0; std::string name; auto sp = s.begin(); auto se = s.end(); while (sp < se) { unicode c; std::tie(c, sp) = get_first_char(sp, se); switch (state) { case 0: if (c == '&') state = 1; else if (c == '%') { if (m_allow_peref) { name.clear(); state = 20; } else not_well_formed("parameter entities may not occur in declarations that are not in an external subset"); } else if (not is_char(c)) not_well_formed("Invalid character in entity value"); else append(result, c); break; case 1: if (c == '#') state = 2; else if (is_name_start_char(c)) { name.clear(); append(name, c); state = 10; } break; case 2: if (c == 'x') state = 4; else if (c >= '0' and c <= '9') { charref = c - '0'; state = 3; } else not_well_formed("invalid character reference"); break; case 3: if (c >= '0' and c <= '9') charref = charref * 10 + (c - '0'); else if (c == ';') { if (not is_referrable_char(charref)) not_well_formed("Illegal character referenced: '" + to_hex(charref) + '\''); append(result, charref); state = 0; } else not_well_formed("invalid character reference"); break; case 4: if (c >= 'a' and c <= 'f') { charref = c - 'a' + 10; state = 5; } else if (c >= 'A' and c <= 'F') { charref = c - 'A' + 10; state = 5; } else if (c >= '0' and c <= '9') { charref = c - '0'; state = 5; } else not_well_formed("invalid character reference"); break; case 5: if (c >= 'a' and c <= 'f') charref = (charref << 4) + (c - 'a' + 10); else if (c >= 'A' and c <= 'F') charref = (charref << 4) + (c - 'A' + 10); else if (c >= '0' and c <= '9') charref = (charref << 4) + (c - '0'); else if (c == ';') { if (not is_referrable_char(charref)) not_well_formed("Illegal character referenced: '" + to_hex(charref) + '\''); append(result, charref); state = 0; } else not_well_formed("invalid character reference"); break; case 10: if (c == ';') { result += '&'; result += name; result += ';'; state = 0; } else if (is_name_char(c)) append(name, c); else not_well_formed("invalid entity reference"); break; case 20: if (c == ';') { const doctype::entity& e = get_parameter_entity(name); result += e.get_replacement(); state = 0; } else if (is_name_char(c)) append(name, c); else not_well_formed("invalid parameter entity reference"); break; default: assert(false); not_well_formed("invalid state"); } } if (state != 0) not_well_formed("invalid reference"); swap(s, result); } std::string parser_imp::normalize_attribute_value() { std::string result; unicode charref = 0; std::string name; enum State { state_Start, state_ReferenceStart, state_CharReferenceStart, state_HexCharReference, state_HexCharReference2, state_DecCharReference, state_EntityReference, } state = state_Start; for (;;) { unicode c = get_next_char(); if (c == 0) break; if (c == '<') not_well_formed("Attribute values may not contain '<' character"); switch (state) { case state_Start: if (c == ' ' or c == '\t' or c == '\r' or c == '\n') result += ' '; else if (c == '&') state = state_ReferenceStart; else append(result, c); break; case state_ReferenceStart: if (c == '#') state = state_CharReferenceStart; else if (is_name_start_char(c)) { name.clear(); append(name, c); state = state_EntityReference; } else not_well_formed("invalid reference found in attribute value"); break; case state_CharReferenceStart: if (c == 'x') state = state_HexCharReference; else if (c >= '0' and c <= '9') { charref = c - '0'; state = state_DecCharReference; } else not_well_formed("invalid character reference"); break; case state_DecCharReference: if (c >= '0' and c <= '9') charref = charref * 10 + (c - '0'); else if (c == ';') { if (not is_referrable_char(charref)) not_well_formed("Illegal character referenced: '" + to_hex(charref) + '\''); append(result, charref); state = state_Start; } else not_well_formed("invalid character reference"); break; case state_HexCharReference: if (c >= 'a' and c <= 'f') { charref = c - 'a' + 10; state = state_HexCharReference2; } else if (c >= 'A' and c <= 'F') { charref = c - 'A' + 10; state = state_HexCharReference2; } else if (c >= '0' and c <= '9') { charref = c - '0'; state = state_HexCharReference2; } else not_well_formed("invalid character reference"); break; case state_HexCharReference2: if (c >= 'a' and c <= 'f') charref = (charref << 4) + (c - 'a' + 10); else if (c >= 'A' and c <= 'F') charref = (charref << 4) + (c - 'A' + 10); else if (c >= '0' and c <= '9') charref = (charref << 4) + (c - '0'); else if (c == ';') { if (not is_referrable_char(charref)) not_well_formed("Illegal character referenced: '" + to_hex(charref) + '\''); append(result, charref); state = state_Start; } else not_well_formed("invalid character reference"); break; case state_EntityReference: if (c == ';') { if (std::find(m_entities_on_stack.begin(), m_entities_on_stack.end(), name) != m_entities_on_stack.end()) not_well_formed("infinite recursion in nested entity references"); m_entities_on_stack.push_back(name); const doctype::entity& e = get_general_entity(name); if (e.is_external()) not_well_formed("attribute value may not contain external entity reference"); if (e.is_externally_defined() and m_standalone) not_well_formed("document marked as standalone but an external entity is referenced"); push_data_source(new entity_data_source(e.get_replacement(), m_source.top()->base()), false); std::string replacement = normalize_attribute_value(); result += replacement; state = state_Start; m_entities_on_stack.pop_back(); } else if (is_name_char(c)) append(name, c); else not_well_formed("invalid entity reference"); break; default: assert(false); not_well_formed("invalid state"); } } if (state != state_Start) not_well_formed("invalid reference"); m_source.pop(); return result; } void parser_imp::collapse_spaces(std::string& s) { auto i = s.begin(), o = s.begin();; bool space = true; while (i != s.end()) { if (*i == ' ') { if (not space) *o++ = ' '; ++i; space = true; } else { *o++ = *i++; space = false; } } if (space and o != s.begin()) --o; s.erase(o, s.end()); } void parser_imp::element(doctype::validator& valid) { save_state in_content(m_in_content, false); match(XMLToken::STag); std::string name = m_token; match(XMLToken::Name); if (not valid.allow(name)) not_valid("element '" + name + "' not expected at this position"); const doctype::element_ *dte = get_element(name); if (m_has_dtd and dte == nullptr and m_validating) not_valid("Element '" + name + "' is not defined in DTD"); doctype::validator sub_valid(dte); std::list attrs; ns_state ns(this); std::set seen; for (;;) { if (m_lookahead != XMLToken::Space) break; s(true); if (m_lookahead != XMLToken::Name) break; std::string attr_name = m_token; match(XMLToken::Name); if (seen.count(attr_name) > 0) not_well_formed("multiple values for attribute '" + attr_name + "'"); seen.insert(attr_name); eq(); const doctype::attribute_ *dta = nullptr; if (dte != nullptr) dta = dte->get_attribute(attr_name); if (dta == nullptr and not m_validating and attr_name == "xml:space") dta = m_xmlSpaceAttr.get(); if (dta == nullptr and m_validating) not_valid("undeclared attribute '" + attr_name + "'"); std::string attr_value = normalize_attribute_value(m_token, dta == nullptr or dta->get_type() == doctype::AttributeType::CDATA); match(XMLToken::String); if (m_validating and dta != nullptr and dta->get_default_type() == doctype::AttributeDefault::Fixed and attr_value != std::get<1>(dta->get_default())) { not_valid("invalid value specified for fixed attribute"); } // had a crash suddenly here deep down in starts_with... if (attr_name == "xmlns" or attr_name.compare(0, 6, "xmlns:", 6) == 0) // namespace support { if (not ((m_version > 1.0f and attr_value.empty()) or is_valid_url(attr_value))) not_well_formed("Not a valid namespace URI: " + attr_value); if (not (m_version > 1.0f and attr_value.empty()) and ns.is_known_uri(attr_value)) not_well_formed("This uri is repeated: " + attr_value); if (attr_value == "http://www.w3.org/XML/1998/namespace" or attr_value == "http://www.w3.org/2000/xmlns/") not_well_formed("The xml namespace is reserved"); if (attr_name.length() == 5) { ns.default_ns(attr_value); m_parser.start_namespace_decl("", attr_value); } else if (attr_name.length() == 6) not_well_formed("Invalid xmlns: "); else { std::string prefix = attr_name.substr(6); if (iequals(prefix, "xml") or iequals(prefix, "xmlns")) not_well_formed(prefix + " is a preserved prefix"); if (m_version > 1.0f and attr_value.empty()) ns.unbind(prefix); else { ns.bind(prefix, attr_value); m_parser.start_namespace_decl(prefix, attr_value); } } // if (not attr_value.empty()) // ns.m_known_uris.insert(attr_value); } else { bool id = (attr_name == "xml:id"); if (dta != nullptr) { std::string v(attr_value); if (not dta->validate_value(attr_value, m_general_entities)) { if (dta == m_xmlSpaceAttr.get()) not_well_formed("invalid value ('" + attr_value + "') for attribute " + attr_name + ""); else not_valid("invalid value ('" + attr_value + "') for attribute " + attr_name + ""); } if (m_validating and m_standalone and dta->is_external() and v != attr_value) not_valid("attribute value modified as a result of an external defined attlist declaration, which is not valid in a standalone document"); if (dta->get_type() == doctype::AttributeType::ID) { id = true; if (m_validating_ns and attr_value.find(':') != std::string::npos) not_valid("ID attribute value should not contain a colon"); if (m_ids.count(attr_value) > 0) { not_valid("attribute value ('" + attr_value + "') for attribute '" + attr_name + "' is not unique"); } m_ids.insert(attr_value); if (m_unresolved_ids.count(attr_value) > 0) m_unresolved_ids.erase(attr_value); } else if (dta->get_type() == doctype::AttributeType::IDREF) { if (attr_value.empty()) not_valid("attribute value for attribute '" + attr_name + "' may not be empty"); if (not m_ids.count(attr_value)) m_unresolved_ids.insert(attr_value); } else if (dta->get_type() == doctype::AttributeType::IDREFS) { if (attr_value.empty()) not_valid("attribute value for attribute '" + attr_name + "' may not be empty"); std::string::size_type b = 0, e = attr_value.find(' '); while (e != std::string::npos) { if (e - b > 0) { std::string idv = attr_value.substr(b, e); if (not m_ids.count(idv)) m_unresolved_ids.insert(idv); } b = e + 1; e = attr_value.find(' ', b); } if (b != std::string::npos and b < attr_value.length()) { std::string idv = attr_value.substr(b); if (not m_ids.count(idv)) m_unresolved_ids.insert(idv); } } } detail::attr attr; attr.m_name = attr_name; attr.m_value = attr_value; attr.m_id = id; if (m_ns != nullptr and dta == nullptr) { std::string::size_type d = attr_name.find(':'); if (d != std::string::npos) { if (attr_name.find(':', d + 1) != std::string::npos) not_well_formed("Multiple colons in attribute name"); auto prefix = attr_name.substr(0, d); if (not iequals(prefix, "xml")) { std::string nsv = m_ns->ns_for_prefix(prefix); if (nsv.empty()) not_well_formed("Unbound attribute prefix"); attr.m_ns = nsv; attr.m_name = attr_name.substr(d + 1); } } } attrs.push_back(attr); } } if (dte == nullptr) { if (name[0] == ':') not_well_formed("Element name should not start with colon"); auto cp = name.find(':'); if (cp != std::string::npos) { auto prefix = name.substr(0, cp); if (not ns.is_known_prefix(prefix)) not_well_formed("Unknown prefix for element " + name); } } else // add missing attributes { for (const doctype::attribute_ *dta : dte->get_attributes()) { std::string attr_name = dta->name(); std::list::iterator attr = find_if(attrs.begin(), attrs.end(), [attr_name](auto& a) { return a.m_name == attr_name; }); doctype::AttributeDefault defType; std::string defValue; std::tie(defType, defValue) = dta->get_default(); if (defType == doctype::AttributeDefault::Required) { if (attr == attrs.end()) not_valid("missing #REQUIRED attribute '" + attr_name + "' for element '" + name + "'"); } else if (not defValue.empty() and attr == attrs.end()) { if (m_validating and m_standalone and dta->is_external()) not_valid("default value for attribute defined in external declaration which is not allowed in a standalone document"); detail::attr def_attr; def_attr.m_name = attr_name; def_attr.m_value = normalize_attribute_value(defValue, dta->get_type() == doctype::AttributeType::CDATA); def_attr.m_id = false; if (m_ns != nullptr) { std::string::size_type d = attr_name.find(':'); if (d != std::string::npos) { std::string nsv = m_ns->ns_for_prefix(attr_name.substr(0, d)); if (not nsv.empty()) { def_attr.m_ns = nsv; def_attr.m_name = attr_name.substr(d + 1); } } } attrs.push_back(def_attr); } } } // now find out the namespace we're supposed to pass std::string uri, raw(name); std::string::size_type c = name.find(':'); if (c != std::string::npos and c > 0) { uri = ns.ns_for_prefix(name.substr(0, c)); name.erase(0, c + 1); } else uri = ns.default_ns(); // sort the attributes (why? disabled to allow similar output) attrs.sort([](auto& a, auto& b) { return a.m_name < b.m_name; }); if (m_lookahead == XMLToken::Slash) { match(XMLToken::Slash); m_parser.start_element(name, uri, attrs); m_parser.end_element(name, uri); } else { m_parser.start_element(name, uri, attrs); m_in_content = true; match(XMLToken::GreaterThan); if (m_lookahead != XMLToken::ETag) content(sub_valid); m_in_content = false; match(XMLToken::ETag); if (m_token != raw) not_well_formed("end tag does not match start tag"); match(XMLToken::Name); s(); m_parser.end_element(name, uri); } in_content.reset(); match(XMLToken::GreaterThan); if (m_validating and dte != nullptr and not sub_valid.done()) not_valid("missing child elements for element '" + dte->name() + "'"); } void parser_imp::content(doctype::validator& valid) { if (valid.get_content_spec() == doctype::ContentSpecType::Empty and m_lookahead != XMLToken::ETag) not_valid("Content is not allowed in an element declared to be EMPTY"); do { switch (m_lookahead) { case XMLToken::Content: case XMLToken::Space: if (valid.get_content_spec() == doctype::ContentSpecType::Empty) not_valid("character data not allowed in EMPTY element"); else if (valid.get_content_spec() == doctype::ContentSpecType::Children and m_lookahead == XMLToken::Content) not_valid("character data '" + m_token + "' not allowed in element"); m_parser.character_data(m_token); match(m_lookahead); break; case XMLToken::CharRef: if (valid.get_content_spec() == doctype::ContentSpecType::Empty) not_valid("data not allowed in EMPTY element"); else if (valid.get_content_spec() == doctype::ContentSpecType::Children and is_space(m_token)) not_valid("Element may not contain reference to space"); m_parser.character_data(m_token); match(m_lookahead); break; case XMLToken::Reference: { if (std::find(m_entities_on_stack.begin(), m_entities_on_stack.end(), m_token) != m_entities_on_stack.end()) not_well_formed("infinite recursion of entity references"); m_entities_on_stack.push_back(m_token); const doctype::entity& e = get_general_entity(m_token); if (e.is_externally_defined() and m_standalone) not_well_formed("document marked as standalone but an external entity is referenced"); if (not e.is_parsed()) not_well_formed("content has a general entity reference to an unparsed entity"); push_data_source(new entity_data_source(e.get_replacement(), m_source.top()->base()), false); m_lookahead = get_next_content(); save_state in_external_dtd(m_in_external_dtd, e.is_externally_defined()); // a children production may not contain references to spaces if (m_lookahead == XMLToken::Space and valid.get_content_spec() == doctype::ContentSpecType::Children) { auto space = m_token; match(m_lookahead); if (m_lookahead == XMLToken::Eof) not_valid("Element may not contain reference to space"); m_parser.character_data(space); } if (m_lookahead != XMLToken::Eof) content(valid); if (m_lookahead != XMLToken::Eof) not_well_formed("entity reference should be a valid content production"); pop_data_source(); match(XMLToken::Reference); m_entities_on_stack.pop_back(); break; } case XMLToken::STag: element(valid); break; case XMLToken::PI: pi(); break; case XMLToken::Comment: comment(); break; case XMLToken::CDSect: if (valid.get_content_spec() != doctype::ContentSpecType::Mixed and valid.get_content_spec() != doctype::ContentSpecType::Any) not_valid("character data '" + m_token + "' not allowed in element"); m_parser.start_cdata_section(); m_parser.character_data(m_token); if (is_space(m_token) and valid.get_content_spec() == doctype::ContentSpecType::Children) not_valid("Element may not contain CDATA section containing only space"); m_parser.end_cdata_section(); match(XMLToken::CDSect); break; default: match(XMLToken::Content); // will fail and report error } } while (m_lookahead != XMLToken::ETag and m_lookahead != XMLToken::Eof); } void parser_imp::comment() { save_state in_content(m_in_content, false); // m_lookahead == XMLToken::Comment // read characters until we reach --> // check all characters in between for validity enum { state_Start, state_FirstHyphenSeen, state_SecondHyphenSeen, state_CommentClosed } state = state_Start; m_token.clear(); while (state != state_CommentClosed) { unicode ch = get_next_char(); if (ch == 0) not_well_formed("runaway comment"); if (not is_char(ch)) not_well_formed("illegal character in content: '" + to_hex(ch) + '\''); switch (state) { case state_Start: if (ch == '-') state = state_FirstHyphenSeen; break; case state_FirstHyphenSeen: if (ch == '-') state = state_SecondHyphenSeen; else state = state_Start; break; case state_SecondHyphenSeen: if (ch == '>') state = state_CommentClosed; else not_well_formed("double hyphen found in comment"); break; case state_CommentClosed: assert(false); } } assert(m_token.length() >= 3); m_token.erase(m_token.end() - 3, m_token.end()); m_parser.comment(m_token); in_content.reset(); match(XMLToken::Comment); } void parser_imp::pi() { save_state in_content(m_in_content, false); // m_lookahead == XMLToken::PI // read characters until we reach --> // check all characters in between for validity std::string pi_target = m_token.substr(2); if (pi_target.empty()) not_well_formed("processing instruction target missing"); if (m_validating_ns and pi_target.find(':') != std::string::npos) not_well_formed("processing instruction name should not contain a colon"); // we treat the xml processing instruction separately. if (m_token.substr(2) == "xml") not_well_formed("xml declaration are only valid as the start of the file"); else if (iequals(pi_target, "xml")) not_well_formed("') state = state_PIClosed; else if (ch != '?') state = state_Data; break; case state_PIClosed: assert(false); } } m_token.erase(m_token.end() - 2, m_token.end()); m_parser.processing_instruction(pi_target, m_token); in_content.reset(); match(XMLToken::PI); } // -------------------------------------------------------------------- parser::parser(std::istream& data) : m_impl(new parser_imp(data, *this)), m_istream(nullptr) { } parser::parser(const std::string& data) { m_istream = new std::istringstream(data); m_impl = new parser_imp(*m_istream, *this); } parser::~parser() { delete m_impl; delete m_istream; } void parser::parse(bool validate, bool validate_ns) { m_impl->parse(validate, validate_ns); } void parser::xml_decl(encoding_type encoding, bool standalone, float version) { if (xml_decl_handler) xml_decl_handler(encoding, standalone, version); } void parser::start_element(const std::string& name, const std::string& uri, const std::list &atts) { if (start_element_handler) start_element_handler(name, uri, atts); } void parser::end_element(const std::string& name, const std::string& uri) { if (end_element_handler) end_element_handler(name, uri); } void parser::character_data(const std::string& data) { if (character_data_handler) character_data_handler(data); } void parser::processing_instruction(const std::string& target, const std::string& data) { if (processing_instruction_handler) processing_instruction_handler(target, data); } void parser::comment(const std::string& data) { if (comment_handler) comment_handler(data); } void parser::start_cdata_section() { if (start_cdata_section_handler) start_cdata_section_handler(); } void parser::end_cdata_section() { if (end_cdata_section_handler) end_cdata_section_handler(); } void parser::start_namespace_decl(const std::string& prefix, const std::string& uri) { if (start_namespace_decl_handler) start_namespace_decl_handler(prefix, uri); } void parser::end_namespace_decl(const std::string& prefix) { if (end_namespace_decl_handler) end_namespace_decl_handler(prefix); } void parser::doctype_decl(const std::string& root, const std::string& publicId, const std::string& uri) { if (doctype_decl_handler) doctype_decl_handler(root, publicId, uri); } void parser::notation_decl(const std::string& name, const std::string& systemId, const std::string& publicId) { if (notation_decl_handler) notation_decl_handler(name, systemId, publicId); } std::istream *parser::external_entity_ref(const std::string& base, const std::string& pubid, const std::string& uri) { std::istream *result = nullptr; if (external_entity_ref_handler) result = external_entity_ref_handler(base, pubid, uri); return result; } void parser::report_invalidation(const std::string& msg) { if (report_invalidation_handler) report_invalidation_handler(msg); } } // namespace zeep::xml libzeep-5.1.7/lib-xml/src/xpath.cpp0000664000175000017500000017674014176701531017027 0ustar maartenmaarten// Copyright Maarten L. Hekkelman, Radboud University 2008-2013. // Copyright Maarten L. Hekkelman, 2014-2022 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include namespace zeep::xml { // -------------------------------------------------------------------- enum Token { xp_Undef = 0, xp_EOF = 256, xp_LeftParenthesis, xp_RightParenthesis, xp_LeftBracket, xp_RightBracket, xp_Slash, xp_DoubleSlash, xp_Comma, xp_Name, xp_AxisSpec, xp_FunctionName, xp_NodeType, xp_OperatorUnion, xp_OperatorAdd, xp_OperatorSubtract, xp_OperatorEqual, xp_OperatorNotEqual, xp_OperatorLess, xp_OperatorLessOrEqual, xp_OperatorGreater, xp_OperatorGreaterOrEqual, // next four operators are pseudo tokens, i.e. they are returned as xp_Name from get_next_token xp_OperatorAnd, xp_OperatorOr, xp_OperatorMod, xp_OperatorDiv, xp_Literal, xp_Number, xp_Variable, xp_Asterisk, xp_Colon, // english... added a backward compatibility here after fixing the spelling above xp_OperatorSubstract = xp_OperatorSubtract }; enum class AxisType { Ancestor, AncestorOrSelf, Attribute, Child, Descendant, DescendantOrSelf, Following, FollowingSibling, Namespace, Parent, Preceding, PrecedingSibling, Self, AxisTypeCount }; const char* kAxisNames[static_cast(AxisType::AxisTypeCount)] = { "ancestor", "ancestor-or-self", "attribute", "child", "descendant", "descendant-or-self", "following", "following-sibling", "namespace", "parent", "preceding", "preceding-sibling", "self" }; enum class CoreFunction { Last, Position, Count, Id, LocalName, NamespaceUri, Name, String, Concat, StartsWith, Contains, SubstringBefore, SubstringAfter, Substring, StringLength, NormalizeSpace, Translate, Boolean, Not, True, False, Lang, Number, Sum, Floor, Ceiling, Round, Comment, CoreFunctionCount }; const size_t kCoreFunctionCount = static_cast(CoreFunction::CoreFunctionCount); struct CoreFunctionInfo { const char* name; int arg_count; }; const int kOptionalArgument = -100; const CoreFunctionInfo kCoreFunctionInfo[kCoreFunctionCount] = { { "last", 0 }, { "position", 0 }, { "count", 1 }, { "id", 0 }, { "local-name", kOptionalArgument }, { "namespace-uri", kOptionalArgument }, { "name", kOptionalArgument }, { "string", kOptionalArgument }, { "concat", -2 }, { "starts-with", 2 }, { "contains", 2 }, { "substring-before", 2 }, { "substring-after", 2 }, { "substring", -2 }, { "string-length", kOptionalArgument }, { "normalize-space", kOptionalArgument }, { "translate", 3 }, { "boolean", 1 }, { "not", 1 }, { "true" , 0 }, { "false", 0 }, { "lang", 0 }, { "number", kOptionalArgument }, { "sum", 0 }, { "floor", 1 }, { "ceiling", 1 }, { "round", 1 }, { "comment", 1 }, }; // the expressions are implemented as interpreter objects // they return 'objects' that can hold various data. enum class object_type { undef, node_set, boolean, number, string }; class object { public: object(); object(node_set ns); object(bool b); object(double n); object(const std::string& s); object(const object& o); object& operator=(const object& o); bool operator==(const object o); bool operator<(const object o); object_type type() const { return m_type; } template T as() const; private: object_type m_type; node_set m_node_set; bool m_boolean; double m_number; std::string m_string; }; object operator%(const object& lhs, const object& rhs); object operator/(const object& lhs, const object& rhs); object operator+(const object& lhs, const object& rhs); object operator-(const object& lhs, const object& rhs); object::object() : m_type(object_type::undef) { } object::object(node_set ns) : m_type(object_type::node_set) , m_node_set(ns) { } object::object(bool b) : m_type(object_type::boolean) , m_boolean(b) { } object::object(double n) : m_type(object_type::number) , m_number(n) { } object::object(const std::string& s) : m_type(object_type::string) , m_string(s) { } object::object(const object& o) : m_type(o.m_type) { switch (m_type) { case object_type::node_set: m_node_set = o.m_node_set; break; case object_type::boolean: m_boolean = o.m_boolean; break; case object_type::number: m_number = o.m_number; break; case object_type::string: m_string = o.m_string; break; default: break; } } object& object::operator=(const object& o) { m_type = o.m_type; switch (m_type) { case object_type::node_set: m_node_set = o.m_node_set; break; case object_type::boolean: m_boolean = o.m_boolean; break; case object_type::number: m_number = o.m_number; break; case object_type::string: m_string = o.m_string; break; default: break; } return *this; } template<> const node_set& object::as() const { if (m_type != object_type::node_set) throw exception("object is not of type node-set"); return m_node_set; } template<> bool object::as() const { bool result; switch (m_type) { case object_type::number: result = m_number != 0 and not std::isnan(m_number); break; case object_type::node_set: result = not m_node_set.empty(); break; case object_type::string: result = not m_string.empty(); break; case object_type::boolean: result = m_boolean; break; default: result = false; break; } return result; } template<> double object::as() const { double result; switch (m_type) { case object_type::number: result = m_number; break; case object_type::node_set: result = stod(m_node_set.front()->str()); break; case object_type::string: result = stod(m_string); break; case object_type::boolean: result = m_boolean; break; default: result = 0; break; } return result; } template<> int object::as() const { if (m_type != object_type::number) throw exception("object is not of type number"); return static_cast(round(m_number)); } template<> const std::string& object::as() const { if (m_type != object_type::string) throw exception("object is not of type string"); return m_string; } template<> std::string object::as() const { std::string result; switch (m_type) { case object_type::number: result = std::to_string(m_number); break; case object_type::string: result = m_string; break; case object_type::boolean: result = (m_boolean ? "true" : "false"); break; case object_type::node_set: for (auto& n: m_node_set) result += n->str(); break; default: break; } return result; } bool object::operator==(const object o) { bool result = false; if (m_type == o.m_type) { switch (m_type) { case object_type::node_set: result = m_node_set == o.m_node_set; break; case object_type::boolean: result = m_boolean == o.m_boolean; break; case object_type::number: result = m_number == o.m_number; break; case object_type::string: result = m_string == o.m_string; break; default: break; } } else { if (m_type == object_type::number or o.m_type == object_type::number) result = as() == o.as(); else if (m_type == object_type::string or o.m_type == object_type::string) result = as() == o.as(); else if (m_type == object_type::boolean or o.m_type == object_type::boolean) result = as() == o.as(); } return result; } bool object::operator<(const object o) { bool result = false; switch (m_type) { case object_type::node_set: result = m_node_set < o.m_node_set; break; case object_type::boolean: result = m_boolean < o.m_boolean; break; case object_type::number: result = m_number < o.m_number; break; case object_type::string: result = m_string < o.m_string; break; default: break; } return result; } std::ostream& operator<<(std::ostream& lhs, object& rhs) { switch (rhs.type()) { case object_type::undef: lhs << "undef()"; break; case object_type::number: lhs << "number(" << rhs.as() << ')'; break; case object_type::string: lhs << "string(" << rhs.as() << ')'; break; case object_type::boolean: lhs << "boolean(" << (rhs.as() ? "true" : "false") << ')'; break; case object_type::node_set: lhs << "node_set(#" << rhs.as().size() << ')'; break; } return lhs; } // -------------------------------------------------------------------- // visiting (or better, collecting) other nodes in the hierarchy is done here. template void iterate_child_elements(element* context, node_set& s, bool deep, PREDICATE pred) { for (element& child: *context) { if (find(s.begin(), s.end(), &child) != s.end()) continue; if (pred(&child)) s.push_back(&child); if (deep) iterate_child_elements(&child, s, true, pred); } } template void iterate_child_nodes(element* context, node_set& s, bool deep, PREDICATE pred) { for (node& child: context->nodes()) { if (find(s.begin(), s.end(), &child) != s.end()) continue; if (pred(&child)) s.push_back(&child); if (deep) { element* child_element = dynamic_cast(&child); if (child_element != nullptr) iterate_child_nodes(child_element, s, true, pred); } } } template inline void iterate_children(element* context, node_set& s, bool deep, PREDICATE pred, bool elementsOnly) { if (elementsOnly) iterate_child_elements(context, s, deep, pred); else iterate_child_nodes(context, s, deep, pred); } template void iterate_ancestor(element* e, node_set& s, PREDICATE pred) { for (;;) { e = e->parent(); if (e == nullptr) break; document* r = dynamic_cast(e); if (r != nullptr) break; if (pred(e)) s.push_back(e); } } template void iterate_preceding(node* n, node_set& s, bool sibling, PREDICATE pred, bool elementsOnly) { while (n != nullptr) { if (n->prev() == nullptr) { if (sibling) break; n = n->parent(); continue; } n = n->prev(); element* e = dynamic_cast(n); if (e == nullptr) continue; if (pred(e)) s.push_back(e); if (sibling == false) iterate_children(e, s, true, pred, elementsOnly); } } template void iterate_following(node* n, node_set& s, bool sibling, PREDICATE pred, bool elementsOnly) { while (n != nullptr) { if (n->next() == nullptr) { if (sibling) break; n = n->parent(); continue; } n = n->next(); element* e = dynamic_cast(n); if (e == nullptr) continue; if (pred(e)) s.push_back(e); if (sibling == false) iterate_children(e, s, true, pred, elementsOnly); } } template void iterate_attributes(element* e, node_set& s, PREDICATE pred) { for (auto& a: e->attributes()) { if (pred(&a)) s.push_back(&a); } } template void iterate_namespaces(element* e, node_set& s, PREDICATE pred) { for (auto& a: e->attributes()) { if (not a.is_namespace()) continue; if (pred(&a)) s.push_back(&a); } } // -------------------------------------------------------------------- // context for the expressions // Need to add support for external variables here. struct context_imp { virtual ~context_imp() {} virtual object& get(const std::string& name) { return m_variables[name]; } virtual void set(const std::string& name, const object& value) { m_variables[name] = value; } std::map m_variables; }; struct expression_context : public context_imp { expression_context(context_imp& next, node* n, const node_set& s) : m_next(next), m_node(n), m_node_set(s) {} virtual object& get(const std::string& name) { return m_next.get(name); } virtual void set(const std::string& name, const object& value) { m_next.set(name, value); } void dump(); size_t position() const; size_t last() const; context_imp& m_next; node* m_node; const node_set& m_node_set; }; size_t expression_context::position() const { size_t result = 0; for (const node* n: m_node_set) { ++result; if (n == m_node) break; } if (result == 0) throw exception("invalid context for position"); return result; } size_t expression_context::last() const { return m_node_set.size(); } void expression_context::dump() { // std::cout << "context node: " << *m_node << std::endl // << "context node-set: "; // copy(m_node_set.begin(), m_node_set.end(), std::ostream_iterator(std::cout, ", ")); // std::cout << std::endl; } std::ostream& operator<<(std::ostream& lhs, expression_context& rhs) { rhs.dump(); return lhs; } void indent(int level) { while (level-- > 0) std::cout << ' '; } // -------------------------------------------------------------------- class expression { public: virtual ~expression() {} virtual object evaluate(expression_context& context) = 0; // // print exists only for debugging purposes // virtual void print(int level) = 0; }; typedef std::shared_ptr expression_ptr; typedef std::list expression_list; // needed for CLang/libc++ on FreeBSD 10 expression* get_pointer(std::shared_ptr const & p) { return p.get(); } // -------------------------------------------------------------------- class step_expression : public expression { public: step_expression(AxisType axis) : m_axis(axis) {} protected: template object evaluate(expression_context& context, T pred, bool elementsOnly); AxisType m_axis; }; template object step_expression::evaluate(expression_context& context, T pred, bool elementsOnly) { node_set result; element* context_element = dynamic_cast(context.m_node); if (context_element != nullptr) { switch (m_axis) { case AxisType::Parent: if (context_element->parent() != nullptr) { element* e = static_cast(context_element->parent()); if (pred(e)) result.push_back(context_element->parent()); } break; case AxisType::Ancestor: iterate_ancestor(context_element, result, pred); break; case AxisType::AncestorOrSelf: if (pred(context_element)) result.push_back(context_element); iterate_ancestor(context_element, result, pred); break; case AxisType::Self: if (pred(context_element)) result.push_back(context_element); break; case AxisType::Child: iterate_children(context_element, result, false, pred, elementsOnly); break; case AxisType::Descendant: iterate_children(context_element, result, true, pred, elementsOnly); break; case AxisType::DescendantOrSelf: if (pred(context_element)) result.push_back(context_element); iterate_children(context_element, result, true, pred, elementsOnly); break; case AxisType::Following: iterate_following(context_element, result, false, pred, elementsOnly); break; case AxisType::FollowingSibling: iterate_following(context_element, result, true, pred, elementsOnly); break; case AxisType::Preceding: iterate_preceding(context_element, result, false, pred, elementsOnly); break; case AxisType::PrecedingSibling: iterate_preceding(context_element, result, true, pred, elementsOnly); break; case AxisType::Attribute: if (dynamic_cast(context_element) != nullptr) iterate_attributes(static_cast(context_element), result, pred); break; case AxisType::Namespace: if (dynamic_cast(context_element) != nullptr) iterate_namespaces(static_cast(context_element), result, pred); break; case AxisType::AxisTypeCount: ; } } return result; } // -------------------------------------------------------------------- class name_test_step_expression : public step_expression { public: name_test_step_expression(AxisType axis, const std::string& name) : step_expression(axis) , m_name(name) { m_test = std::bind(&name_test_step_expression::name_matches, this, std::placeholders::_1); } virtual object evaluate(expression_context& context); // virtual void print(int level) { indent(level); std::cout << "name test step " << m_name << std::endl; } protected: bool name_matches(const node* n) { bool result = m_name == "*"; if (result == false) { const element* e = dynamic_cast(n); if (e != nullptr and e->name() == m_name) result = true; } if (result == false) { const attribute* a = dynamic_cast(n); if (a != nullptr and a->name() == m_name) result = true; } return result; } std::string m_name; std::function m_test; }; object name_test_step_expression::evaluate(expression_context& context) { return step_expression::evaluate(context, m_test, true); } // -------------------------------------------------------------------- template class node_type_expression : public step_expression { public: node_type_expression(AxisType axis) : step_expression(axis) { m_test = std::bind(&node_type_expression::test, std::placeholders::_1); } virtual object evaluate(expression_context& context); // virtual void print(int level) { indent(level); std::cout << "node type step " << boost::core::demangle(typeid(T).name()) << std::endl; } private: static bool test(const node* n) { return dynamic_cast(n) != nullptr; } std::function m_test; }; template object node_type_expression::evaluate(expression_context& context) { return step_expression::evaluate(context, m_test, false); } // -------------------------------------------------------------------- class root_expression : public expression { public: virtual object evaluate(expression_context& context); // virtual void print(int level) { indent(level); std::cout << "root" << std::endl; } }; object root_expression::evaluate(expression_context& context) { node_set result; result.push_back(context.m_node->root()); return result; } // -------------------------------------------------------------------- template class operator_expression : public expression { public: operator_expression(expression_ptr lhs, expression_ptr rhs) : m_lhs(lhs), m_rhs(rhs) {} virtual object evaluate(expression_context& context); // virtual void print(int level) // { // indent(level); // std::cout << "operator " << boost::core::demangle(typeid(OP).name()) << std::endl; // m_lhs->print(level + 1); // m_rhs->print(level + 1); // } private: expression_ptr m_lhs, m_rhs; }; template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return v1.as() + v2.as(); } template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return v1.as() - v2.as(); } template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return v1 == v2; } template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return not (v1 == v2); } template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return v1 < v2; } template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return v1 < v2 or v1 == v2; } template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return v2 < v1; } template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return v2 < v1 or v1 == v2; } template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return v1.as() and v2.as(); } template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return v1.as() or v2.as(); } template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return double(v1.as() % v2.as()); } template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return v1.as() / v2.as(); } template<> object operator_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); return v1.as() * v2.as(); } // -------------------------------------------------------------------- class negate_expression : public expression { public: negate_expression(expression_ptr expr) : m_expr(expr) {} virtual object evaluate(expression_context& context); // virtual void print(int level) { indent(level); std::cout << "negate" << std::endl; m_expr->print(level + 1); } private: expression_ptr m_expr; }; object negate_expression::evaluate(expression_context& context) { object v = m_expr->evaluate(context); return -v.as(); } // -------------------------------------------------------------------- class path_expression : public expression { public: path_expression(expression_ptr lhs, expression_ptr rhs) : m_lhs(lhs), m_rhs(rhs) {} virtual object evaluate(expression_context& context); // virtual void print(int level) // { // indent(level); // std::cout << "path" << std::endl; // m_lhs->print(level + 1); // m_rhs->print(level + 1); // } private: expression_ptr m_lhs, m_rhs; }; object path_expression::evaluate(expression_context& context) { object v = m_lhs->evaluate(context); if (v.type() != object_type::node_set) throw exception("filter does not evaluate to a node-set"); node_set result; for (node* n: v.as()) { expression_context ctxt(context, n, v.as()); node_set s = m_rhs->evaluate(ctxt).as(); copy(s.begin(), s.end(), back_inserter(result)); } return result; } // -------------------------------------------------------------------- class predicate_expression : public expression { public: predicate_expression(expression_ptr path, expression_ptr pred) : m_path(path), m_pred(pred) {} virtual object evaluate(expression_context& context); // virtual void print(int level) // { // indent(level); // std::cout << "predicate" << std::endl; // m_path->print(level + 1); // m_pred->print(level + 1); // } private: expression_ptr m_path, m_pred; }; object predicate_expression::evaluate(expression_context& context) { object v = m_path->evaluate(context); node_set result; for (node* n: v.as()) { expression_context ctxt(context, n, v.as()); object test = m_pred->evaluate(ctxt); if (test.type() == object_type::number) { if (ctxt.position() == test.as()) result.push_back(n); } else if (test.as()) result.push_back(n); } return result; } // -------------------------------------------------------------------- class variable_expression : public expression { public: variable_expression(const std::string& name) : m_var(name) {} virtual object evaluate(expression_context& context); // virtual void print(int level) { indent(level); std::cout << "variable " << m_var << std::endl; } private: std::string m_var; }; object variable_expression::evaluate(expression_context& context) { return context.get(m_var); } // -------------------------------------------------------------------- class literal_expression : public expression { public: literal_expression(const std::string& lit) : m_lit(lit) {} virtual object evaluate(expression_context& context); // virtual void print(int level) { indent(level); std::cout << "literal " << m_lit << std::endl; } private: std::string m_lit; }; object literal_expression::evaluate(expression_context& /*context*/) { return object(m_lit); } // -------------------------------------------------------------------- class number_expression : public expression { public: number_expression(double number) : m_number(number) {} virtual object evaluate(expression_context& context); // virtual void print(int level) { indent(level); std::cout << "number " << m_number << std::endl; } private: double m_number; }; object number_expression::evaluate(expression_context& /*context*/) { return object(m_number); } // -------------------------------------------------------------------- template class core_function_expression : public expression { public: core_function_expression(expression_list& arguments) : m_args(arguments) {} virtual object evaluate(expression_context& context); // virtual void print(int level) // { // indent(level); // std::cout << "function call " << boost::core::demangle(typeid(CF).name()) << std::endl; // for_each(m_args.begin(), m_args.end(), // std::bind(&expression::print, std::placeholders::_1, level + 1)); // } private: expression_list m_args; }; template object core_function_expression::evaluate(expression_context& /*context*/) { throw exception("unimplemented function "); } template<> object core_function_expression::evaluate(expression_context& context) { return object(double(context.position())); } template<> object core_function_expression::evaluate(expression_context& context) { return object(double(context.last())); } template<> object core_function_expression::evaluate(expression_context& context) { object v = m_args.front()->evaluate(context); size_t result = v.as().size(); return object(double(result)); } template<> object core_function_expression::evaluate(expression_context& context) { element* e = nullptr; if (m_args.empty()) e = dynamic_cast(context.m_node); else { object v = m_args.front()->evaluate(context); if (not v.as().empty()) e = dynamic_cast(v.as().front()); } if (e == nullptr) throw exception("argument is not an element in function 'id()'"); return e->id(); } template<> object core_function_expression::evaluate(expression_context& context) { node* n = nullptr; if (m_args.empty()) n = context.m_node; else { object v = m_args.front()->evaluate(context); if (not v.as().empty()) n = v.as().front(); } if (n == nullptr) throw exception("argument is not an element in function 'local-name'"); return n->name(); } template<> object core_function_expression::evaluate(expression_context& context) { node* n = nullptr; if (m_args.empty()) n = context.m_node; else { object v = m_args.front()->evaluate(context); if (not v.as().empty()) n = v.as().front(); } if (n == nullptr) throw exception("argument is not an element in function 'namespace-uri'"); return n->get_ns(); } template<> object core_function_expression::evaluate(expression_context& context) { node* n = nullptr; if (m_args.empty()) n = context.m_node; else { object v = m_args.front()->evaluate(context); if (not v.as().empty()) n = v.as().front(); } if (n == nullptr) throw exception("argument is not an element in function 'name'"); return n->get_qname(); } template<> object core_function_expression::evaluate(expression_context& context) { std::string result; if (m_args.empty()) result = context.m_node->str(); else { object v = m_args.front()->evaluate(context); result = v.as(); } return result; } template<> object core_function_expression::evaluate(expression_context& context) { std::string result; for (expression_ptr& e: m_args) { object v = e->evaluate(context); result += v.as(); } return result; } template<> object core_function_expression::evaluate(expression_context& context) { std::string result; if (m_args.empty()) result = context.m_node->str(); else { object v = m_args.front()->evaluate(context); result = v.as(); } return double(result.length()); } template<> object core_function_expression::evaluate(expression_context& context) { object v1 = m_args.front()->evaluate(context); object v2 = m_args.back()->evaluate(context); try { return v2.as().empty() or starts_with(v1.as(), v2.as()); } catch(const std::exception &) { throw exception("expected two strings as argument for starts-with"); } } template<> object core_function_expression::evaluate(expression_context& context) { object v1 = m_args.front()->evaluate(context); object v2 = m_args.back()->evaluate(context); try { auto s1 = v1.as(); auto s2 = v2.as(); return s1.find(s2) != std::string::npos; } catch (...) { throw exception("expected two strings as argument for contains"); } } template<> object core_function_expression::evaluate(expression_context& context) { object v1 = m_args.front()->evaluate(context); object v2 = m_args.back()->evaluate(context); try { std::string result; if (not v2.as().empty()) { std::string::size_type p = v1.as().find(v2.as()); if (p != std::string::npos) result = v1.as().substr(0, p); } return result; } catch (...) { throw exception("expected two strings as argument for substring-before"); } } template<> object core_function_expression::evaluate(expression_context& context) { object v1 = m_args.front()->evaluate(context); object v2 = m_args.back()->evaluate(context); try { std::string result; if (v2.as().empty()) result = v1.as(); else { std::string::size_type p = v1.as().find(v2.as()); if (p != std::string::npos and p + v2.as().length() < v1.as().length()) result = v1.as().substr(p + v2.as().length()); } return result; } catch (...) { throw exception("expected two strings as argument for substring-after"); } } template<> object core_function_expression::evaluate(expression_context& context) { expression_list::iterator a = m_args.begin(); object v1 = (*a)->evaluate(context); ++a; object v2 = (*a)->evaluate(context); ++a; object v3 = (*a)->evaluate(context); if (v2.type() != object_type::number or v3.type() != object_type::number) throw exception("expected one string and two numbers as argument for substring"); try { return v1.as().substr(v2.as() - 1, v3.as()); } catch (...) { throw exception("expected one string and two numbers as argument for substring"); } } template<> object core_function_expression::evaluate(expression_context& context) { std::string s; if (m_args.empty()) s = context.m_node->str(); else { object v = m_args.front()->evaluate(context); s = v.as(); } std::string result; bool space = true; for (char c: s) { if (isspace(c)) { if (not space) result += ' '; space = true; } else { result += c; space = false; } } if (not result.empty() and space) result.erase(result.end() - 1); return result; } template<> object core_function_expression::evaluate(expression_context& context) { expression_list::iterator a = m_args.begin(); object v1 = (*a)->evaluate(context); ++a; object v2 = (*a)->evaluate(context); ++a; object v3 = (*a)->evaluate(context); try { const std::string& f = v2.as(); const std::string& r = v3.as(); std::string result; result.reserve(v1.as().length()); for (char c: v1.as()) { std::string::size_type fi = f.find(c); if (fi == std::string::npos) result += c; else if (fi < r.length()) result += r[fi]; } return result; } catch(const std::exception &) { throw exception("expected three strings as arguments for translate"); } } template<> object core_function_expression::evaluate(expression_context& context) { object v = m_args.front()->evaluate(context); return v.as(); } template<> object core_function_expression::evaluate(expression_context& context) { object v = m_args.front()->evaluate(context); return not v.as(); } template<> object core_function_expression::evaluate(expression_context& /*context*/) { return true; } template<> object core_function_expression::evaluate(expression_context& /*context*/) { return false; } template<> object core_function_expression::evaluate(expression_context& context) { object v = m_args.front()->evaluate(context); std::string test = v.as(); to_lower(test); std::string lang = context.m_node->lang(); to_lower(lang); bool result = test == lang; std::string::size_type s; if (result == false and (s = lang.find('-')) != std::string::npos) result = test == lang.substr(0, s); return result; } template<> object core_function_expression::evaluate(expression_context& context) { object v; if (m_args.size() == 1) v = m_args.front()->evaluate(context); else v = stod(context.m_node->str()); return v.as(); } template<> object core_function_expression::evaluate(expression_context& context) { object v = m_args.front()->evaluate(context); return floor(v.as()); } template<> object core_function_expression::evaluate(expression_context& context) { object v = m_args.front()->evaluate(context); return ceil(v.as()); } template<> object core_function_expression::evaluate(expression_context& context) { object v = m_args.front()->evaluate(context); return round(v.as()); } // -------------------------------------------------------------------- class union_expression : public expression { public: union_expression(expression_ptr lhs, expression_ptr rhs) : m_lhs(lhs), m_rhs(rhs) {} virtual object evaluate(expression_context& context); // virtual void print(int level) // { // indent(level); // std::cout << "union" << std::endl; // m_lhs->print(level + 1); // m_rhs->print(level + 1); // } private: expression_ptr m_lhs, m_rhs; }; object union_expression::evaluate(expression_context& context) { object v1 = m_lhs->evaluate(context); object v2 = m_rhs->evaluate(context); if (v1.type() != object_type::node_set or v2.type() != object_type::node_set) throw exception("union operator works only on node sets"); node_set s1 = v1.as(); node_set s2 = v2.as(); copy(s2.begin(), s2.end(), back_inserter(s1)); return s1; } // -------------------------------------------------------------------- struct xpath_imp { xpath_imp(); void reference(); void release(); node_set evaluate(node& root, context_imp& context); void parse(const std::string& path); // void dump() // { // if (m_expr) // m_expr->print(0); // else // std::cout << "xpath is null" << std::endl; // } void preprocess(const std::string& path); unsigned char next_byte(); unicode get_next_char(); void retract(); Token get_next_token(); std::string describe_token(Token token); void match(Token token); expression_ptr location_path(); expression_ptr absolute_location_path(); expression_ptr relative_location_path(); expression_ptr step(); expression_ptr node_test(AxisType axis); expression_ptr expr(); expression_ptr primary_expr(); expression_ptr function_call(); expression_ptr argument(); expression_ptr union_expr(); expression_ptr path_expr(); expression_ptr filter_expr(); expression_ptr or_expr(); expression_ptr and_expr(); expression_ptr equality_expr(); expression_ptr relational_expr(); expression_ptr additive_expr(); expression_ptr multiplicative_expr(); expression_ptr unary_expr(); // abbreviated steps are expanded like macros by the scanner std::string m_path; std::string::const_iterator m_begin, m_next, m_end; Token m_lookahead; std::string m_token_string; double m_token_number; AxisType m_token_axis; CoreFunction m_token_function; // the generated expression expression_ptr m_expr; private: ~xpath_imp(); long m_refcount; }; // -------------------------------------------------------------------- xpath_imp::xpath_imp() : m_refcount(1) { } xpath_imp::~xpath_imp() { } void xpath_imp::reference() { ++m_refcount; } void xpath_imp::release() { if (--m_refcount <= 0) delete this; } void xpath_imp::parse(const std::string& path) { // start by expanding the abbreviations in the path preprocess(path); m_begin = m_next = m_path.begin(); m_end = m_path.end(); m_lookahead = get_next_token(); m_expr = location_path(); while (m_lookahead == xp_OperatorUnion) { match(xp_OperatorUnion); m_expr.reset(new union_expression(m_expr, location_path())); } // if (VERBOSE) // m_expr->print(0); match(xp_EOF); } void xpath_imp::preprocess(const std::string& path) { // preprocessing consists of expanding abbreviations // replacements are: // @ => replaced by 'attribute::' // // => replaced by '/descendant-or-self::node()/' // . (if at a step location) => 'self::node()' // .. (if at a step location) => 'parent::node()' m_path.clear(); enum State { pp_Step, pp_Data, pp_Dot, pp_Slash, pp_String } state; state = pp_Step; unicode quoteChar = 0; for (std::string::const_iterator ch = path.begin(); ch != path.end(); ++ch) { switch (state) { case pp_Step: state = pp_Data; switch (*ch) { case '@': m_path += "attribute::"; break; case '.': state = pp_Dot; break; case '/': state = pp_Slash; break; case '\'': case '\"': m_path += *ch; quoteChar = *ch; state = pp_String; break; default: m_path += *ch; break; } break; case pp_Data: switch (*ch) { case '@': m_path += "attribute::"; break; case '/': state = pp_Slash; break; case '[': m_path += '['; state = pp_Step; break; case '\'': case '\"': m_path += *ch; quoteChar = *ch; state = pp_String; break; default: m_path += *ch; break; } break; case pp_Dot: if (*ch == '.') m_path += "parent::node()"; else { --ch; m_path += "self::node()"; } state = pp_Step; break; case pp_Slash: if (*ch == '/') m_path += "/descendant-or-self::node()/"; else { --ch; m_path += '/'; } state = pp_Step; break; case pp_String: m_path += *ch; if (static_cast(*ch) == quoteChar) state = pp_Data; break; } } } unsigned char xpath_imp::next_byte() { char result = 0; if (m_next < m_end) { result = *m_next; ++m_next; } m_token_string += result; return static_cast(result); } // We assume all paths are in valid UTF-8 encoding unicode xpath_imp::get_next_char() { unicode result = 0; unsigned char ch[5]; ch[0] = next_byte(); if ((ch[0] & 0x080) == 0) result = ch[0]; else if ((ch[0] & 0x0E0) == 0x0C0) { ch[1] = next_byte(); if ((ch[1] & 0x0c0) != 0x080) throw exception("Invalid utf-8"); result = ((ch[0] & 0x01F) << 6) | (ch[1] & 0x03F); } else if ((ch[0] & 0x0F0) == 0x0E0) { ch[1] = next_byte(); ch[2] = next_byte(); if ((ch[1] & 0x0c0) != 0x080 or (ch[2] & 0x0c0) != 0x080) throw exception("Invalid utf-8"); result = ((ch[0] & 0x00F) << 12) | ((ch[1] & 0x03F) << 6) | (ch[2] & 0x03F); } else if ((ch[0] & 0x0F8) == 0x0F0) { ch[1] = next_byte(); ch[2] = next_byte(); ch[3] = next_byte(); if ((ch[1] & 0x0c0) != 0x080 or (ch[2] & 0x0c0) != 0x080 or (ch[3] & 0x0c0) != 0x080) throw exception("Invalid utf-8"); result = ((ch[0] & 0x007) << 18) | ((ch[1] & 0x03F) << 12) | ((ch[2] & 0x03F) << 6) | (ch[3] & 0x03F); } if (result > 0x10ffff) throw exception("invalid utf-8 character (out of range)"); return result; } void xpath_imp::retract() { std::string::iterator c = m_token_string.end(); // skip one valid character back in the input buffer // since we've arrived here, we can safely assume input // is valid UTF-8 do --c; while ((*c & 0x0c0) == 0x080); if (m_next != m_end or *c != 0) m_next -= m_token_string.end() - c; m_token_string.erase(c, m_token_string.end()); } std::string xpath_imp::describe_token(Token token) { std::stringstream result; switch (token) { case xp_Undef: result << "undefined"; break; case xp_EOF: result << "end of expression"; break; case xp_LeftParenthesis: result << "left parenthesis"; break; case xp_RightParenthesis: result << "right parenthesis"; break; case xp_LeftBracket: result << "left bracket"; break; case xp_RightBracket: result << "right bracket"; break; case xp_Slash: result << "forward slash"; break; case xp_DoubleSlash: result << "double forward slash"; break; case xp_Comma: result << "comma"; break; case xp_Name: result << "name"; break; case xp_AxisSpec: result << "axis specification"; break; case xp_FunctionName: result << "function name"; break; case xp_NodeType: result << "node type specification"; break; case xp_OperatorUnion: result << "union operator"; break; case xp_OperatorAdd: result << "addition operator"; break; case xp_OperatorSubtract: result << "subtraction operator"; break; case xp_OperatorEqual: result << "equals operator"; break; case xp_OperatorNotEqual: result << "not-equals operator"; break; case xp_OperatorLess: result << "less operator"; break; case xp_OperatorLessOrEqual:result << "less-or-equal operator"; break; case xp_OperatorGreater: result << "greater operator"; break; case xp_OperatorGreaterOrEqual: result << "greater-or-equal operator"; break; case xp_OperatorAnd: result << "logical-and operator"; break; case xp_OperatorOr: result << "logical-or operator"; break; case xp_OperatorMod: result << "modulus operator"; break; case xp_OperatorDiv: result << "division operator"; break; case xp_Literal: result << "literal"; break; case xp_Number: result << "number"; break; case xp_Variable: result << "variable"; break; case xp_Asterisk: result << "asterisk (or multiply)"; break; case xp_Colon: result << "colon"; break; } result << " {" << m_token_string << '}'; return result.str(); } Token xpath_imp::get_next_token() { enum State { xps_Start, xps_VariableStart, xps_ExclamationMark, xps_LessThan, xps_GreaterThan, xps_Number, xps_NumberFraction, xps_Name, xps_QName, xps_QName2, xps_Literal } state = xps_Start; Token token = xp_Undef; bool variable = false; double fraction = 1.0; unicode quoteChar = 0; m_token_string.clear(); while (token == xp_Undef) { unicode ch = get_next_char(); switch (state) { case xps_Start: switch (ch) { case 0: token = xp_EOF; break; case '(': token = xp_LeftParenthesis; break; case ')': token = xp_RightParenthesis; break; case '[': token = xp_LeftBracket; break; case ']': token = xp_RightBracket; break; case ',': token = xp_Comma; break; case ':': token = xp_Colon; break; case '$': state = xps_VariableStart; break; case '*': token = xp_Asterisk; break; case '/': token = xp_Slash; break; case '|': token = xp_OperatorUnion; break; case '+': token = xp_OperatorAdd; break; case '-': token = xp_OperatorSubtract; break; case '=': token = xp_OperatorEqual; break; case '!': state = xps_ExclamationMark; break; case '<': state = xps_LessThan; break; case '>': state = xps_GreaterThan; break; case ' ': case '\n': case '\r': case '\t': m_token_string.clear(); break; case '\'': quoteChar = ch; state = xps_Literal; break; case '"': quoteChar = ch; state = xps_Literal; break; case '@': token = xp_AxisSpec; m_token_axis = AxisType::Attribute; break; default: if (ch == '.') { m_token_number = 0; state = xps_NumberFraction; } else if (ch >= '0' and ch <= '9') { m_token_number = ch - '0'; state = xps_Number; } else if (is_name_start_char(ch)) state = xps_Name; else throw exception("invalid character in xpath"); } break; case xps_ExclamationMark: if (ch != '=') { retract(); throw exception("unexpected character ('!') in xpath"); } token = xp_OperatorNotEqual; break; case xps_LessThan: if (ch == '=') token = xp_OperatorLessOrEqual; else { retract(); token = xp_OperatorLess; } break; case xps_GreaterThan: if (ch == '=') token = xp_OperatorGreaterOrEqual; else { retract(); token = xp_OperatorGreater; } break; case xps_Number: if (ch >= '0' and ch <= '9') m_token_number = 10 * m_token_number + (ch - '0'); else if (ch == '.') { fraction = 0.1; state = xps_NumberFraction; } else { retract(); token = xp_Number; } break; case xps_NumberFraction: if (ch >= '0' and ch <= '9') { m_token_number += fraction * (ch - '0'); fraction /= 10; } else { retract(); token = xp_Number; } break; case xps_VariableStart: if (is_name_start_char(ch)) { variable = true; state = xps_Name; } else throw exception("invalid variable name or lone dollar character"); break; case xps_Name: if (ch == ':') state = xps_QName; else if (not is_name_char(ch)) { retract(); if (variable) token = xp_Variable; else token = xp_Name; } break; case xps_QName: if (ch != ':' and is_name_start_char(ch)) state = xps_QName2; else { retract(); // ch retract(); // ':' if (variable) token = xp_Variable; else token = xp_Name; } break; case xps_QName2: if (ch == ':' or not is_name_char(ch)) { retract(); if (variable) token = xp_Variable; else token = xp_Name; } break; case xps_Literal: if (ch == 0) throw exception("run-away string, missing quote character?"); else if (ch == quoteChar) { token = xp_Literal; m_token_string = m_token_string.substr(1, m_token_string.length() - 2); } break; } } if (token == xp_Name) // we've scanned a name, but it might as well be a function, nodetype or axis { if (m_token_string == "and") token = xp_OperatorAnd; else if (m_token_string == "or") token = xp_OperatorOr; else if (m_token_string == "mod") token = xp_OperatorMod; else if (m_token_string == "div") token = xp_OperatorDiv; else { // look forward and see what's ahead for (std::string::const_iterator c = m_next; c != m_end; ++c) { if (isspace(*c)) continue; if (*c == ':' and *(c + 1) == ':') // it must be an axis specifier { token = xp_AxisSpec; const int kAxisNameCount = sizeof(kAxisNames) / sizeof(const char*); const char** a = find(kAxisNames, kAxisNames + kAxisNameCount, m_token_string); if (*a != nullptr) m_token_axis = AxisType(a - kAxisNames); else throw exception("invalid axis specification " + m_token_string); // skip over the double colon m_next = c + 2; } else if (*c == '(') { if (m_token_string == "comment" or m_token_string == "text" or m_token_string == "processing-instruction" or m_token_string == "node") { token = xp_NodeType; // set input pointer after the parenthesis m_next = c + 1; while (m_next != m_end and isspace(*m_next)) ++m_next; if (*m_next != ')') throw exception("expected '()' after a node type specifier"); ++m_next; } else { for (size_t i = 0; i < kCoreFunctionCount; ++i) { if (m_token_string == kCoreFunctionInfo[i].name) { token = xp_FunctionName; m_token_function = CoreFunction(i); break; } } if (token != xp_FunctionName) throw exception("invalid function " + m_token_string); } } break; } } } // if (VERBOSE) // std::cout << "get_next_token: " << describe_token(token) << std::endl; return token; } void xpath_imp::match(Token token) { if (m_lookahead == token) m_lookahead = get_next_token(); else { // aargh... syntax error std::string found = describe_token(m_lookahead); if (m_lookahead != xp_EOF and m_lookahead != xp_Undef) { found += " (\""; found += m_token_string; found += "\")"; } std::string expected = describe_token(token); std::stringstream s; s << "syntax error in xpath, expected " << expected << " but found " << found; throw exception(s.str()); } } expression_ptr xpath_imp::location_path() { bool absolute = false; if (m_lookahead == xp_Slash) { absolute = true; match(xp_Slash); } expression_ptr result(relative_location_path()); if (absolute) result.reset(new path_expression(expression_ptr(new root_expression()), result)); return result; } expression_ptr xpath_imp::relative_location_path() { expression_ptr result(step()); while (m_lookahead == xp_Slash) { match(xp_Slash); result.reset(new path_expression(result, step())); } return result; } expression_ptr xpath_imp::step() { expression_ptr result; AxisType axis = AxisType::Child; if (m_lookahead == xp_AxisSpec) { axis = m_token_axis; match(xp_AxisSpec); } result = node_test(axis); while (m_lookahead == xp_LeftBracket) { match(xp_LeftBracket); result.reset(new predicate_expression(result, expr())); match(xp_RightBracket); } return result; } expression_ptr xpath_imp::node_test(AxisType axis) { expression_ptr result; if (m_lookahead == xp_Asterisk) { result.reset(new name_test_step_expression(axis, m_token_string)); match(xp_Asterisk); } else if (m_lookahead == xp_NodeType) { std::string name = m_token_string; match(xp_NodeType); if (name == "comment") result.reset(new node_type_expression(axis)); else if (name == "text") result.reset(new node_type_expression(axis)); else if (name == "processing-instruction") result.reset(new node_type_expression(axis)); else if (name == "node") result.reset(new node_type_expression(axis)); else throw exception("invalid node type specified: " + name); } else { result.reset(new name_test_step_expression(axis, m_token_string)); match(xp_Name); } return result; } expression_ptr xpath_imp::expr() { expression_ptr result(and_expr()); while (m_lookahead == xp_OperatorOr) { match(xp_OperatorOr); result.reset(new operator_expression(result, and_expr())); } return result; } expression_ptr xpath_imp::primary_expr() { expression_ptr result; switch (m_lookahead) { case xp_Variable: result.reset(new variable_expression(m_token_string.substr(1))); match(xp_Variable); break; case xp_LeftParenthesis: match(xp_LeftParenthesis); result = expr(); match(xp_RightParenthesis); break; case xp_Literal: result.reset(new literal_expression(m_token_string)); match(xp_Literal); break; case xp_Number: result.reset(new number_expression(m_token_number)); match(xp_Number); break; case xp_FunctionName: result = function_call(); break; default: throw exception("invalid primary expression in xpath"); } return result; } expression_ptr xpath_imp::function_call() { using namespace std::literals; CoreFunction function = m_token_function; match(xp_FunctionName); match(xp_LeftParenthesis); expression_list arguments; if (m_lookahead != xp_RightParenthesis) { for (;;) { arguments.push_back(expr()); if (m_lookahead == xp_Comma) match(xp_Comma); else break; } } match(xp_RightParenthesis); expression_ptr result; int expected_arg_count = kCoreFunctionInfo[int(function)].arg_count; if (expected_arg_count > 0) { if (int(arguments.size()) != expected_arg_count) throw exception("invalid number of arguments for function "s + kCoreFunctionInfo[int(function)].name); } else if (expected_arg_count == kOptionalArgument) { if (arguments.size() > 1) throw exception("incorrect number of arguments for function "s + kCoreFunctionInfo[int(function)].name); } else if (expected_arg_count < 0 and int(arguments.size()) < -expected_arg_count) throw exception("insufficient number of arguments for function "s + kCoreFunctionInfo[int(function)].name); switch (function) { case CoreFunction::Last: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Position: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Count: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Id: result.reset(new core_function_expression(arguments)); break; case CoreFunction::LocalName: result.reset(new core_function_expression(arguments)); break; case CoreFunction::NamespaceUri: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Name: result.reset(new core_function_expression(arguments)); break; case CoreFunction::String: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Concat: result.reset(new core_function_expression(arguments)); break; case CoreFunction::StartsWith: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Contains: result.reset(new core_function_expression(arguments)); break; case CoreFunction::SubstringBefore:result.reset(new core_function_expression(arguments)); break; case CoreFunction::SubstringAfter: result.reset(new core_function_expression(arguments)); break; case CoreFunction::StringLength: result.reset(new core_function_expression(arguments)); break; case CoreFunction::NormalizeSpace: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Translate: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Boolean: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Not: result.reset(new core_function_expression(arguments)); break; case CoreFunction::True: result.reset(new core_function_expression(arguments)); break; case CoreFunction::False: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Lang: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Number: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Sum: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Floor: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Ceiling: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Round: result.reset(new core_function_expression(arguments)); break; case CoreFunction::Comment: result.reset(new core_function_expression(arguments)); break; default: break; } return result; } expression_ptr xpath_imp::union_expr() { expression_ptr result(path_expr()); while (m_lookahead == xp_OperatorUnion) { match(m_lookahead); result.reset(new union_expression(result, path_expr())); } return result; } expression_ptr xpath_imp::path_expr() { expression_ptr result; if (m_lookahead == xp_Variable or m_lookahead == xp_LeftParenthesis or m_lookahead == xp_Literal or m_lookahead == xp_Number or m_lookahead == xp_FunctionName) { result = filter_expr(); if (m_lookahead == xp_Slash) { match(xp_Slash); result.reset(new path_expression(result, relative_location_path())); } } else result = location_path(); return result; } expression_ptr xpath_imp::filter_expr() { expression_ptr result(primary_expr()); while (m_lookahead == xp_LeftBracket) { match(xp_LeftBracket); result.reset(new predicate_expression(result, expr())); match(xp_RightBracket); } return result; } expression_ptr xpath_imp::and_expr() { expression_ptr result(equality_expr()); while (m_lookahead == xp_OperatorAnd) { match(xp_OperatorAnd); result.reset(new operator_expression(result, equality_expr())); } return result; } expression_ptr xpath_imp::equality_expr() { expression_ptr result(relational_expr()); while (m_lookahead == xp_OperatorEqual or m_lookahead == xp_OperatorNotEqual) { Token op = m_lookahead; match(m_lookahead); if (op == xp_OperatorEqual) result.reset(new operator_expression(result, relational_expr())); else result.reset(new operator_expression(result, relational_expr())); } return result; } expression_ptr xpath_imp::relational_expr() { expression_ptr result(additive_expr()); while (m_lookahead == xp_OperatorLess or m_lookahead == xp_OperatorLessOrEqual or m_lookahead == xp_OperatorGreater or m_lookahead == xp_OperatorGreaterOrEqual) { Token op = m_lookahead; match(m_lookahead); expression_ptr rhs = additive_expr(); switch (op) { case xp_OperatorLess: result.reset(new operator_expression(result, rhs)); break; case xp_OperatorLessOrEqual: result.reset(new operator_expression(result, rhs)); break; case xp_OperatorGreater: result.reset(new operator_expression(result, rhs)); break; case xp_OperatorGreaterOrEqual: result.reset(new operator_expression(result, rhs)); break; default: break; } } return result; } expression_ptr xpath_imp::additive_expr() { expression_ptr result(multiplicative_expr()); while (m_lookahead == xp_OperatorAdd or m_lookahead == xp_OperatorSubtract) { Token op = m_lookahead; match(m_lookahead); if (op == xp_OperatorAdd) result.reset(new operator_expression(result, multiplicative_expr())); else result.reset(new operator_expression(result, multiplicative_expr())); } return result; } expression_ptr xpath_imp::multiplicative_expr() { expression_ptr result(unary_expr()); for (;;) { if (m_lookahead == xp_Asterisk) { match(m_lookahead); result.reset(new operator_expression(result, unary_expr())); continue; } if (m_lookahead == xp_OperatorMod) { match(m_lookahead); result.reset(new operator_expression(result, unary_expr())); continue; } if (m_lookahead == xp_OperatorDiv) { match(m_lookahead); result.reset(new operator_expression(result, unary_expr())); continue; } break; } return result; } expression_ptr xpath_imp::unary_expr() { expression_ptr result; if (m_lookahead == xp_OperatorSubtract) { match(xp_OperatorSubtract); result.reset(new negate_expression(unary_expr())); } else result = union_expr(); return result; } // -------------------------------------------------------------------- node_set xpath_imp::evaluate(node& root, context_imp& ctxt) { node_set empty; expression_context context(ctxt, &root, empty); return m_expr->evaluate(context).as(); } // -------------------------------------------------------------------- context::context() : m_impl(new context_imp) { } context::~context() { delete m_impl; } void context::set(const std::string& name, double value) { m_impl->set(name, value); } template<> double context::get(const std::string& name) { return m_impl->get(name).as(); } void context::set(const std::string& name, const std::string& value) { m_impl->set(name, value); } template<> std::string context::get(const std::string& name) { return m_impl->get(name).as(); } // -------------------------------------------------------------------- xpath::xpath(const std::string& path) : m_impl(new xpath_imp()) { m_impl->parse(path); } xpath::xpath(const char* path) : m_impl(new xpath_imp()) { std::string p; if (path != nullptr) p = path; m_impl->parse(p); } xpath::xpath(const xpath& rhs) : m_impl(rhs.m_impl) { m_impl->reference(); } xpath& xpath::operator=(const xpath& rhs) { if (this != &rhs) { m_impl->release(); m_impl = rhs.m_impl; m_impl->reference(); } return *this; } xpath::~xpath() { m_impl->release(); } template<> node_set xpath::evaluate(const node& root, context& ctxt) const { return m_impl->evaluate(const_cast(root), *ctxt.m_impl); } // template<> // node_set xpath::evaluate(const node& root) const // { // context ctxt; // return evaluate(root, ctxt); // } template<> element_set xpath::evaluate(const node& root, context& ctxt) const { element_set result; object s(m_impl->evaluate(const_cast(root), *ctxt.m_impl)); for (node* n: s.as()) { element* e = dynamic_cast(n); if (e != nullptr) result.push_back(e); } return result; } // template<> // element_set xpath::evaluate(const node& root) const // { // context ctxt; // return evaluate(root, ctxt); // } bool xpath::matches(const node* n) const { bool result = false; if (n != nullptr) { const node* root = n->root(); context ctxt; object s(m_impl->evaluate(const_cast(*root), *ctxt.m_impl)); for (node* e: s.as()) { if (e == n) { result = true; break; } } } return result; } void xpath::dump() { // m_impl->dump(); } } libzeep-5.1.7/lib-xml/test/0000775000175000017500000000000014176701531015350 5ustar maartenmaartenlibzeep-5.1.7/lib-xml/test/XML-Test-Suite.tbz0000664000175000017500000154333214176701531020550 0ustar maartenmaartenBZh91AY&SYÒ‹¨!›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáØ~ú}£ZÈA´=SàǃÁ4À@‹õ²€Ë kÖê¢uàØZú=ÞÍMÙ‡Mß{·jÓ¯uöëœÝØÕœ[²êJ2Q¾ÛÞ´¶³VÓ\¶åÅæn-Nµ*íÛ”VÙëQH»¼(«Ú&Ó4ͨª5m  -ºÝµfK°¡ (6Á¶•)c 4eÞw›;"Þ®ûëÝïk³¶¸Î¦íšFÅñœÛs€éµæcFA&«ÕÆ@‡q· ñ%¼”¹x¡H]e<³³Ýðógе)é­Á½§Þ¬0h/<÷Ååv|;Æux´,f‰ÛwÙêÐó°ùq{>t-3×½ÅèìÒNlˆµ’40«k,ï|ùŠ>óæÛc£Ü{i64 6ͬíç}ó¡÷×{ž{»m:Ö—lW6¸ëÛï:¨ï6ùÇð:=[nîífû½ßyö-ó¸=np=wnƒuÍÛ}»âÙƒw£I–Öóîø}PEöɪÚÚk¾Ów^ûÐçžîù÷¾7Æ}y¦Üùç‘Y>ûØáãÛÛfdÙ kHE [ªÒï;»c}ßzt4Ö€Ó*h7™•ª”Mõ'sç9e{Þ·ÎçmœaõÅ}¡žZâ¡\Œç§pÐi'݇ßgÀ4jô>[Åôà¥ÈÓ'T]¡qpAÜ éŽÀí¹au³$Ó’I.ÀhØ$Ζà]ÙÀæÁ^T‰º¡°vÖÊ*UI储”*ÌÛ1ƒ»¼ì^÷zÅÚZ¹»tËÄ4¤\½{ÒªÒª(ˆ¼Þ;˪hmÑT'­sm›R0Ѭ†„M[1©¨6@Õ ”|ö÷±l4Ö¼´Ë-d$S/§´yʪ«kl5m£ ð*‹” UI˜ºi'-E9Yà0£JdÔ*НX›bèdD¢Yn«TCwR ›MkEµh+c6×1Îj²4m Æ™´uªWZ†M ÙX J5¨šjÀm*‚®#!*Ï}ï¨/ƒåA& «u…pÔ´2 ¢€ )¡M(L´"ϰè¼À = Àk}Ö÷{áÇ7Ø÷°Dˆ‘&À&˜Li¦†M˜h`†M42dÄ0˜ i4ÐÐ@Ѐõ@L€@b4ÄQ6šž€4ž™2ž†J~Œši©?ML5M”ñMˆž ¦TôÚšž˜ÀSSýSLÓJlõ6¥<“Þ@“ÓMOmSÍF&šOÔG¤ž¨¥I<§¨4¡èÔ4Ó hÐ4 € Ôh4h ÈÐ@h=@€ 4’ M5MLi¢4š~’Ÿ“Tö§¢ž§©µ3 Ôɶ) Ì©¶¦dÒzM5=LÈõ4¡ê=À&„ ‚4õ4f§”i“G¨hÄõ4Ii&€Œ&Fšbh é ib4€˜ ‰‘„Ó›&# ÐÈÈhÀ˜š4hÈi@TQ £DÂ1dŒš2šf¨Þ§©©“ôÓS4C é“M'‘ iÚShF@õdÁ=FhµS#5=MêFL†'©¡Ó#M4SÑ rz!oúÿÅ ã]¶jH{IC$`H—‰ã•R‡èY3BÕ¢ÓKûaøô´ÅÒ °RÆ©(:ÚB”^$Yq±„BÆ7±ª²*¡Q@fRJ„P¡d±IY l"Ø–¥TE©h–µ$±"Å€«$QbÈE$‘@J}æƒD†¢CVÚ-"©*V)"€±ŠÀU‘bˆ‚U‹A@$¢Š¦ÉH‡^\/q.ƒl · ¸aB’Ö Y€ï¬„ÈY­Í¸á$?%5 ÄN9ÎbÄRXãƒlÄ!Y"4‘HwÛbcP‘FUTFZ‘*!$bt ‹Ñ*È*,P¢ØÐHT Ñ©*E˜Ö¡X ²°‰ 2+* BAHJÑ,¬d¬ªŠ)AE© @€ÛX‰%E0H¤‘d‹ [h$m„¨ $±"Å•ª•*Q‚’Vµ‚!Ý„$Y"À Š‘C °-¡m¬+ ¨ý½ ÀÈ0ª[D%¥-c`¡m0%-)*ˆª*1§þûU46 ,Pc"  ˆÚQFEˆÅUAÙ* Qk ‚€Æ°ª¨Š‘bYb2"AŒcB+jŒAˆ•ª ÅQDQ$üAˆ‚ÅA‹"ÅV$YF1DD""ÁX‚fRˆŠ1"‹¢E²D-ZZId%ª«iˆƒDP@R‘‰  ¤X(B1$Š¢‚¼RX²XŠ¢ÏÀlb!+`ŠÄ»)÷M€Š³ô4¨$X‚¨±ER² ¿w2™{CVRH'I¤ÔÞüêQôÐQD A\‘QC~Ì3QH|ÚDzhÿÛ@é¢4W‚ pà/aCœ"*(áS,‘Cþv)T x‰ÙÁCbºÌNNÈÀãàȨ‡¶Š§!ö°^‚"¢!¶‚‚#ÑrUÊzƒ…o¸&Ý;­{úõïùè·:Q~ñÍ;¼ä@—­ÿ&¯—ò{™ùW7'¶{k¯òCàÀ×ËÌm«úOssfÚë ª(‹ñ'Ö< (âsA ôónO¤`=Þ¦ó­æÃë~—SÛlgñ>7Ü#À¿üœ}n²ƒ×U}ŠîvT÷øt…Ïïl7K›ÇŽþºKvîÿü·ÌôÙ¯ó¨?Þ ã|–ø=ó²ãºÞ ®Êõ]L½÷92¬ÅH¨æ[E¶Ûl;,ÀÞãvæf E»¹‹ I­ÒÃÄTU]UUŠ¢uf×QU¶ªª©ÆõUV-UUUUUUUUUDÕS–UTXª¨”쪪±jª ’¨š‚Ú%k6Õ#¬=lCQEP4QC°Ê8ÛQEREQEjª’ªªªªªª©*ªªªªªª’ªªªªªª©*î0hÑE$QEQEREQE´QI1QDQE‘EQEQPA (¢Š( QEQEP(¢Š(¢Š(QEQE (¢Š(¢ŠQEQE¤Š(¢Š(¢ŠH¢Š(¢Š(¤Š(¢Š(¢ŠH¢Š**(´P“Q¢%·m¢Ûm¶‹m¶Ú$’ZÙ;‘ªæòT®n:E&Ó¦o5Æ›efa%V ³3q9·Hnä•flˆÛ`ÛµA˜\y´Ç0¼0dÉ£Œ”K0]­1ŠYfÄ&PÑK\Ü0ÒCº $jI‰yµ šÞ]F ÄæÄ ¼°íÆ*:Ö5¸[nÜãJ²%“72䎜®³(›«n8 +»˜t²%›u[íʆ:ZZ÷2ºÍ£&Õqã‚í[^nLDéÃÂëš’OiAäØxi Ì{°n–s]Å5eUªða4]ÜÌlVÁ#Ná×à‘êҲܹ¦áµ° †€Ó«TRmº&mªDÆjËnÇ©šQDUJƒvfhÙ¶`†×uŒ±™2¡±jŒÙ„ësv-d¼Ñ ¬W]Üi5µÈ]É»¸C֤„«vhf!A°kÝʕ̠“·X²Œ­=²ªPÝ;¨ØéÐcʶ<×\ˆ˜ͼY^mæIcDŠQ¢âÖžàÜtÈ1…s4âšA©æ´–Mʛ뢜w,0œYÈ(FíÛd’•¯hª]M+¡©¹šŒµ—P³Ì;1×lh×Kiº`Ó‘Ùׇn,Ã4ȵÌ7cЕ/&Õ«QG^m±‘hY›¢™·Z{SÒ+1HܪQ‰«:¨ $$ù~ÀH¬DX±bÅY1ˆ *H±Pˆ1‘`ˆ EH€¢F,E‘+**Õ–©bÕZ©l[)Ue’Ih–É´ˆ¥)l*–QUm•%•UJ«Ie"ŠE Œ@PŒ@Q*‹KHªª–X[ÅT–¬‹dZZ…¤–UXJX"DQÆ2 AdP‚Ȉ«"É‘dYªd‚1I"2,‚0Xˆ¤F ŠŠ$a "±cA`2AŒDF$X ¨ ‰Q Žs€÷÷Ž}$›y$=’ $Œ6þòä¸è˜"I¶ÛJœ!å jHDn ’KfI$’6Þ¶Ý‘´ƒI4YGƒOˆ”O ̤’Æì’@öI$“RTd·$aèmÖÛfb$"xm¶úÚ M!l6ʵf[¬›:Pݼ)Ypr„¨,’ä ‚ÈÀÒ ¦J¢(( ’j’Äb—01¬ ÊÙ³S)F Æ1»³4Í$ ¾ÙY ²HI6svÉ 7H²ÂµÆ E†)†(ÍÙF*ȱa6be¢!RŒ*T'6ÃbÉXT lŠ´X,аD#‘D`#"0F*d“$DŒ`ŠRÊUHÑ­Z´²–Tª±c2,’µ„P`‚ $XÆ(Æ Å"¢ ï[»¶“LŽ’]U]zAÂð wnΜJîá …ª¬FnDƒ¤²Ô uå'8ö Dá«1`‚¶l¹Rx0*n†]–™Å¦\Ã0Yiƒ3f$Ä[° arÇ“œ$¨ §É5@"(\\Mñ’(:Äš¦ UÚÊ]ƒ2j`î‘»rC§,݈75ÆmjòÃÌy€ë€­†8FÓš·dq"äæ £hÕ‰[ Ç’]Á„ˆ“qãÝA™Üc]æhÓ†, î͹¡\×ųE“+Z0îQ¡{Tš)c/¶<'È´&ÂÐöÐF‹“°Kyy.ãÛ˜®ë<Þ8Vh#@ÙÁ¼ ’SÝÍ<s8åÍ<æoƒ1àÞÁrêA°ÔóD†¡¶ kA rCÅÊùÆ\ !Ì\àŠîèxë#È·kÊFQ@(óo.ô²à85%qÍò¸›uóTáa½zÖÅ30R1×qƒ£xÖÕ›nªQ$U¯º4jQ”?DËU­„c¸ó®<,»€#vÆ4JFVA£ ªF±RCª!f\ áÓ£XCus@˜Ð˜AZFÄ©âr‡ƒcw[n·X•BHnÓ9…Pع±cØ‚fMAåøÁE5DZñ™‡&©É\GV ºlʳa KÉkɰhšl{›‹s¦“kºhX kä³›^…9áÁöß‚? sæúüú/¡G’eÈ~¼à9³ºw‡ºñ‚(¤‰G€’Næd/e1˜§¸pGwm^,&HH͆ZP´¡iÃ0Ã3&LÀÀÀÌ&L†a0ÈR[ F  ÁÄE « ,šxm^/&Ü\Ö®MɆJË1±¾9rLàçO‡L?ÚB#Õ¨ ø ¿ŠW3Zbˆ'€£øº-µ…CTT‹çÄä}/,*;àÍ嫉 ÛXP;†Á­;öÌ€^½G‘÷¸Ù/§ÄCjàt\o§²×kù2­×ª‹Kç·% „  $ƒÏ÷þUË€E‚Ÿ ©²Ø`>K}BX`[Âè5K¡»Ÿ†/U(Œ>VK`‹ëb´D?[Ôz‹®ƒŸxPýí­OýÍ€ùŒ£ÍFÊ"˜Á ýº=Å”ðP<ìšs4'§ƒß££ÏÑÔ~JATÊfý²ÒžfƒšÒ=ìηj|™÷8~§K¢Á {‡Êþ;úÞthw?'õmù›4¼ hÛzý;¢¯cÚ¬îÉAÎÌð|Lª¢€|_+¼Ýv¬Tù[V²†U¹Ýì6Qÿª °OSÄ5Ï7u2ói(W¸SZ}ºÀX_/IBŸåÃî·›žcþnô~ý¸øÒû>’‰÷ý}ý€¡áâ JâÃGðÞ“ hþ8µç© ï¿Ý—Òöx®0™iÞ÷ÿÿX0ÒõV¯ÒÒùk‹ðZý€º*vqE ŸÚR#j~oçÐòWÔ³è¢ZoOmHz_ùMÕ€7ïo1¼ðÔ¡á"¯˜pƒíÑ^¼m€ú°_΀yH!µ:(.B{Ø¿§æÄ/ã tØPpàw/ñ,åÿ­í¬@<”kšç,ŸäEÇŽàYíðþ¸ž ‰òÐî3ñþÿOѺŸ½—ë}÷QWÅãéý+°;¯w¡S~nŸ,¤‡iþŽÝgŽŠyhQÑå(<\3ä£b ãù=oSã?–çmí´'üt,¿z&~Ñ@¾F>Vôûyà~E<Çrê{Ïû?r‡qã´¾=ÿÀ9®š€G™Ã°û¡ëÇÀeî^7í%V÷?ÁýeeP«¦­O£ÔúŸ*)WÆûvYWù_9ý* £ZÞÂâ…h»‡}ò1Y9wìe2`Z Á±eó)hO@\y-Ÿì£Õ”¬R*L`SŠMµósꦓËÀF.Þ\Žññ1 ûXq?še¶$@@¨b8ƒŒ0!Øz¿§òîlOÝ÷ÊÁ:Hq §¶ÉÕãñ>o›-Û½ßózÞkŒ8׈KÊxÿ»ÊÈÀòë!ìV˜C[s1óLÕCžòù SðJfr¢T®(õú‰•àŸ¦kj³æ¦qzÐøWxf€ƒáiêñž z³Üy0V|“Ðmù½¥îp/à(€ìvótJF ˜€¨ÂƒZ×péTU?ˆX0ÆTc3ç騙€ÚÞ¾ ³1iÒZùÛ!‚X$oŒˆÿ¢"Ê{êOTyæÄL;oX€KW–~laf¦\¦ýIç&â²bą̂;#v®sλ§,¸e¿£Âé1ˆOú£Œc†²‰ÞÙØ3=8´§w¸ë|>væÜúеÏu2@åÆ{§cø9]æBùw ÆTùÑ{ßÔAÎN²y›?΄QÓ{[’wSç™ÆW'Iu^yOkÖï/?T_)βŠf™•¿3¶:ºåu¹iþdÏ):š YJȵ~fj—?ÈžàâÁsŸ1ÉcoG†<`AW¸@ øýI—|§‚êS†¡JÄ„¬fS¿›9Ð[ãÑ›«B„8„ £€)FSÓ0ßn3¬t¤ýÍ…K]”D%Dò#œ–äAýÚ*ê{7Î\åN<£¼üSwZQ]bŸPÊ•5ò|è˜êbš018¸ž5¢[Ê•øm»¦iƒñÚ¶r}-ÆD•'#öKRÔÃU£EÁ™×Àr!Èg"ÈÒ³×=õ-( †#³OB¤£s×I"3ö¦t—UƒÜõš˜L´«¦}—1팒!»[¸’#Ï4¾..)ÙSò ½×5KYi½ö}ÞÏà?k‘1ΑÓV™Þ#¯× ¥ý{k,`¨úômYÐ×R·Ä{ –rÿ£OcQkkÏ ýúN“”[RÍ£¯M[Wû•î²ý¹Ýwžo»1/@!L¬="&ùu?ºÌÐŽ«—K¢uǺü¾¡öÀÝ&Òz¦¸|/ÔÝŠâ%Û}fZ[¼t™ù7r„^b̰€\}gFçoÞK^ Žç=ƒ³@qPðñµátK7;Œ¡½i²þjw¢à,?9>cÁŽ?€hä¶y€•ÂŽYÐOVÇ6(ãÂäl˜ZP>.9­šÎôý‘ïWúdü×/¹nü à˾0Új³REø¨!S°`ž}É)™\:)®Ó, p™Ló?øO)ßÿ+ḃY1O[c³ó,0¾2Ö8/ÍÞ8àw0ãH‚5Œ¨i~‡¦·¾ûüçæŸå€=Ê×–h-#3€ ILàô—خŷ#¿/„IÈ”`‹$+}ß?Åâä“Èdu1qãP}¸pè ¤Éêàb;¦*#çøýì_ÞZÙ¹$nÀpÍ®2}4 ßHâD@]Ò9“óŠÅPN# âqì˜9ILï·ÿ>Ûúþ¯Á÷}N¿U !*B#„BHD$T"!Á`,ŒV,V Æ,ŠE1"(£Ä¶ÒÀ¢AaY‚2)`¢Á‰dЊ,m Ú°c¡cU+•"ƒDRF*Ä@XÛ$„”Œ€ bŒ*ÔÙ J¥–ÒÉd…¶ ¢Ê«Y(Å‚‡ÞXJ8À¿°´J\µ2HBõDªZæütû¹ÕvŸ™˜xCüᜉ>þÁ*¢¬‚ÄÀþ ô›;_Áe¥MŠÑø;Á0°x¬$3ÊI·ÖwŸø÷X ¥Ê9¢Ši6ÄK£5È ªU:Ô½ÚÛqƒðàür›ÉNÊ}“ rdü¶J±•4pÜnÐýj›)Tªl~郚›J^ ³Su2¥SöO> »‘«v#Gcâ§t„†Ì)TÕL6e’©•6R·`ÿcàJ~"Ÿß©¢”µàÁþrŸ«‰ø_Ÿ‚Ù¡ÅcÁSôªš¦Ê•NjljæÉýê›80l§kc=õc|§]ð“«Q‡øƒwüGí¸åàì§ÁÓÓ·«w_ÇYÙâóeσ]68ønÚáëC0j©Ø§%˜YEX;Q˜‘',ë*!MüTÎE ÑT(ÝÄRè„ôó[¤£rQ™ËÀ(µÁšÙ<=Çöu†GŽÐ+­ú<<Ç?Ü{×xüÜÿíä´ŒÎÜ ¦1`°ˆId’ÔD€2#!²*D‘@°´ ¥€QT S$U¢ª% Eª$ Y!‰XLBIˆH¨D¶ U,§Ù¢¬F KI²#Ê•Lª"È¡«!‰PWÆè¶nWîð|²º±ÀÈ]µ Þ®A4¾± `7ÀOªNι07j·U:vÞ3˜Qÿ­B½µJmâ `Ü ú?½Þñ÷ü4Êȯ+Ý2_Âa ®dåô‹âD Ì@ ˜W `È¢k@½mQ̾ªé.׌1ü©¨ýô OøÛåu^ŠT¿k¢oÀ­ªNè𦠟 sÚ†ýLË`jÈ aøládÛûHwsK¨–ãilÜ|qš´Ùüy<¹t9(}õoˆ²ev¯¢¹oÛ÷ÂW¤pSíû¾Îr“ñÆ.¥~(§áZ’RýøÆÛ§½z8^ªaŸñbgÖ’«ÌË¢žNŠ} …ÏUï2}0Qvl½¥ãáNóþ†Ø˜R|Æu":G_î…$GiŽß“ÀKa𣘳B¹Õ—f€zàC>¹y··Í=”Tnc‚–ÒO)ÛÕÓAU¡ñíÍN4NÕÕètc åœÔ…ÞªÐNü Pä¦ðÝ9¿>ÿuÑ.ØÿMÀÝÿ‰» ÷ý érž‰;6ý)Ïîî\¦Žd²uvw#ó+Yº¼K!öê´üã¢|Š­wœFի넼 ”¹™ ±¤Ùº¾oqCX­Üî]ÜO¿¹¦E‹Îü,q„0 ˆª¢AV1QŒÞk¢„Y) Yý¢dYHª«b2,D‘H¢Å‚‚„X)Š,‡fYHF (TæÊ""…§Àª!T¨W¸ÎAеim³¢gü À?c¢Góµ¢@¡$ýt œ‹UQ"‰A,F(ò´æÉ ²"1Xƒ EDEEPUX‚¬UdRE„`?ãã”?¥)™ ¬‰©DbÉ+–hï°ñDJiÅ£*ÒU4Ï Á¸j‡þ'QÏÈ.Ƈy‚èhq>Á©ë?@ì“bõ‰‚SO®{2¶‰ÓeuÎn²ša*#\픡 j¢.fœ-›¥-O²“‹:Ÿ +‹2½™l}¦“cëkqŒá26Ñ è%óY¹êçÒ#L,iÓS¬¶49Æ*ú'hað”Z»,Qªºë -%´QT]­vRÁö ç&…µ¸-n›è¨Æ4Ĩ=êçÈÐèZ®sT®q5Ôµ<-0ƒ«‘‹ÖÚù«(˜Q’ÆÊ«¬Â„cÆ0|[D鲺ç7YM0•®vÊP…µQ3NÍÒ‹–§Ù IŠÆÅO„•Å™^̶>‡Ó ɱõµ8ÆpŠÎ™h…tù¬Üõsé¦4é©Ö[ã}´N°ø DÎM]–F¨‰Hès¬4´–6ÑEPutZµÙKØ+œ£e†6JFŠíªªªªªªª«l²Ëm¶Õná×nñ2Äøhz}µ0ø ̱²ü´Ñ=P[Œj o¢Q‘Q"8Õ ’1HMb1þ2B)$œÐ†Y!*ªµe±ij¶Ä“Ú© od ÒT„ÊQM “ QjBBÕ 0dJ‰@±P½ iaKÒPŠ-BX-QøtÄ‘U Ô8XkòðW ·¢0 ©Q7üË©ÿ:õÄãq´«Q6Òj´q9#.&– f¬¶Gm©G¶ƒ„ù¾o›8òyN×H`/†¤À0DaæZ,†ÕÕ¼gI™RÒçþ#°ßðúf`À<+Öj ,}©É ЭÔ\ESyC"¨.1Ó‘± Á‘TP‘\‘¢‹’ ÔQDÄU"¢¥H0Úûû3ŽÂÆÐîá„Ô¨ü†¡[”SBM²ŽŒ×ÆyH’"ÈŠ‚¨ÑdRjFIÀõ%ë ADˆZ63m‘3צLXbÒ¡bQÖFÌ"€MZR V0‚ 1a° "@¢¨ª†™é Ò,6C“%›™5ªÿŽ®TÑ¡Ø0v!žÆÙÕÒÁ2róQQÉYBAôtÍ!UÒ »KR¹{Õèn;jTW{ˆÂ^Ë3u®¿*ÑçCI3ÝÞt¦ìU¿mÓ<ùiÎɦ7J› Áû?ÌeFàUÏw}eM—ü\GÉ8•eÓúZ]ÂÚjÿ&O{mÞ`;›Cä“”>¡ÿ7©ëŸàLø[F°‚—‡ê´dûð‘à)ïšž>±9i\LÞ÷ˆå€ Z‘Ôȹ„ÌÄb[áu1žñœŠû,pÏŽuäî=JŒ^ræn…B4•/?æYyÕ°ÌXijׇþù ÉÀߢöê2<0¹‹•©º^VY4/µ2¾Aß‹üÄþ¤a#þèOðì¤Ê{y¹Ø¾Î™öKÜꇒšB¥·­‹öï ÈeÆÂÖS{˜y5¤œaÈs°•æJ£W/ðe$²ßUQjá!6²½ø|EØÖŠ=÷FMÆ£ªŠ×r®ëÓ¬™Ò¬`/æ«UñШyZtZ#`†ÑB9xýÿ/NòPºÕ³Cš]Uõ ˜åì*«MõÌg6ÚtŠ1k ã+âsÍÚ —Ò•¹e‰±_EQZÄY=yD¥ÖÖܶ"}é=æþoµôíýâ¼n>Ž_Ã6ƒw-kTãïc¿¡Šª^o’geç]iÌ…lÙÕ›U:ž9Ð̜ˆ÷è›*ÔÚðvL6MÒs9dêþîdÓ¡ŒÙ }áWN“ÇSoÓFiÏoì®OÉÕs;,R=í6m¾Ÿñ Ò¹×Á\ËÌj2ßèžôK ðP|ÔAN¥Xõ-–†3ÿ ܤڊkã¼÷l° âèøþ³ü1(»_g^d–Æ/ž‹¶df¼¥žñE4iXØøn‰ýS4µŽd*(ý¥ëÃ讇Ýx¶U‘RK^¬×Œ¹“î\K®ö‰ÑòôWuÏfÕ·¦E €–C#¹>Ùæ¡Í¡“àÉxw+#|¼‡ò%&s,Ÿ¿ œzqüS¿9)^¶æVR¹-ŸÄõ{0âçuæò×®ñÛ’‘Á0Ò÷A·ïßLñéUÐçÏû^·ïïK‹OÍrée»A:dÿ„Õ‰a˜Q–¯‹¼0œÞÃïÜwTh§ÜêÁ˜Zp¹·ßy†n-Ï£âÂØ…IÚ-~bHŠè¹óR`£z}ÎY¤-‚V"^««^ñO”“4¥°cÔˆ¢3…BDß¶$—lùºu ÙÌ<þ~ëãôöªtßÎò£3ì¸ 2±ÞÕÉZK¡•F _VåQ¾Ç†Uq3\­*Æ7C“ì(Ãöùr.8†úýªò¸êÔ/¥V ´a)«öfo^|‡ V½>}ÿ§±æÀý2Ø"}ž¡Ú—`õüŠ?<…•{ÓÁŸ‰'Iغã«TU-½Èö·¼À:a¿öìÏS*yï°‹E—+ÌÒr¶Î˜-¹fe%õË“•s @dGrùó†‡êóYG?!Ž®Ê'Å´K ƒ‚Œ•è^Žø\ÔV0W%@sMd¯æ–%v¤û‡þi¼ßjã}Ê]CÆzÉÛî§$”åšt:¾œÅØ$C~ù†¿yu¼gk­^FïÇ+WEíB?pøý¤ì=3cUüƒ³Vú£§ö*¹¬ölÈúWð¿8ÔšŸÝ%ZGcdŠY¦ãè‹TŽê³Ôõ½òá£Ä»Êl«BW×7ئN—YMjȵÎÖæ#ºÜLºžS‡UÙPB[ˆ»nÛ¿2äx©oÉÎ÷ºun ècyÌs»ÓúŽQë¹ÈFoÄà3Oü,&=ŽyÓÏ+¹¶…Ú¬ð?[shR ΄)ê‚"„_CïÔï2A¦6ã³×¾œéû<ÇAüÒ½½|œj/T×;·oñX“Ú"ãÜ——¬9wâ;—Æ@,½Çxî÷ë7e—'±Pk› Séÿ¨/¿¥FjgÂĦ˜x–¬¤½bÔ•«Ì/¢¯\b:>.¦ Ý~Þ,_»W§“¯âEëjïïyýÕ Š]ÂüHýÉÁ:‡óµÏïJ¬vЛ¡Œ3×M?í<í³›AžüÁߎþÂËu öMÙœ)Þæ>59¯IÞE(êåþÞWÐ=«ç„)z?¬ÿ¥æ¼Ïc«}ù¤Må´¸©úDžïç#¼/Ĭ]\Ëdí}¥Qrj–Ù?ÊçÔÕLTÔÊ…p¶3 ½p&OËEï=Ìݳqúî’(/5 u20§¿-•2ÒŽ&\£¦3ÕìwàÈœ—â+r{KÄÛð™]Me"ZÔaTöïþÜïw˜‰âÂ\W#Á‹÷*[÷¶=-QlX¸¶óØx÷žiÄ…×YFó‡\‚ñÅñf¬7ÎÑú–Þ@ uZYÎéó–õù?ç]ÓQËÔE=¬ÏÕ±v†J°Ásýpù¦À¤.&Èž;2™´]ÞÝÖ-"—šÆ úRbkâÓ’–fezþÿé^¯¥Ná7wKøEýsý",$ÕO‡SˆúýòÐýÿ˜üÕÉ Ø“”Ë…ÉŠV`n$RÀ°öR'ر‚Á÷õj!ÒkÑ’(¯ïy‹YGË@;lâÞkí-`ÛËÑìn8„0Âkñò÷|0 à ð@hÚ[bž>ðȪ â¹iG©' ?‡ò$êªoïùOªsðûðµÔÓ½îÆ<\¿T̃÷!ˆˆrý¦€zØ¡ú¿;ÈÏC©‹˜4â&•©=Sª0‡ã¸6€ó§ZËl"–D­@šª÷™ÐÉ*9CƒR–Õ›“ÆcúŽAÑYÎý3céçrXÚŸ£Ô??x0›!{¦=íxöáýc´ *a‹À7ÈoÄCúÇ¢;È>’Ù²ªÆU*Š5¨b­W·Ña刨c1:`ã7?k·ïú¯þǦú¡Éÿœ Â1Œc<Æ¥ýìþÍöFɳ¬¦˜JŠ%Yøœ!ms¦OàµÁC­ ½m…0ÁDh’˾ÇÁÐ-s2½°9™ô>˜-°‹ê±­XÎËjƒ¬¢Õ®ÊX>Á\å;l¦Ö±­Œ`*„Vƒ#]¶‚_5›ž®}"4ÂÆ5:Ë&õ¢‰Z(ûû>‹í˜1äß³ë»íö|É ~~í÷ÇŸh¶¾Âß½eKSÂÓ:¹Û½a]¯›Ã9D‡#º"´¾ôa*O¤žwîÞlÉ>µDjcZBAƒI ÀˆxX Æ‚u#ñöMcÎç’í"‡`çz&eÊ:„J}“Ùy€hZí·€ð÷¿÷XMgpJÇÇÜÓÐÓ ÌÀÉ™¯C?·JƒÓ.Ø¥u„ƒ‚6%D¤Y–(Q,EUYbX©K%-µm¥’D*CïH’ØRZUA‘QжR”-DTEEUi!øg¶äL(sð†”_Cq#¥'‚¢i~îç§èìÉõR˜NÌ7-YÊ[(ÄyŸS3Šhn–eKæ³ÌîGÙðá÷QEmªˆ¢""Ä|-1+s0UÊQUð„쟷£!Ìòã­@6dž´tƒ;’Hhd 2ùªªªªªªªªªªªªªªªªªª¬UU  eÖBæ2OPÉ …ðÙ—1Á¥Ä½.â\iÇ ÊÓM² €®ÞÌHL„6¼– D(v¸…*g†Xg€~ K4”ëϧ °Ø…DÞ2‚×n/ÇÇ€N!«;Éeb ä²"0³5¯ÚbO>ò°B ÊÐ[W/U¦ú#¥í^GJŒ»è"SêèÇ«nÇáɇŸ\ðO©ôÌœ}¿?GOДKÙ/jw8È3•êJg>{kµ&彸Qö”æpã”ȹݷÏéÓÜjK~¢^ŸŸ¡4Ð¥f‘Š(Jo øK«LûÂ9Û9L8Ù—= øâŸhMXæ×Ûpõ‚žsy‡š\ct[:VvÍãú%A@²üúÓ‡÷çUXjû ²ŽºG´¯þel‰“(u ) á ð´PoªÖ-[(·)› Ï:r…º˜qs.…Šð8ÚM¿ º—-ÝÊã;å¤Q‡ ÂSoœìƒ€O;æ™… T8Ose…Â)@ËÆÀ gƒæÖ;¨\yŒì‡‚9sá¦,S_6cA};èÜÜÕ„âø¸<˜©šQ˜¢ˆŒu¿z§ox´…Ìx#ׇ¤t¶×‚3ëéñõߟ uôTª*ŽÀ?xçè«9êD@UM'¦ÓuwXÚzU´c ‡rZè…•fŠŠª¡îÈ}²?v1]¡oDË ƒsx{A^Ža5ñ'ȸžû*†­óƒ²ÃcŒ¼°+ýkðmi¤(VÚQª¶èad ×gÞ½Q•t # ó<Í*ÔC6Ca~p”È0ŒZöÕËÊ00Czúþ×¢hÖžî»jŽúÝ.q—}ËÐ`è–K&}ºÙËõoéá ªˆ²^õЦò¡w-è¸yØ“*¤7£.G¤FT”×d%›ÅKòdÉ’Ü9\Ì¢lƒ+‚8PÑɰTY{(Òg]†MV0±ê“×ß(€© ¤Ä7á-–œMþµ¬Ó¤èúYØlúÏÍüîÃÝyþ»àú¿Gðü¬ó›ÚîwãÃÅÓ²áü¶ø}„$Á& A-©E,D€±„I0ˆÅtÒ¬¤K!*ˆÏÀàTïß`@P(r/`þDâó ñ;Ñ…s£¤?ó¨~~AEω£ Ü(½ÂÈ,yÕc TOþ‹SÆýÚ©!øTž½S­‘ñW!,¦î†`eÁ2ÊxXýb¶ºÔÔ#ðȶ®;ž…Ô ½ïH[¼D½¶ Ë'us¬7ù¬èÎmvðÓ{jM÷xŸ|ãÀûNï€ÑÆt/Ê‘«ñÕÅîD×¼!ßðó}ÿ$„‡R\;ÌÇIãþ•7Ù÷Æó§/˜â¶Øä2Ýj È$1R$UAŒ‘HA`ƒ $ƒÁ@R¢U‚ÙR–Y b-I(¥F1HÉdDŒ`H¡H£H°$þBƒ"Å‘‰ Dg†8\D)oã#“•pcM†•Zó¯'­øÄpFž5Š¢[œH™ fƒ.:ñ9 `DÍeiŠjUÉ…–ÆV$ì2`‘•ªxªM^™¾±v!E„i:î=¬Ys–v“áPw3—M ³€L¥ºyn |8áäy“S½xÒv›ïÇ ÕÀðá 1@.ŸÎà¶ r²;;³–¾ñ7CÛê»Å{î¶"Ô§;:tÐau‡§åÙúæðÎ?¹Ýøw˜qùG‡ÑzÏ—¯Â¿Õ:qpi#Jy,“(ýÃLañÛ0V' 'êÐ*ý‡Ñ 9Õ8¹Çåñ¸s5`u‚aBŽœmÁç‡$vc˜: A  ‚ ˆ‚!À‚ ‚  ‚I`ÁQÂT‡²çÀa_GÞ»‰Ómc¨öÏ}M=ô]ÝÛÞ÷½ôß*[¾ôíßßwƺË`ª˜½¡ñnå3}Ç“&;/¾Nª¦Å‰õNxžûðµÔÓ½ú ‡ôüúrŒój}eo¦$úù›äCT˜žnÄyÂײsÜ2›˜f¨þÿÚK‹ÒÑLÆ„,„HE‘4­ÑsõŽ YÈ’"D‘a!È|—M€à ÌP ¡£(ÃÚŵðRgÎU—Ì[šîÝ¢Ù w¹6¯píËpíÒŽ_.ëŸi!ÜÍf!Gbjád­¾{= ô£‡HÌ”tûu¹”_Q”y¿*·q4lp{_Bo5D'¬‚yÃÅÃÇ®õ>GÄÊ;Ùdž6g½Q÷d+ m©w¤H@»@ô›€8윜ât;Œ¤9Š€zß]Ötuº;%‰$“K‰$˜IãÇ_ŽÚ¯3GKK«èôzR%‰$“K‰$˜KÉ,ÌNÒe¬ C‚ÐáÞ©ªµtÉâh| ¤¶æ¬’è{~H‰¯çx‚]w*Œ&™ÉU:+Dâš1õz™VÚXɇ r¦L˜L Pí°¹%ù`Ö/‰”*¸[Ày3ìC!¡'ßÿ(ªªªªªªªªªªªªªªªªªªªªªª¶Bo¹7ù¤ÖIôÿÄÿK÷'½ý-²‚ZT¡7dñÝŽäv‡Yt{GæbCºke8#äz‡Ù?^®§>'Éìñ½ß'„Y .)ˆ‚TQ-±˜9T6R·ÖÌN­ßq5µ„4 |G¹^ìw©hµ:¹Ö,µœárUäê¾Z× ÇÿﶘtYd#àÈs÷V¬á 6¦X¦ñ©Êd/lІšë¨m/ áñ£¢ _(oûþ7X G€ñ §¶ôvGwÖeÝÇqƒ ïìÓÂÏUb.ϲ3–‡Šb“çìÚuÜå‹L- å[e›ÒÚÆ‡pK2äkPÔÑspïÌôçQ!†!ÔXw„㓞¤‰ ¤$2lüß‚ª¢Œöw÷Ωö%fÞ¼0jgÆO{ƒW•Rb=Èï;nÑ»†tÞ¨!®nf›#{<ßè{@ù’Ä,’*ž·–|>Þo#´{’Xë,ŸOÜñëà:¹'\C°¤IVT@ ¥ªVæ¬ouU[ˆî E"b üP3Æ´¡Hqµ‡tl¿G×à=€m'Ùqå¢@Ñ‚(‹RçéeËZâ¶Ä})“n¾¼šôJrôúçfÎþþîzhÆî›kºM¬y¼¿Ëp´p(Ó(&ø×Þp×?6wHÝ/ºº§¡Ðà`=ÜwÃ@ꃹ>!ßçNø‰í|;ª¶·$‹˜MrÖþ]²‚(p9ÎZËD#FÕÞðŸ 'â½­~ÖbL¯7­ .¦¶“¿äø*;ãŽBtyêéE¬U‡w —Ú"µÁ°r%ršÄDÓh¨‘¦— L1žš_¯£çÖgYÃì>rÛef;Z¼O‚ רE‚¬µöu7;¬M9Ða¥˜Òw{¦X³{ÅÖ, !X'ü[ã>á‡Ë¡‚E#J<îÌ»›ÍdJ˜L*n•y`¶#K²Nx¸lC-ѱ´¾#¬ëè™&ÒHáèãR”¢à`š2aʤÐS2Èoè—iúvc‚`çÆxp tN ©­Jtƒ¦Ó§3BüÆ Ø1ÇL&‚Ž/Ó$ß…åÝÉ&N¤êjО4ÕØpWN-:›IpÆñˆÏÓÝÛ°ôX[#d©É‡a—d9Ã=Œ‚bÄíó]ScVãj÷ ‘Ü&™Hƒµ*š+Þ"fá8ï8ìæÀ¦Ä Q¸î6"Ù°ìÛd°õ%¹Þrp7m<Ú ²LKºu:Ó L2æÌ‡¨æçÃgÛ¸dŠ9x¦›‘¬Ÿ8/lΚÌg?\‡Ví_C¯Ûú|öÛ­ƒ¦ûì~ßÚ¾ûòm‹*À=~Çu,¿&= < ¬¢ílÕ¿Ý[­kn­Å³©©¹§¥·«¥ü×nõóñ¾fN.ãhëøS9x”khìè˜áÛÄ8ü‹¶õù4¥ÇÙãëéï¼Ë±™&¨2YF3=1ó«ú`°m½N<•#½.?0L9O4DK2H-6"Œœ„¢–¶|}¶†´ ˜µ9¼ Îg¶ÃÈäô“F¼ýV¶úNšý6쇜m¶õ#ƒ¾¶Ë9<ûzŒ9Yqq³ ¶Yez=+:WHÑÃUUUVœé§GGFÈæ²<ìœ~'{v¦—0«6]ˆñ7¸ú]”ÓM6UU\ºë¯5u×]UU¡šš:½[µxZüž†{,Ö¶ÝM÷'¥Ô_}øöÅ•`ÍŽšYzÎz[¼o'C‰µ±VÿfÝh»[fÜ[š›šz[Zº\ë·zùøÝNN.ãhëó&rñ(ÖÑÙÑ1÷ˆqùmëòhê¥.>Ï_O|جÞoág#bÜõó¸­W"î†ó/Aý 4*ÛǽÁ«µnÍ¿_y§¿Úäèht5yo§O¾Úåô0ñ¸ýZ €fê5·ºœ.N¾ú»‘ܺ!íÝGLž¼‡ž{—¬ÍuÚ-ñη¯HMSH NúOæplÍ| ÷¾x2-ûѳ’ YÅ00Û^ÄÉ/2nü2ÅÀ¤ì2ãØxe5 ‰B/‡‚*… „Zñ5ó÷!Êuž¯Ff ¨ðxöãÉÏÕòy¸rœäGbXß’£^!# \&äÒJw§}× g¨ØÛTSŒFñ>_O̲۟„©/ÚÀÛ›Hò™S EhºlródMu€ÁtÀÌ9¨—N§­‡“WkÙ¤N2t=‰”§9éÉ9§{ï#pØ‚ïZ‘§<±èÒæ$¶AÝ>‚bwö±®ÝL£SU«“UÎ=Òwì5wŸE–.Ý5·S1ÇÀÂ4áÊyºiÊrŽ.iSt©Å4L…æ8'£ÅÀösnòšÖ7…w ¥S—t—6¾}—bÅï5¢áœ0Ún°ÍÉ·ô;ün£ î~÷½öy^‰•Iœ`ùc0^MJ¦Ûô~®ä?r™F6µÔÒoã!!KVE–õai—[£›ÄÒËsŽaÂróÖ~—àM÷¼|zëÉ ¨åÏW³á{:“âá'y8:›«SÂÄ“¦½¤áµÖéôÓ>‡-÷Ç)¯·Xx°YªŸ"K~ÝV`‰VáÍ7_/ÄÇ›eÕé£=1ùMs_'ÓÍ@ÎIç ´/ÇÐâxlw²ìÉrSc œÉAyp¬ŒÕt ÊùŒ§hÆŒ3š#Úð›eÖ©¿nƒ-kéËÁ\«ØžÄX§´#ÙÜÑž£!ñôß·N'>ÎÇm©ºª«m¶Ûm›štj›a¨âÝígŠ5ÛÃG‡S­Ïãû¯9Ú©ÁØ›7¾YÒMèù5T37óxqn•ä6I “+sg‚eãËžjlDžùX‰®†â–IGÚN™ÊÁô—ë¢e óe‰bRRRk5J©Â¦Lš'Wcm ‘LyÍØÑ7a®‰{ý†=C=IÚzOŒœunŽi‘¯Yðõ§3U³£® “ªv"Ζ}lê©×ËdÒ|é6&]‡ó±?‰ÄÚ'ÏòûMWûNôàš•:ß7û²úpa*]ϯà;ä ¹äBŒ…a E¼ÕsÛ¹76iÝJp€Ñhä:+ƒšò‚;±ãé7cr…E6õ@îQuŒÛy8»· sƃ3» HäjOp'Ú§¨uà¼óöë+’ñ\5?·:o»í+Y2O §$oºý{þçf·%Ÿ š³ÚiËt†¦\®R±8|ÿ8Î<åеêÚÈ"qá@ D ËåQ:‰ )}—U=S—¢Ã=TfšrsXɼ®Bh+/q—v›ä p âtã]X˜Òá¶£AÓB8ä: Cëñãmá¿è.ןØùÝ÷=z*ö7;_€?dÝïɰw†©&Rb˜Žbìy§k'‡ž C‚ `f6òªøè®¬ãS,t›¬|$ˆXÒBC2H5ÛyæLƒ†@(!ƒUŽÖÏ‚æ8çZ¡búßË×a¼6ZUúßZüó½õŸHË»N¢u§YɨÖ{]#…¶O3F§ÅÓâú~ñÄ…çÁÍ”úûïÐa8)ðÉ8èß\F*¤µŒª–I§z-Óå*Áš¸@$¨$æ'½^»õªAS8N®Î†¡qˆT ¢€™}h|æƒDó}æÉó4ð}oŸÇm¬toÛñ_Ù¦¾Fݪù\“/qÙ†½««W=4j9a&Øú;¥×Oy1­€—;PÖRô72=”žÛ»|“Ÿïÿå—|&Ú-KStùáÛ*nAvCdÖd²p^‰™'Ûûþÿ§HótDáO°Ññ;ºO·ÛæþîòMΖ)“Ý{¹¬0ózÜy{šÍš¼‘Ë.LÛ¡š…:—œé yÀ2I)¶qÒQÍP!EŸz®+E*>“ë¤òå'f†¬Ï§²dŸS}³öùzÛų )S÷»M¯‘<||Ž¥G¶áâz^v„Ù9ENÛ®©†¡©^´© ò„ýLöÙkÆßëpc½s»FZìæÞt5› Ö*ÁÑ1¨¦°Âù6'— JÞ<ém“ Á¦™Ä°›¼>-ކ‰ÔÀéˤòżØr|=¯'L'ÅÉ€ºÓ¢œ[açÊw«CµÖÜÓƒ_¨Îº°Á£ß I‹mX•büiÇa±¡¨å×¾¬ç9Ù±¾‚gà9bÞ„¿ ª{‰„ÕUw“D0Pu6ùb§— ãÍI=6&'Êê¦ÙzÙa„à}åN\zöd:´HHhs^xGÑøZéÖ˜Á5MˈT=˜Lòdà©Øš;Oªrˆgn#ã>;eø¯®ÆdêêsÆšñ|O9êd‹´45¤'‘¨ÿ©4çº8>³È®¾~M3¦›&‰•f[[6 5ñæ¶iÁ+¿²~‰2Õ³ ôâbGÙ«V¬&¢¯<ºh:º«¯7«õº¾Vñ;žçl=.×¼t攞QSçö-®l§–-øwN÷….ïÏe§§‡{+¶Ò3b€!ïÁÊ`u0M+.ñ)\Ù£ ¸Q”±†¹pF¾Lt.]<. å7sOYÁÕ.Ü;S’TäžtÕ8I²a4TÝ9ùžó¤ß’@¨±">ÓÅæãO/ñ±¬ìa¼W‰Üñ÷;–ï»Öí"'F0áå^oAÖÙ:ñ‰¥ÎÖÓM$ìe¾~~sbYIÕºzSdàãÖǦ{V§.^YÈ稖MæþcÖr^"Rs'Â7½¼ì~6…ˆ”EÆ'Be5l!¹®™—S×unirF½lË]q¦ó ÇM4›µñ¶Á¢G¥ ö’“Œ@Ü ‘Î 4PîPØ£kIÃ2‹€W×ßl匴†@ÎYJc¾aÔê‰ßáïϬ쎗(ñ¥t&âq±€]°H³³T­„H}­˜Hn'¬›*qÊv+Ñ‹oò\Íææe7σÈ4¥²É"S$ðõ¦©Ix5^; F?O'- «3³°ðOCTÓíã,\úÔ›žJÖn&µ.@Ì–6(¥5NAØ9ÄuY@&Mlt[|—1¼2 ×CA—8ÓÚå:Œ3ÓY­’$ÿþ<}ÉñšàO>œEËÚŸpªªªª¢*ªªªª"ªªª¢ªª®h}Ý D£'Ë„Idô’q!öG>nœ|©±mÈáh=š3ç\#SSÏar™Uc||¶K÷ždù‰ÆkÉ1ÃjʳàÁßÐÂxuMÛï™÷PîJ’aq'•) :—:>1úB†žÕã{t'Ù¥#¢y{ùLstÏ-—öþÿvÓƒ¹Í©\^E)^Ã쓦Kw¦ŽÉÁÔ÷èõöNC˜w­'Ç,˜L®Q<éUØŒ“Õ‡Ôr`ÙíjW "›>³,šå£G×T}M“¨ÞläÛI£‹©ªjy½þ(cÈM E“99»“ÙF½¢Ól¾=VI=JB²KbHEE‚ˆœ¿i(4ɘÌo‹?ötß¿mœÛbÛ+öaòò5ëâÅ1†MÎ ƒnÿ´ôÏ3 ªå~Ë3R®˜FÜ9üÆÃ‡i®ƒ ‰”Á5 Dñ-Çìi~°ÎòmthL}„ÃêÕçêN2I0$µ‹BÙдKbUE²ZE¶¤ ¢«MøsFû´a+“;^yŬ75gŽIˆnŒwˆfXË›6wÕàš¶š ¦ØË üÌ›¢¦L)¶¡Ÿ’ fÕÐáœN1yL™kS–—R› !²çœ9âÇ™-”Nz`¶CÅýîæ¬€aKsx«Z·ezý ïŸ-]þ_'®†¾OÌ߀Ÿ™î·mÒ0 ]À0 ä1b‚1ªÛ¢™0EÓ2óÂ…^¿õêpÛþ¾nT̾ÿnoû¿w£?ŽuöÛvö=¦iÉ_¯q œþg&@©—7PùÎu_Ǧ±tY€Êäž[[æà *×ç¹úüí^áç¿Oãgû3JI$*I$•*Okñ|׿ð¾óÿŸŸ<^Šª­V«ª«UUUªªßÖ~c¥ý—Îôþ7úSû¯›ú|×µê«mUWﯧ%Dr_¼-iæë ßJP4à'6{³«¦êrôn]"AÝhÏô}÷ªÁáqyN$Nc•êŠ9A;ǯõÜOïüvSåøÌUQÓŠ®¯³ÜøÎÑØnøýo5 A+KÑé "š'»ù4¢Ÿ©PûRõÎîðûö7ßÝé|?-7B¤Ëú¿w“ü<->䂞ÕOK^t‘o‘0õDYN® ËæüR™Éƒ3ŸÜZžžÐ±Xf ¾FV‚ä6ìf8Š­ZÎo[èÅJ Ë(–ÅÝ›wõ×Îó>7oD.w‘Î)(z\xÍdEÛÚÉHƼÒ2*£È"Ò+ßxNü½ï°osSU¯Ýêaý¯qÉ šë¯Ã®Ëù a{襱㜲ä¶ÚÖÕTCÞ÷½õãÇøñã›ë®š«ÇcïÆˆ|Š+»nåFùB3¼Ãƒiè-UaÀÚZX4Ž–™Í›3f®«þfžmBLÍ+_Ûv|;§ÃÀ þ”y!BVÅ`!ò æNÆ‘ªÍ.U3’?1ÉŽÖPˆÒÊA¹·sûÿ;X‘­çLzß“Òèõ Áçc³ :/Ъ °~~Lí‹u¸[|çÛmêwÈH\Þ5•1lèi 6Ê çþË͘£‘AB'%’Hw¤“²Ùn¯ÆÒ2òÎ0"ŽBŽõ¾'Åuî¦ØJ1Á=I&P„!dI?‹Æ©!!ãœç’GtA¬‰›jÑ(X“ÈÖ ÂªÙjfd±˜\H¬ˆ"*akœ—[;Õp¹ÍB !¥9S*#E×þ¥y°cŒ\è½òÉr ¾ë×.>ü+‡ Ùô9ø"!"Š d³t™ñ3„Ö×Ó $çÅ ÷>Ëh…Qd袺iˆ¨D0j§Šl³t#ì?ß“$ínªÚÅŒeÝ|a§c¨mümÆÛmýÃn`iˆE2I%€ ‹)Ò-Ò¬ÅkºªªéIŠªçET’‘ €×>äàúp –ËôîçÖ0û¾7½S£3¬ˆPP¬·Ã>|Ù³î3ˆà.£w6SuŽsú\¾yÒérº]+ú¡Ñè·Fª¢ùLàF"1š[γ¬ÝóOWéºtîîìÓôý¹ñøüI=oJÇaùnÒÛmªª¢ªª«¬úY!>Où¿_í€û/ÏŽ-B±Ô'O«¥'/ì#.ç8„·–8"ôA‰@M€–€˜8h˜£Ÿ{gÞ5~dö°ý‡ï3$Ù`ÄIFM¼,ô]/3¾É¦t)`îñÇ É‹ÖÔ)³ˆÈ'<9©@ÒòùØÁþUŸàÇT+– ªáÑj·1¸r7:¥…Œ!Â^'R *EЭ{´ú[à2Jªi°P¹sÉ€´´´U*¢ÐOãÑ$’bÄDA$äâ41°Š =%¿Ww{0"ê¨ÍÂûõ¼–7.V\:!d¢‰ ¤¨)Ž©R 2»–^Þ ¡½ÞçMþ¥IÌÍ·q*ý±Æ(žÌãJ56¦½¿Ko­Ø=±“ Á" QTEŠXWŒ¶ƤFC”Ö1f…aEŽ Q²•&ÿ'^\8Âäpü_O?"mêP0ÑÅ£-„X¡G.X¨Ú•[ßÖN¸¡v$ŒÀÂÉr×KRˆ¡Íÿ ÍL4ú:Fµ“ÒÏ›l$•)s@(Tn×R¯›¿5žu¯n§0ÕÎûðN¿­¤vŽ6µHˆ,  ‰•€1 5 šnå½úu%BR~–ƒ"ò”Ô¹wç¿Gwgø÷ùvü íÞ·ÈËÎív½Ìy^h±úÓ¹—/;ä÷¬¾²e_ ð?8MþÈRÀ¬nëϳùp33$Cù*¾éöÛ@+L§æârdz.J4gÄàòï{ÞL¼sMvÈÁñ»gµ×vj¨Äìhnð³ãÒ:¯§Ín¸dùOBs%†°„`©ZKQ€¢)` ,ŠÝšÏfMŒ”}ì1"Eˆu°)$C H¨ 1„v„?–úGݪÿ…UŒU""ÿµúKHªªÿԟŲ¡"Eê+áÚŸ}¨pè_9eJdz¹P€p)„(ã(UjEŠEƒ‰!‘E ’ # ?R0~¡H ½ G¿ï§ß{uųû|ŒZSà¡‚ª•H²$øZJÔ+ ª‰óP DUú»ÈH`¡õ’‚3ê2Àú-™ðeV ‘H£AŠUFABIû†D’0BY m±'ÝVÔ*Pû-2I!ÇDhbª¤(`©")$‡¦þ¸h²Ÿj-—E%'ôvl G»R¢… HÆ@bÁ“ý¯Ûæ@U¨ ªE‘ŸÚÚ"`!„ ’0‡ŠžûÞ‚ã¯Hmjäh{ÎRÞÔ ôéKá«z$wžY£Ûn‘O0û{lˆib@'Þ£öÓ=02:t Þ‰»£ŒF˜À"E º½TÞ»Wî¥sÏî'Qf5ãe’Â#Üî{»fn&^Ò­,ây·¸ôFýzR~µRˆûjEñÝ]”ÿ¡Éwß-ù·3‘„/áî?÷ÌøNõ•Ú„¢=çgµØï£b… (ÀÁ" Ý_ý¿ÐÑÆYP«$«“ó°bŽÏÆýù”®Ò0d¦L‡üsáÀ ŽvD™QPÀQõ1µŒ!Þ¤HU5Ž&ÄÂÎU°¢ ௼Η€íÿņN< ²*B „€p¢¬ŒK,PKe² hþé`Žê˜2DED€|´²ERD`E( ‰4XXЍ1WûØíù¿Côý?ê÷p gÚr¹ß4Kïo‘ßÈö•ï>±0ePÚÔÚ׈¿ù¶)¦¤§ý.³V¨·Mì¿Z‰ýªïÔ©ç~±Ó]·¹äÓõ$Ñ“ ´SÎÁÚàT”c‡ªˆr‚zØIþÈ«.TTö5©oºQ-žùÎ#Ø_²_QÖpî›$XøËNù3OÚ…æT‚EîLüÒ_y;h+¤×Ñï¼E5—¤MÉXÚãu`êxÑ)ÿ„B kºÑÙKh€qU!Úºßsj;?e.-kÄ£©õüÉLøÝvɵS÷fÔ¥ßОªZrÌ)_íÑ诸^Ó]J®UFÿÃÁŠ:™Þ—©À+WLÍ0ks€<0à ¬a„%Úˆ„h§’%àò%¨z‡AÏpîøá~GÀþ¡ËU@OßÔá@ŸUoT¼Ø§Z©‚lˆÌÀ4ÁBUó7½Nî#«Ø˜÷÷ ÉÎ};¿'ö=gôǵú?ª*½Ýà1·ôÈ!2— 'ãq ,”ͨ2Qà^îgZyœKZçžûÆNÿ«Š\‘ÒFÁè{»{§¦PŠ4JN93Sº)óÖ¡W}„¾«õ5¶l®æ—’†ÙãºþÏ\µô¹žíû'(Ãm©ý‰­UZÕ¬eMc)¥”§cû«ý} z3¾RüÖ3¿lX·»Ã ¾ÔÞúÞÇÐᵌuô¬tÞ”ðöèuÆ9b’©’F{××ÿO¾åúü¹•ãÍm~S±V®%ÍËFÑÞ‰ hJ4g¹Û©`?FràMƒ{© (LIÂPœ!²úI±Â Ÿ6zË~äøw>ëc~/ЦÄý~çóïvEFoy1ö½‡™ñ¼0ȇOþô›­U„ôQ±üôÖó‰±î>^/ùLƒmìyŽ<:!Ê ˆ,È—&R'˜¥¯ ÔýŸaÜ·~;þ¾‡%†žm|<§Êfð’¾vxötzNõ\^Lþ·«÷¯KS­É5dkôÄ é<Æ>ݯVj9˜a1›ï–¸¯Ïþ„¯¦¯‹¦Ûr½íjN¾dÇIKüökÔÏÒó÷äù”ºLUΟB¸Øî;¸pˆ æõ¶W\`¼`À_€À…1Øtºä-{޽âLñWÚ¼¬‰ÉnÄÃÖæª½S"CþOšuµr`~ÐbY©÷RÐzRan³`…zu+õ±X~«úTϼÓð©ƒÝû,#)>ãx°Ý«Õú>SàùïŲh;vƒ­hõÁcüM!Ý­Åç½/Ľ­b^}ïa  (§ˆê»/µç÷ùº£ŽÌ @ë#æ¼2I½Ø®çè²ø‡Ýâ§A•Ñ÷ΉÍÒö•{‹€Fl&òcR¡‹á)­Ë '5ä›þ‹t÷ºWN÷Ï¥÷/€nàý4ë….îÁõû±ïîÆšUoìùÂéV-ýᤠ©Á‘@TPÀ Ø—ª¡¤©kœ¡0¿ðDù$9Á˜Æ&ç{Ñe%:uoïurù>Ö¾YTÓü¦±`€BÇÄö»ÚÅ=8›ÿZ×ú9ŽÕ QÆçðYÿ‰”ÙÉÝB`/ͽax‘¸s‹áxò ¿h$@…àÁ˜×̳œè6ßÑ8ÔJEyñºöî>» uFÍuW5õÎa¶Þω•OåRÀ~m»´°@‡BÒ’Èζñ`$QI¹IDþ´†,(J¡ ìa†àKrCX  @5ÆnËêû¾n¿Íά_̸÷H ÙÅuCÎúß§¾×D2z­ÖïínúŸØÞuuHf&㤈[}@îºû•¹²Ö|ú’>*%ÎÌäÎÂöšü1~Ï×b!ö? ‡oþ÷øþ)PÒO¯ØÛþ…›óßj‘Ãä+Àfðã÷Ò¹8›¹h^M§Oõé„éLS¤þMÓûw)‹œUªïUÀ¤S@ü¶  Ø(îßy÷;x]w¹ä’1 íÜ­Ø ßµ'ø^!òLÔdPQ9#n†€Üà[ÌïÏ–ØñÄ(p¥€qÜq­BTQ¡%"o1egØÿŽ\gxï ì®4Ó\lo‚þlR™UEIņ|{¯¬3{¥…ýuý$XÇ©þ= ¨ÛËæJ5%S!—×£ný´Î>,0ÁVáxÁZ!€€ä€:“$‡Õú9¸ÏØÈ{¨e Ï«ÜÝû؉ñSØ&Ý:¤²D²xôÒLÞ#dÄyô²Y7 Š].˜%%Ò¨¹‚`˜¦ ‚Y,–K%%[2R],—ïÃw¬¶Ñ´n0Ð{#âÇ/ÏMÊá‡Ï{ï.|ƒ†ò¡VŒaìQ'<2rŸa1¼R$H<úa! 9N*—]#)ÃÁu;ÇÌ>ëtü”î~8âáVqÿg¹ex»FÇwøÝÜ’ç^þ¼¸¦:wµþ¡<ÇÙr¥J•8J±(ÛTÝ?A9™Oo>¯ìüGœØãö7j€_„Ã9 ûgŒ÷Ì™2ñK$ø8щ”’ɶΑƒç¹â @€ˆ ¨Ö®¿­õ_#Ùûš·¼úêø&O†;5XÁy¤HâzÏ@$™ä— ÜçT–RÇh„aP !qLb‚DU¡ÇaÏë0LuÔ;ëòÁ@E—1¥|US«þ’Âü¾> „ýÏQÿ±Î}…¼­å!Ã\ÎÙ¿Íæð(x;IFr;©·ÎGPŽÇWwñIµŠ¨ôÄ¿­§[{ßwo”ššVÕ„F @Bà@8ãpG^9èuoTµ§›@Z‹n ì*>b#„T òÚúP›“7•™Ë¼Óæõt +ÜᦊˆíVˆbs}õ§Ú¯åiÎýgóóÚØÒTšó.'T?ÀDˆ ²H¤2<-j Ë/›!EŠˆÆ1`*Í‚Y(ˆ°ûH4™Ë1„$’¬/z×teqG 8 Ã"xÞ^õK˜3ù½„ÖŽn CT¨gN€€¤FP'näC wwÓ|- ±¦.¶K¸R(b1€«`£1ˆ;dS³Šux(™µ½áé¤ê@“Õ™ëÌÌÌÌ33.c™˜þ¯Xff µT|›m¶ªÖªŠªªªªªªªŠˆ¨ªª«à{À÷ÕGTöÐïÈÔ¢Žfx¢Ç„Æ[R)–ËJp‹< ¸(a~² ©—ÃvgQŠ"jØ#°`‘„‘$iáN¯!Æ»ø¢ù³Î:¥Î;û?>‰È3O¾íïåë×¢?Ü{^8ë½cÖùÎ#%#ýüù¤J¨,uÙ û®þ'®ü’$½É§ §¡UòjŽÿ’ã GQûß"tG€î]Gèû¹ætkѸS8ýAÆ÷Œ¸„â9€_Oy$=9º K4ÐDªÄª«%V“ìѯd‰øù!™í¨¼¢œœ Mó‚m·;:‹æëÔåè?ç½lf3¦óy^ÿƒ» ãŽÝÈÞ"0‹ÐÄ}×êºüüJtê~î:áÞïàî{$ˇk“¼yÀ!€„D@'†«åšçÝ?©EñÓÿ¤ÒLz¾¶9´ÊïBG5mÃÿQr<÷ñ/=èMﳂ¸$‚Ð0à8ày&A`˜!€e£è°Ñ³W÷ß°~ ì5nyœ\¯×ìÿšÑügSWíðódÑãpwºŸÝ¼ÝíÚ8²âààÕ«£ï›¸¸7nëyµjÕø¼MœßÏæø4ÕÚv¼OC­É÷­Ž·Àñ²þws­£FYa•eâeÅæzFç•àív¼Ì5jöa«VÌ9º›¸6eÉäpu¼MÚ0Ãws£½Þñ¼k±Äâêçk­ÜàÝ»wi»©Áåtnx/ ‚""×tbrÜúe]Bc¨\+„Ebñ@ T0 kºèQE×P#hZ+€"áX¸LH\"+ Ñp¦»­…]u$ZÑ\Eá!p˜¸DV(åMVÎvÚù@ pu@P0DÄ@`ÆH¸5:8¹´qjëxž'''[vîN§ÑÞìv¹Ò"ÛðQ~*…‰Œ6Aºæ¶ú¢0QN p+¢Šlª˜C· ‚P`ð$$) …Â@ppË 0èrpw4uºšº6v;Ü Û²îv0ò:œÍ^'kÈæâív+­–FŒ<ŽÇ6ÍZµjÕ«¹ÖàäÕØía»ƒÁãpw<Ž¦Í›6px›5v:Ú²Ùų‹G­³Ž8x¶ŽÁÂñP£ …¢1xÄL^.“þ¬ÛfœDFà×,nŽ‘7dC¹[ºø‚«¢=ûx™ýÏó¿ÃÈ|4ˆi(aæƒ45ÂV ÀÅ·ª¬2þ0L‚gÃZÞÆšL2í³KŽrmvÎ0ÿ'€Øï(Øï0q:æ gQÔu˜ê³:öNÏWwÁLJ¶åsèYö³‘«Gz ^©kVO?Åú¾K{B àk : ‹$!RžNäÈiø!„þjž¤óí#'-–ñ[£ÇŻȔÐþÇN.µmç½;}žW1N½Ïmtµ ¸ýÇÅô:rï=gI?˜’¶Š„PYêB¬¡`‚,TwŒyÏÄó4tiY~Æv<´“w‹|=ê2ñõoõÞ“GÚ„:·_¦QD§øª–gÇn,V:üJ/ÍB`G¤ÚIÄ*Yå×ÚÈR@ü½Àœnn [²pôxéÁîUÑÔÒ Ûv: âýÝ2°üü¸ðîï)Gœ>Vï{†"!á¢ûº¥”ÕüLbT™¶Ø¦!¬%‘¯ž `öŒ„â]ÜE2Ö’ñ4êS“ð¢PP ¾£ ÆÒ©;›ìL]îlûßáá¿q;ÏÑö˜…ƒÛfãtPCgq‚ªo‚¿Îp\‚ÅÛK»SõI›FÄ“Kí!Z‡‰iPÅäHà‹ßß æð;ôùßœAøðæéÞ ‰ OÃÓ68Ó¤ë™óéEšŠï>ã? ?oÂí'Rïý I‡î"L¿l³“PÖ34‘,JÂÓDâ›hí0•Ðj'„Ñu_ÃÔúüÛÃcš Þƒ0Ù"šÆCÙùŽ·áý<†96sƪQÙòþ[¿¡—¼nû–ÇAVNw­UTVf]Vs•ÁWoiû*6ä(¨É_Jòø™óëõG4ý>‹‹©ã¤Ï§ô#áA _]ú³™ß<"ýŒ<]vK™w2kÓÆNX¥·332¹•LX®ZÁj¥j¿zª^_!¾÷½½§RÖÞÉ'³33Û»»ÝÝÝîîîûwws32Ii{ÇÉy·é'¤ž’zIïfd’6Òï~œ½W2ß?{ïµßŸ_v\úüÉj¿Åå}ïxù/6ý$÷³=$ô“ÒFÚFûËËËËÞ÷·;Öüâ¹$žÌÌöfg³3=™™ìÌÉ$m¤}ãä¼Ûï³3=»»¾ÝÝßnîï·ww31¶Ûi{Þñ>:µv¾õõuu{·Ûëßâ'¼÷=àûÜ=×áºûêöÁ£ÝΣ–yuJ_}ìO>|ðùsáÉÞˆu/¿’I¹™™ÝÝÝß[m·Ýï{Þ÷¾÷½ï{Þ÷½ï{Þ÷»Þ÷½ïm¶Û»»»™™’HÛK½$ðžô”Ú/¥IN˜z–p¬ÑõñDý~žKÍãFþýë~m#ï༗—————Fu<’óoÒI™™™íÝÝöîïs3=™™$´÷———Šñ÷½ÞßWmÉ$öfg³3=™™ìÌÏffI#m#ïäˆóMûcѯuéõÚí^ï_zûßtw;ÞöÓnìÌ˹™™$H÷»N¹zÝ=pdï{$Ww¾µîзȱ72g«ñíZõoRîÚ&#˜Z)¦\‰EwRº Ü,äö?gt7Ë öŒïf A½91ÞÞîh„êTƒ ŠS©1[»˜–¥ÞÈÌÆ$,Zð“ÙµÐÃ)Ld›#[»ƒDxp°–ÉÒ¸wZ  m¹¹‡ î]Ë^S½Ýf^²†ázövݦO¦}A؇4ñ´O5x ÛGÛ$‘Âuˆ@è-¤xJ!ž21j™”µwLAÖµ¨åuz%^‰¬7MúÜáòú“8ÜrIðg}ä§OÈf;÷ï»õ÷êßÖß~Ó4C—%Qi¡ÏÉvy$*ÃD@=£^5™ÈcïÍÓíþ®gÑìw×~¶|o_¼s9áo¼Kdæx™¹Ð„¥Â÷JQœ/ŒgD¨ªTÎs¤’âI$’I$’I$’I$’I$’I$’I$ÊR”§9̼’I$’I$’I$’I$’I$’I$’I2$’I3™$’I$’I$’I$’I$’I$±”¥(JR$’I$’I$’I$’I$’I$’I$“2g9ÎsœæI$™’Y˜Îsœç9ÍÎs‰$’\åW8’K2¬ç9Îr”É$’I$’I$’I$’I$’I$’]]˜.²Ü7aÉ&>GÈÖÖù”0~"'ë/ówë÷w\ß¿ñÕ;±á÷GE7 ¡аa|âO!{Àfi4 v€O’„%<Ê >y$òóN ZÔ­JÖ²ýK–˜×.gN7ì ›iµµµÚ·1¹—+ZÜÊ«•­kZÖµ­kZÖµ­kZÖµ­kZÖÕmmVÖµ­kZÖµQEVzÂÈ &ä8 ¾LØàè!pWº¡3_§¦‚"¥ì¿—Ï+vÞ/ÿoŸ/ÝËAþã®·<ޏANé\&bZ~™Mix6Úe¦>«'ØPâ R®ˆfUï•Ê÷+Â;Ùm¹Á]·Õço§§ë¶%›Oû¨£ÎEÚõþçoö&ùRß©¢Þ;;&ºË`ª˜½¡ðñå3}Å;/¾Nª¦Å‰õNxžûðµÔÓ½ùÒÕ€?iYd@ƒsÑ;àKÅ^J#qœ††ò^ñ„Â@úžcoé½OšÕʪ!œ ‚†˜fÍ›6lÙ³9Q`:O$ M2®»†µóÌt¸Š=LAL½•*&oÐö‰°0Ã@GÀÐo·@ÝžBèxñT\Èi¢;?Ï‘r„D^Γ—*›„$>Yñ¿FWñ+Ö~ÅUUUUUUUUPž ª¬žA²¢ªþ  ªªª¯ªªñ•U^2¼eUx…UWÖUýˆWñ ó•çUç+ÎUUUW™*ªª¼àUy•U^uçU_Ρ‹Ð ¯IQzJô¨¢Â(¢Šôz=G›ÍUd^p«ÍH Îææy^pæLyÉÏyÖóª¨ /2W˜ÌUyʼÕUUUUUUU@UUUUUçWšÀUyȪóUX ª¼åE稢Š/9%EQyÉQEç ‹ÎIWŸ:Š(°Š/:Š(°^\ñ sÍË”M¹C”fÎQ‹É9CÒòN.–ÛUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWM檸Þjªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª«3UUUUU^eUUUUW§q$ô«¥Ž6áß®GZe™c#ÁRò¶`ª©l?šHíQdFV [¦±€m3ïmºEUDW×¶c¤UVÕU\ÒI'õŸ«m’ $“mæs#Îc´ð+ºôœ°‚Šb'ƱHÉÍ ÄDñÀŽøX emˆ61¡šN@Ž™— ›º[›¦¶ Sþ_F‰$$Ї5õèE Ÿ o¶ÒH%'ÈÊ lÖòËI.’… Œ±ð½£$' Ô¢ŠÆ0óISD’qA |oŽ˜ájȈ¨3›µ•øÏÌüv<\÷˜"Aô|FDD Õ—¦+|¸ë|¾FΪ¼µ_æÈÁŠª•R`M¶(û_v{«¼§eÚòmÿN /µÈï“&窫@ ¹â;Þ}{ié¶qð1ñXÛÝ¡Ôä­es›³A¦f:½‚aAï{ß:V„+§r%‰$“K‰$˜KÉ6Þ\Ÿ_ëös~yd;û¬àáÓ¿»P™±y.=†jæÝ¶ž;^í^àëÝéøô7QXÆi¨pqùÙÛ<á´Æb &UKuo±0qI¶¹ Ä š …$!¤Õ¬TX[F3eI-³.´XQ©.¦m†¥ ±bÛC¢Ëhæd¶†8…h²ZZe‹ ‹ l-² ”.X,‹„¶Å"ɦ$Ys0 VN£MJ3I¬¤QTYs0 ¥5m–ê—ÒݓښÂíªÊe±aX9q+%B²U“M*B²Ú#]kVkX·,5§ZWNeˬ®2e´("®­L¥Q¾yš6µØËÓ†¹ð³‚@A8eŠub)!"_xjç3nîkàRʼnªõM‹ÿc¼ÃFÓ] E…*XXRPÁƒ$/_CK¾­îàÉ£?Ýì5x=ðŠOIJªÞ")x¢¡¹‚¨ ÝÉ‘I‰è1_G¿Jz¤’$ ulb0»mJeª8Þ Ía¾ô¦Ñý"TÓ}ѹ¾ô¦Ñ®Í£lVÆÆ óX™‹fà,Ø)5 d“’qÍ.òpãÄ2Ú6.ÉÊœ#Y´e¬l™1‹,û$ïðßÅ|—3§ÇæìëÒ‘E"†ú¤ké{í7b÷ávΤË]´ßuÝ´2®9[}TÖ;#ÙLv5ÄNí¸ýA?Ž•¨ŽTQn&(ª1#d‘^¶Y£F˜L$†„.™d¬™ÃOóžD©Øo+Iå_ý.[IÊlÕ³HiâÕ¬Õuž/üžnàÇé㌎Íæó]b!u×hjÚ%ç³i²ño ·†ÓY´Úl6›ïíæë¼D:$Q@ ¦l ¸˜Ó†Ô˜-vI¦!£C5¦œ4˜¦àvØÀVj›á­õÇ'°÷~ÖûŸ¯Ø>w¼÷‡¾¢%F$gBÌ€’LÛYW¼[(Ån^Åmj*3v(k-Ýry^W•ãóIxÖ$œ‡+ƒ ‘!#cA6Ù´ÙvHÚ6&÷f³eñïç£Ç„/ó‚íµÖî¹›É7VÓuòêpÖI¹´Üv ,ÁÂI·KM†›–`þÔ x:– @Ot€~—¾¯j†Ùxö·jpRò1´ †5w :SFï0oÈ;ÓƒÁÞö6ŸðŸ*Ö¥-Òጘ@»[&ŒÔ™ &ˆ. Ìq’ü ž Oy¼=ÓÞ>döy’‚FN 8MÆŒ£ìÂ̆Q³rd¹M‰ƒ‘¹fäÁ«–nK ãrÅËåʹsw•1 $ [·®Ì%´Þž›¨ç™á!¾Ùl•­6¯³äùÙq̽¯»gÛÐ?åÿ­ë„žÿ¼÷Ŷ”¼ V z[&ŒÔ0!5 ¢é Ç.òˆóß=㞌ñCcœ= ›·Øy7jÕ¤“ÉÕ«Yªê4H¢èÌÑvÚM¶56fÀhÉ¡Â¦Žš› £¹”´²ÜWtЦžšÃrhÑ©¦^Ø%ËÖ7 K›bg:gn[§ªÎG•ëyž·Ðò<‹Wˉ1œRs3X“EÓ(3Iy“¸ ½~£Öè:@ˆ~â ÞsyÍæàÓ98#Îr8_ :ðaˆÄ³Ž8à ï{ãä†È¡ÅÙpv¶´á4ëàð¾ˆÈMËj»†”]@Òæt6Û`«Þ†Uì¨\.ÕãA¬9 N٠îºjjÌ“!l¡«ƒ ·Öm´”ÖsÐm!´:p:•QEQMÍ;ö06Ó°ms‘ŽË—–áòìýòëT¬$šš—IA ÔâIŠÓ­’ˆ¸Rο@!¶¶6·P˜Å-‚Å”Ù5@É]\%PµÁ6Î&œ¨š©2™ ñÃ8f®©yêÁÖdÑ©q”ˆT/Ò= e £F÷Í0Ö³$šÑq–!Pó8º$DIèRYe%žT–$H‘‰DĤAõæ•*()*UBŸÀL˜% %-PDDR” ØïZ¨õºe¶h ›°›³´~ým\UÂ ŠŸB+ß"fâÎj&Nb¶¯¹åu&ôòöÜÜ<³…)Nœ«ª3™ƒ ¡ò‰%ï&EJÆ$’bTœÞ?ÜíñÚ”» §*  ¢Š )‚ˆŠ `£V¯ôÚò6jÕKKKKKJ²Õ¥PPr Ph”´´´µjÕ¸N×Î|ç•»XØn¬A*X%K©S FбQEPg÷ÿÅþ<9ó×2s tAAAAEU"#M¤N'‘ÄâpŠ,Db ((¢‚‡ÐQE ("‰}N㡱°ª¢EZÐQE\1šÅ¥è’U.ÿS¹êãí>׳æDþ>2AêõNîk˜ˆˆˆˆˆˆ(¢ˆƒPA"Š(}àèʈ‰JQ"Š(¢1(ˆˆˆˆ"""""(¢Æ ˆˆˆÄQE)JE‚ˆ¢qJ‚$ûÿê¿}ùó×Çù/“Fµ­rä""""(¢‡ÇJBŸØß—FŒ8 ‚(")JUJªª©UTªµiT(~‘ï9‚o°DDN/Ô”¨ ø@ýËùoÂsð„óŸ–Î}ÜûÂý½û7vHä‘É$’HÚ(wöËçÂ~q_OžäÍÁš°´É$’H³¦WâÀè¢u1%B0Œ#…%0h‰,#(ØV ƒDb ˆ# Á…BÁ`”E¥(–‚Òˆh""Q¡F…‚Á¢ ˆ"‚"ˆ‚%…`а€u ~9lÇ"5ò=v`Ý¡ÈýCUþ,Î/»à•ƒ#eÀîq8ókŽœë•Í)êØê‰/ûïãùOÞ¹ºp™7Í?%k7?ÆèšöÆXÄ0‡2G|¶¨ª¨«™mª«ŽZ"ºÙUIüGê-¶ $“¶€°`Á²–7g3“(Й ÂJÌ\ƒ3e@0L\4"ƒÂ˜€‘‡á—XÂ8Üæë 3¢Š©Nn„9Í#œ ®°´<×RÆÚÒÔ! ÌKQ0 Y†2a†aøEôµíü$ªð¼Ö5¤Š˜;Nó‹Ãsœëµ50kklŒÃ=–< ™Ú n¸éyá7¹9jé”B¦ÚZ} |½i õŸCç—ÐBƒBħË$(Q S5)ÂÒÕUoÂ85pÆÅuo¼•¹¾G³&xð 6“A†NRR£ h0ÛQØ0™:†"r8IÀ6Øhœ0³#D±¡Pb%Ö54M%=lŽL´ŽÇ^×SZZZ´´µŽÿÕ0ʪ•Sß'\œ½Ô¾örÈw÷3å¡»‹e£³v–}ØmËàwô>~«~yóΧÄñ&÷2nÝ2ãf2§Ä}Ë îÛ®Áâ^ …-Áï"\yoJ…Ñä&WáerE¼@.— Dm¸½‹„L"H‹’|ÆsÅÉæ–*½•äç'2ß9– þ8®Å¦þøChj>ÿyרöÀõûûŠÌ|Ç¿‡M¨\ o«¤¸Ó{ˆyzκðÆú=MYvµÐÑ౪I«]M‘SÛ,oæpuYœMÒC81"<ô‡©Hœ:õ3VD9Ù$žn"jdI½LÄ:‡}{M Íõy´Rø¯¾¿ý¼ëã>ž:ðòé3á‡Ã*Ðëü_åñ¦ŸtóŸ ºj…Ë&iºK‰Lað í¦Üùp8#ò7À€Çb®<ž.§9ÓÔèéz®9ù7óñ“cF™dγœD ¹Œã«#p°«M(ذ#`ÓsfN×NËuqeT=GN¨Çv™Ì“®½å+¦©¿~f¶Ü¦ÐtÞã±ÝC¡í ùãß·vÔ3)0jQaï’z ´h6ç­ Hjja"1ƒ›³»XÐÓµ[%42ÎY2šF“CG,±&Õ1u50lÔ‘‹$!&ÂãrïEQEQEô ש Ž]Œ×¬›/¦6n8Òž…¨O¼<}=Gyàxàgt¾­»j†e† K¢l£[.j.h–—.\,šñ$I£EÚ̓hf‚ÍCàÉ„ö ±5L B˜F`aq08j†qZÖC×¼†úõ“Ñ4@шe—Ö×h2zyœÎ”<ù›˜ymÇk.PÁƈÚP;Ö7IÕ,ÓC»2lÀÐ˾pÄXŠ•!aQdk «S1!¢ ¡DÐHi44 ÌDe“:H œ6š(ãoƒ=½[`ñlîÂcÕëJyñ¼,¹¾«tÜhå1<äçØñ43† ¥”y¨ð¤ÒÝ Úvö´kƒ·´ëÞ›wjË–en7˜˜Àt9&Zm—v ^ ¼Ç‚j¤ GuÛ§K¼ÃšVU÷oÃk9ÆŠÏ.«¶Í›9îð¶²!¾ý¾Ñàî.üÖ†\­ú®VX†5F ¦!PR(¢ŠT©L”1‚…J%„þï¿ÌúüôÇü'Ý<®GÍ÷îÕùÜjs‡¸áš5QÉó&æ5BÐInãÑ÷o‰[¸6û=âÒ£FXÃïXrͳ Rªª¢ªW,²Ê•UUUUT¡BŽï’˜UB§Ô˜î‡Í‡3„¦nwmµN1|#Aï|7s&Im¶Ûl‘Áúg?ýÏÏ 9ߟ&}&G3f 0 @a‡ÕËìf&o¶€’½sÚ\þ:Ž· w#d‘˜?íCdØ3}ÕÇï_bqN4*&)4Ê}Xß¿hO}¦õõΓÚv–Ú…ÿ²j-…ŒfBÿÀпmÕ¥ÚŠ¸f­Ëj­Ö[–Õ]¾ýUUx^UvÕÜÍ­¶Š„Þæ®l8¶^œ˜Â$œ(5¹")-[½zÿÏïøçÐåV‡"æTòÌæpóp]˜Æ ©s8B+Øûìû~‡/À÷Ý.¾»;ÕšÖ¹ýÃ8Aïõ>´d¥¥eTïǼ¯0Àa1¸/~C“mq®¸9®5×\é§=xpWÉqÆ‚|‡_#iȼN…/WHßøkÃ~XìâÕ®fŸ¹N¢ÙQ0¶ÉÕꊺúätjŸ'Yõ¿í½ò‰®›ˆã¾T5Ír#Hd‰†8ì‡pe,àaä Ìv¢1âácôÃÆYjqjùn..§8œ\Înjís{oyqʪX&ð sC½]8 mJ­<6³jéë̉0%Ïz’I$ÊFs!Óš¹Ê9Îs%ª’ç*+œ^õ$’LæI&EQT* Qq›9ë7>ƒßNs$’I$’I$™ ¢Îs›¦™‰$¦0Ä™ï}m¶Ûáï{Þ÷½E˜eff\¥ž÷Iœç9Îr‰I„2$   0“D˜@…('9ºsœ¥ $‰$IJH%ØH…Š*ЬPÎ*‹5õmðGr E;€Dµ1D õ×O{ú&ÍfÙq¸Óþ˜ ý§^ãÞžSó°!â`^ ¦‚dQ¢›- %Ü!€á0`E¨@Ú½Ú0„T)H©´ˆqK 6L#L"Ð` 4L –ìV)*®LÅ&¦…&ZGöyxFŒb"Ïc¡éÏÃ8z¸ yt̹wKj™o›¦F_ƧˆÛŽèÛêïÀögäî)¿6[ekD¨{@õÎ}ƒx)H‹ê°™ ¡ «È=Bg¤ªØj¸KÁE6ÍÂÈÚ†o-d D´T$VH¦Ô•½ë#ƒT%KAl„Œ'Ž=/’?‹€wËÚ£€OgE/³<;øj“Ôu;Pâ|=|͸3keÓq¸Ó§ C<×cyÅfÛC J{“Y5$2‹d†`)qR‹6JMƒ&y°“ÏšM³&½Áµð…ÑÓ‡‰­óÄæt¡á·­7 –[eÑ*Tñ„0íàv|<ÊÞwðã¨S„Ì™2R”YIÜRñaÁ4¡¥ H@ág±œùõi<ˆwç;^œµ­vî¹ws]±_=yŽêOW¦¸³W2en7bTóÈgê‘H7U†–kƒ!YÌ™']ÀÌÊk™޽ 6[«TÒ;3N µ8ó½Ð<Ä?uÄ:NÜŒ¯PÔ“ ljõݳq³ÄèuðÀæ³-²h•*xBa9×|åí‹è´`‡ÍAñ>“3œˆQóUê4û*¨ ¹Ö( âyßàéù±³ŽÂsœç În½ËÞ±ÞÞÍÔ7sfêÎY“ÌÇ’8ù!sí…ì¤ø÷Ýù¶5²ípºÉm"EUªU¤!-i-`± öùþç¯×ñÿÃñ¿cû8}7ŸýžøÕíÙײ}ÍõBžù¿•¤Ó£Ò†Äuö¸¨ž!`?2ûŸüë\8ö³Â0™xoû·7³X»þâýù÷Ñ×ß"¿·-.\«‡ß:][U««n[W}ÕUWvÞÕ]ÛTRš@”fDqM›„RCá:[ÇBb2K ‚ª%Ž JK•ÍqŒÜ|’fa8!™05N„Mpži@‘¥I76ê›× s¹»@SjÞ ks®HÙ¦#R#80ŽfÖÏ9ÍÊù•3ͦ’ÕXǪ*]˜P؃‰›[$6ò‹ºˆM@8 ¶q)‡!hoÌ#9p6Ê…“›Xš¤ÐT_GôßÒ~“ù?¶ýÃò£Ÿ”®Þ£É*­Õâ|V€…ô÷¸ó}1þÓϯ¬ÕÔÔ ýZýœ.oÇ\Ûœá”Ì`˜a{^ÛÕïW½óãâNd¾!ˆG³8Gö€t }û¹ÙÊ´Z͵dW, ù³åÛm¶[!…5? Ðìš§{^okù>â}åv7Šù„;rèõ½¯cÄù¿­x96~éìèêqk«ö®6sÛg7â7Ù¯wѳF[y:9½/+Tä GˆMÍMá½Aº/càP¤Ùˆ“U[}]}|y “1/{ÔI$ÊS$¸:bnG9Óœç2Q ©.r«œ^õ’IœÉ$Àª@*¢9Jp|ˆ=ð„ç2I$’I$’IœÔœçÙ‡3 ‘$°ñ³™ï}Ûm¶ø{Þ÷½ïw§{× I”ï{Ûo{V ã΀4ÎŽŽw½ïnffg€4uÐq†ÆúiïBíÃNUÔ|Ƶ¾pñÜ?ÄãõŸYð)׉½²kTvJY{5Ò¡Ìu&²îáÌ0°0`b¬bܤÇÈpM± l âAL*OÒaªíè–ÌÌ“FÓ=4ŽñŒÜ§™Ë åRxsk×^››¿‡†ʈ2Ø€RVšC&W²‡ªfgÉ^3lw Í—>x Æ!Ôê|Ç,ÜÚÙF´´¾ð=’½cB‰þm¦á²l;6 © š[4ùSF¤Ü.9ÑÒd4¹Ô»*:ȳ㪱…¨©„R*`3xÈ3 £0Ê8DéÌål£[-:ŸcØií5ÀÉ=<¨ÌnY °‚ˆZÉåh/kî\Ú&]ȉ¬Õ Pî½$=¬R,X³cs]nÎŽ4ßãÖÑó:½0;PÜ÷ÓìÎ>GeÒÒû?£f\;`RËN~¹ù·DÑN<™LC1~dÂÕö§]_?çg¸¿yûÿ|“™Ø~ÆÎÓTK•Ÿyr¤-KÉïx<ZÖÞo7ÛìM“jƒu¿™ ò@i–˜š´¸Ün9…ùÁ€|P9<%‘ a"†Oš÷šjÖqËò8I®Òré~3©orÍߟšÆÕyÛ<Î'*=Qí=‡ÔéÄÞÒii}A,=^³ÚSÇ©µ¦eÆã˜zƒ–¡Úü 3û<ŸueŠjíuµSžÎ7›æºÞ׸÷^w8ZV´´åu;Ï:w€pö{ü^ÿo_‰›aðCž¸=ÁÅx{ÆÃFìAŽÁzŠžg÷!âˆH<0|m)‰ˆT9ΘpƒóYLDÄÔ|ŸÀñdQ)pOî>mþWõáÇŠ?;=6ùY÷8{Þü—¨Ô~ÌáD!a†4ìœ {UÃAAûöÑ¢JB<}1CŒ„m*ƪ /'“ø;ûÉþ/¯0Ýhq/árºI>|Aîfs7därNH™ŸÄþûÒûßÉ~6^|ùôûÿÚ‘¼ÈÜ ÓõÿŸ¢ö_¡×õž«áuz½§.¿‡Ú·óûm?)ôR`Ý¡¬~f¼ÜRzfF„jd¥8TªtÅž› ‰‚vêÖã4ð“ZÊjïýh‡CHûŠÇ$?ƒÿ'ûŸÅï‡òr}ùîE~êÛ—ÅUÏÐ+«jêÚÕ][rÚ»zÕUTw¶ý{jíc»T&hHn Á¸j0" $„ —¼­ p±2ð¥Ú›Í ¢.54iF+p”ÓV‹”»fkd‰È‚k †Õ+ŒT8á†(oŒ„˜ açóœàÃÎpÕ+„8`|Ô÷’ÑwUɯŒ’JˆÈÆ–hJœÜ« t6snŒ¦ê4-ÝÞHjË´ñ⺂ àÛÞYQ [X1È“ÄûgÓ~OÚíºš;w–Ö­9Ôß[¾NõVͰøJ1v‡$¼Ê¥uMRÅæ…¥œj|%ºª‹ñýޝäùO©úŸ¯þ©ï;?3Û໹W6 ¹}¤–iIË'÷ í&ÒY¿?¥îã,ÏÄ6ÅcXF†7ÆÜ’wí{À0òƒ }¯ÇÏp~GÞö|_kU¦[Ë)äà câ šÌ&¡ªu—G¨ž!¼çsŸßú{˜ÚœbM^ ½o˜õ¿®>«ÔäËÝv9gŸ»£?;‰£GFÎ÷²Çª-%‘Ý'ªËRZÕŒcªÊ°Ý‚¢UI/z‚I$™Jd˜¾K †Fg>sœÉ@K33*±/z‚I$Îd’`*UDHÎsX9DƒÄ øBs™$’I$’I$ÎjÎsì“y!1$€J)ï}ÞÛm¾÷½ï{ÝéÍïf’!)îeÝÚ8Žo87x7ƒ@å[»³s˜33™ÃEæ°­¤HåLž<¹P„»„{ýøá—Ë“5𠬆M­®&Ƀ²dª*¥T¢Š*´Äˆ:ansKÁ*³L.xÒ¬ Ì’ù‰&(àZA–fIFd68ᆼo°ØÙóç3}ø›§ã³“Z=„œƒ3z´ÐÔÛ •ûúΦPÃæÛÓ!×±£©÷_Os^¢Ú&ÇÑûo˜ç·¡RiiyÀô‡Nàú7o‹ú|ÃVv Y34cIÕ|\ÏY4O>@z_QA è H&¸Îšã*_N~¿ËÒ¼¼œ_*ùÆ5¥¥á¼{žºòõq¦z$§ØP»„„ É#ÃÒñ&ó“žÉâc‰Òâ[ÖšÆcˆ4!‰óƒ(g'­´«~–!ŽìAƒš±P±¶wû”kKKÄòó÷›v6'¬ídà{8uâeœ¢áœÃÎ¥~m'ð*×'&á¢Æ”4ÍÒ8·a¨îR2])sK˜S¹¹Æík—9ÎÉ{nûøÜ¢6 ô*ÎÌ++#0Α'X&q‚ žVy‰—Óoaë†ç”ë8p —/ E©fRFY[ªMlC'’"×<çV“º•P, ‡&®¶¦¤ó‹r ƒe`Ì”A^ɪ0´Ü×w¾{z|—«ƒEãÊzï‡é4¤7C.VLÐÄ"1Œ@UMω9„Äc` 0"hˆÀ"Õpý^¤ÿö™¼uAüÚè|šõ⨛€JßEŒ¼¬Iïö¾Ëì¿?èsøN*ªäâµø.Ü3œæ„@s‘æPPaÐg 3gÕª© î”Cþ<Î÷ýàãĸfâ¶÷›¾¹â"-ÆáDxsʨ€HÀåÐý[€~7ñÝîú~—óqÌÝ nãDrˆqÇÒL“1>*¼²[/)ò¡®¹e* ËaY¼ÕÞŸiÞOéÕ›õMky i—ø.ÝeWœ¸F˜ƒ¥.KgçVGÀ‹¬ÑÀõï±g š(™Y@pe¨ÆEUÚÖæªût««jêÕUumÄî¶Ù$’H$êKõ$–2ÙÈáÄÀѹqîVGˆ€”¤oÁNf‚Ê P7' 'uq¾>DÁ3dm k×gZÍÚH™Í'ˆVHi DC਩€a"äJl°,¶«,ÅÆö!4«xÜ&èÉ[€×ÌE0¦¸¡nfàN¤‘§uNå!‰Y5¥AVf–Ž“Cv"'† #ªªÞmL#šì>~?!·áýÊ=Ž[êóŒþÅ{Ãq÷Â…¡VtPÏ’ÑE¢qà¯çu>½×öØ8|eî·/sî­ÙUg—ºâzÜñA°6CôƒÞÿE»|›’Oßq˜ů±oämÜþƒ€·VEñ¬q¤,>"à* w)Ëkf1M@:PÙº¼„Ç_êuª½o#ƒƒG#SÓ£/[FZ»´rôìâàü—rjäî{w¡³“±1à\èPAš€LÍaªª¨°•RKÉ$’LÈÎõ‹¸Å”å÷{ïy" ÷§½ï{Ûï7ïw° vÑ&f!#™ëî÷½ï{ïy{Þ÷½½´ðÛhÌÌÈ$I$xT=Þû½í¶ß{Þ÷»ÛNZÄi% nû½Ýí·ox:èç{ÎÐàçyÎ9-®ÝÐ4 Ѻ6àêÞñ¼Qi,6$»~NÚS:Ó7yùeÉ÷^ûoλGGæ ýÐ$ZS)¶Ž},©ÊP7ª[Á’0î!(ÛkßêQÊþ²È Zˆ¬-ä1Š3\"HuŸ‹·Ùwñy›ø-l¸¸Æà'sœÏ~LÌ"8`ÉÛ×4’»¸!`2Àöç hfÆŠ¢ÂÇÙto‡±Ç°¦†´´ÚC´ãÚ^½8që´.$ìÀMõlE!aÁß ¥Y¶²íÛ6s2öÜvÁ­-5‡oןiIÛMääù|=]>xz̉·$.J•TV(çÓ ¬p­m’Ê FÛ&-Ï)èlC¥:séšUÊJd,¢‰·-3°Ä³=ÂVŒºîÃ@»±Ú˜Â¨”ÙÊÎs„€ ^ÂìÑœC¯ŒÆ]¯>̱áŸ+h™×Üpò7Á]×ÙNIÝ™fÂY¬—¡j väZK_qkäÂã{…Çm…(lˆí g8þsq¿Ï¸$9µ¶œÈN¾–x¾¼Cc°–zµMü®n6U—¨u;Ï0Þ½­ŠªAg#¥—3ž¶ÅÚ™=Ûù÷ùžgó½8q¸ÜÌ8’ù î½k‡f¡d$&maË¿@` &¨xÏWÙý ffw¾>=Þ>GŠCàwy‹MBOCø?‰¯.Pøâ˜ïu;×­l¶×:ÁÃÊVmùÑáìÚ¦7ôêk? =7Þî9™£“C (ÐgîE£ZZÆÝÏSÞm±kM4lÑq£F~?&ÎŽ CkØÿAþ—SáqŸ¿ù{¯) <ÇlÖËURþXª“”5ËZI,X‡übaËÉF$3·r`ö8™²Éw)ýù¼.ä0}Óž¡) œ¥ ¿˜¿‚»ùr¥äC’ÊOŒ¥%UŒ!lª»kmiTsW\ËŠ—([BÚ’’’ Š÷ærGæù¯!aQC ¬Mk¦Ë9Ê|%){9ÎsƒœÌÌ™™cÏÞu¾6gÍr:™§Âç%Ÿÿyä!oùôO|e;5¦w|»ú~á*9)ù\¬<_ð±¿ÙDv¹5yÊyÚ÷ßEôþÏèý†ûÓðx?CgØt]/æN—¸'p©šaz•TI$‹½«tºÐŠêÚªª®]÷ÌÌUH$“©~)„.“È3¯I% J®d4\R8yYpˆH%qÓ«ZEQáÒI„ ËšY@fBp<ä .d˜XÈ7D¦ûm6P¦Ûš4ÕTR›ð›¼00‘ÅO¨96 ‹3vâَǶQhÄDŠ Ô–Ã#¯ŽÃ‹)Õ$$G/††3a,#8ÂR‘${ɽéï{ÞöûÏÞ÷¨ç–³i™˜DŽe¾÷½ï{Þ÷½ï{Þ÷½iá¶Õ™$&$qrG2[ïw½í¶ûÞ÷½ï[PI%‘½›žÝîî~¯Íç4ox(à€@àjÛ7s™™Îfíç-¦¤B }ÀKAÔ‘ þ3óe2þyùß—Ü O3Êô<Ï#£‚û‹X¸¸Æq&'¿c¿éuÉ}z2ao‹£V>”Ûmüµçû€&ÄÚoÂ’l’±‰ydä¹0/…’Æâ­m¡à˜™MÙ¿7&àîž±Nmm§®BÃѼ¥'H@§L†¦€ ji#±`RäÃÎC^PÄ<ôÐâ©ÁZÇ!PÚ…†«2íÃnÓn2mxû}¼üýÜu×]u×ÃÃ]|Z÷Äò"h`6ñ­–ÚÕïWä3ÚY°ÇÎÔf<3ñ~>¸$<7öƒCšŠZˆÀÎ’ã ^~Þë¿ < «ªe–; à'ƒIÞ¶[k@wpIÃ^ªe º9ôLíS¦ýý®ÏF]Цó¤sã‰Ê(Û9Il,0ÑDPu^šïà£ô â„Éâ,UO8¢Í[§‰ëùïëq°&W<ºûäY§/ÇßÇü¿îô?÷öu;ÿðu½—‡øÏ¿t•Ý@íõÚûWqµª’I$„îÕU²I$ÄQ$’K„“km’H$’M´i<Ákâá7… ÑtlZyxo3G-…â !d¼$CšÁÖ[ð’°Óyy¡áÒ \bæC8‘Å"[ÒNN`aUULV›llɸUU(QÚ„ÌbêÌæÄHáÅXz5mu sƒX\å "ŠÉO9XÍÌÃiÑ8880ðSÀ!QV€ä Í{!™5Œ4Éá„¢Ñt ø0‹±` ©,“õ´xÿôéü—_9õp…MäÝ)JQ„¤Ò¶Þ»¬ßÿoý~7˵ÿ/ºÃf[ÞŸTèw¸õqã‚5r‰'Þ¶òI÷¹ùè€@(÷ñ’ÿ]òw/Û„æ" Ðõ=_eÅÚÃúï‡÷æÿ‡¥çÑ3È^.G{× ô#(ïÆ Óâ#®~¾˜¨@CP8`°R ˆŒÃÚUˆ:`V6ÞECH0¤Pª`)TÌÊÔÓ*1‰R¬Ä¼’I$Îs1”%sÞùJDÌ…,ʬKÉ$’Lç2RŒšBt ð÷¹ð”‰$’I$’I&òl¬æÓn5Bg¼¹ï8|ÒUUY;¦zŠ™ŠðëÀ*’HŠ 5¬Á30D¹˜!$Çu›oôþ‡ØmÀ‘„Ê@Ë‚ô&ÞÏ ïŤŸ³M³«@X?ÓѪÓê·ú]òtÊ$‹_úûñÇ#åŠ`Íîa÷÷åy?³Þ¹j5òÃ3Õ KhäTø«¬«ÀÁ4 #2#’ 1AÄ õ”¥´­Õýú¿ßû¼çäÿÂýΫ{{pí`½“†7¿#vÃÊ? z~ÁMÉEÏe½ï¿µ­k…ïÐø†ç|n!ˆe ÁÝ'^'É¿L qâëÏÌÖk1Ò°Ì;Åü7mè`x¡GãøœÁúÒr"¿3\àØ:Ã{¬`¦©Ïk“º%{]L7l÷<¯ÉnûǩѳvÞwœç«Wäô2¨î FŒÁƒ0O°-Ÿ0}ØC½#è\ÌÎ…ZØiÕ1RªKÞI$’g2V"Rr3)JûÝ>H•ïO{Þ÷½}ï{ØÛL‰7ŠKo½ï{Þ÷½ï{Þ÷½ïP!¶Æ”r>6’Q \–Ý÷»Þ÷½·Þ÷½ïzÚ’I ÆöMöïwwÛÍæ÷œ róœÞsæuöK™ÌÀ`8r¾:•—.^2ô76HðÉ$.ºÛ€æHL¹3/wÖÜØ5w'Ìë2Hk ™±˜ØÝnôû»gQb©ÊIÔ‡m.κNî½7æ,U8IÌœ;víq̼ôóçÐêz»v*î¿mñø¯!:N§Sòºu-–ÚÞD'®!ø§ˆˆ&O3½ìuòåÊÕ]áŽoÆ1‹qH#µÜåÇ•ª»BG>hDu|"sw¼+©ãéÒÕ^ïÄ9Þ‰±ÃTtpáj®buÍÑ #³Fó&òÙoræû;Uº3ÿ¬¹°nÙ‘Î<1¸ä2GìxËg%ø:Ž/ÿ¼¿õmÓÂíy©@o¸»Šªå{Ôç'3*T©\iÊg!¾“H†‘cAÐö‡—Ö•Q¢!±Ëñø6í·Ýé=A.öw½ï½ëï{ÞÁÁ6’qˆä¶ûÞ÷½ï{Þï{Þ÷½ [kq(™$ð·-½¶Ûm÷½ï{ÞõÛ­ì·wwwo»Þ÷½áÊmÁ #„Ž8C„‡âM¶Ûm¸pÛm¶Û†ñ¾íãy¼Ý7ßw¶ðá‡'kµÜîÛÛj® óB d4sëzùuó¶ô½|OqǹDzŸÃÁ]¿°âäòråj®íÝij¯8>ÓÈö2×[UpkÅü‘Ó8†ÖL’˜ ¨^÷„¸»Á Çd!1reÔª¬™òæÖ\ùä!<­ƒ@¤T6Œ¦s9Ï~!Ä”‡)!ì¢ÒaåýçÚ~f¼Û RñÈå;Îߥº¶½î\ü·{¹5FMÁ4UXŠH„2”2xÂÅË6_ªòÚ¿ÛýÓUû/vffå­¢Š(÷÷þèÏM÷û3ì÷è,wº÷½½£½¶Û@»»» nLÌæ™Ðçß©÷ñø=é?QÑÆþ?§Ó~²-–Ô ­$Ç)Vâð{qqÛ$}<Ù°ê#ác×ìyÑ 0RÆ;Ï$$ò·Ÿõì{K¶úµõ«üÓyÞ"ÚšN1cù¸{P«…á‹.»ý? œèn€a€ W¸ï+µ‰qfÈýïýs'YÁ'<;Þ{ßò¦Pð$.+Ý` †4å!×át*«yÂø“òºZ™ /Omá4îÑ®“¹–î 1Öœú-vJ˜>ÿ³ðÃn9%rNVôÃN§.œ»8ðaÈS;dá×:ܶșQÔט•V ÆwHï[A›Û<—ÃãîúYA÷ð0A¯ŠÏ5ôµ|–l†ø!½‡öþ/~¹÷~wø:^7^úŸ{ÏÇöümíè3]²š}w‰ý^Tyß ¸=6fµu@A Éiƒô>ßMÅJMpúÐÈ÷©öM·X’Š£&ŽhïØ‰DàÿŸù_êô™ü¢Hvÿ¨öœw®öÇœÍHJÜÉåÊŸ ^ÜÃKâÃr<¤£dÎoFÑ& àüæÇ…~nûPlïEC–UÎÑ3¹ºeüpjžXlR¾r¨Ï53«äü~ǶßîºGjYo}BwëÆ†Š4¹Úñ9¯FŸ à™Nkàxß"CÛqk–-RÔøhìä“‹á;º¯ûµÚzí,S¬;Ÿ[}Ïg”62å×E꽟®ðáñúÏÜü}ÙÖíÿƒlaº­lšOÉÑÐeórÔ^ÕµjŽSÒQ@°£¶ ¤“dI‰¢ŸÍUØùʪ«ëi±Çù¯ …Äá¿)É­>—ئA?çu×\îtñß÷¿<§L-rêþƒø\‹L0Ö:ïî8Ü~û"8kÆö:*>„¼E•ê×åQ¦ ©k™U56@˜‚êÕƒâ- »d f‚mðW±úû«Ö¬Z&P*gW¼0]ý{ûw¯–w…QРr7” 'ù Òy}º…Vb©!D£änQ@ñš¼×ãí\ŒrŠšqÜ—M[ðІ!k×'’ ¯ù 8Ží ÒˆYç CsàòéÉ“õ&'püUå=%»î¸^ãHÚ^Ê ™·¾§2ªÞoèúß™ ð;QÏÞ–9?Ëýù•æ óß? "c`?zؼ$$0„k¾LKe7&n07Äš¸!õ§Q9rp×hø,¿]»Wœs¾Uôæ›ä‚mÈ=|¶oçÉÂJ]¶%úѲ‘¦Ï¶˜ƒê2ËÛî÷²‰8_;ø¸‰J>Éu#PqÆáû·Ê—9´XÅp!¤ùठ:ø­1öÆIRŠB,¨Jˆ5 2FAZ‹"¿÷Â\H¶H–ÂÒ¬$•P, aj’CÕ‘ É "!J€±Tn•_ªD{ðÙ©‘›­ƒ[Ê•$X”Y%Š„°bØ„…T±PYÛBÄDD‰ ²#U‚±’)‘0‚1D’)bÆ+"±B*¡¨‘ ‘V„b$€± ŒJªˆ¤ TX£ Ö!FD$’„ÖQ#•d`!rÅ%’«@X* £ ²0ŠA,ˆX0“‘T”PÙ˜B Œ ±„Œˆ2Ie"—:È™\”iR ˜’Ù«!*"0Á§¢Œ È‚‚D˜m d$Ì  ȑͨV;K@¤„¡b$PYª ÅcDX L¡U ÞLc0¿ö1 ™üî½Óû ÈÀŠH*>ióàs¼ÿ’òžW¶r–ðoa†L1ÈBªLÚ<''—&M4aŸ&J'¤• ´ž{S.&˜ëlÀ¤¥zèFJˆ–Nú'’²˜Åž:[™} ø¸¶ÑGáé¼gïz/kˆ+ÏÀsÏâÛA$Q$ ’(šþàÿ‹›ù—Öb­”F"T°Óôz|Úeýß!Fc~JWt·+!Œ.@RP ¢ƒ B²„Aƒ"‡øûCa vÀË H!sçM'o7㈊ªH•FŠ…î#tSHKA€ÓãÿÐáPŒÙ²ˆ³f T•’ E!0œ" R š´ ¤+lªA‘'ÛìjýdÿiÆ1Œb"&—dÉ0'# 2RŽ$+ûêÒýý«["Füð# É%´KIQj ÷eDD`," NF Õ¿s¬ÌRij"Ô—ï™P)l±„Ñ'+ÆúËÞ9ˆxYoǸðû<¿´Ãªõÿ±åý7Êã¿k¹È”AܹFíËòÿH·”ôÓ1™LCvÙ%†[‡E7Ý=…ä:Èp‚„!û™þǰœ8XÎr”Ô<Çá÷¸|ãóƒEÐ5½æý#|}SˆFÊŸÝÀ@GF 8OR)”õ ÷ÿáïöözn‡cðš˜5¥Z¡ "Š(*ÿ·›Áúu–¿ÛÏç~ÈÝ9Ht2ZKd$*(bŠŒUb Q‰t)X”Ji‘@¨"¡Ï™þÏ*coEžå°Ú+— é™™üìèêXX[m´ˆEV*ª±UUUUUmp$B TH  tkD—]u–|/g‹¼”!9óŒæ^÷¾$’òI0$’I4¥Á€aDPˆˆDDÀÆõ†ÁçöቅØ@àÅ2wü<ììý·Öë±ÉûpG??oG«Wa·£nýáãö´y$›ó“wŽìé$æqéÿBèþé¿iŸ?§Ò°±·Ì$-m(\×7™”8`*œF'ÖamÁêb£±ã9g¬wLHIËÓï_~üpëHqN ¹:¤’fdÞ;WPuI"FR¾ƒô™ÅâòY²í]Ñò>GÈÔNò>DóÄùGQò>GÈùÕ#šI›âì&¸ñóŠð#²,kÞÛn0ˆ½‡SìEAR¸Ó ¾Èt$šiÑËf“›„MŠc¼g¤VqÑç Ýg œuq÷fIŸhã»ìE<§ÒpäTw‘—&®\6˜Ç©”f¸uªÿþÏË]›Ñ}Y0ùO{.•‚ó’¼AL‹÷¢Z,`דÃï_ÅvÕ ÒÏåsõ³ vL²´FÙeÚ馱44Çw4Ѭ»Úì•\µXÍ[L·)‰ŒÊ¶§ 0M^cV‚•š¢j‹ºiÿlØÃ_¦¦¸jbQ6M›ª²èDRKûÝfƒHÄþS}öêîæùÑѧù„ë³¢n’¢ÌAg=ûêbþîÞúlðÆ9Žgeµ†%úoîðþâëm P§aí“Pï k¼©Êò(÷ퟶýO«r=//ÙÊ~^F‰`¾nI`Š*¢[Iþð–*1£#U½Y‚NðÕXˆ¢êQ‰Ç+‘=‰ŒU<‹êLãi‹<צ^Y×IµD‹–˜µl§[§zwKüÍŠÀE‚±ã ô˜‡S”“ »¡B*Œ"ª±@‚Â;‘’tG€ Ž QD"9Ç ´–@‹#ïï’AQEQEQEQEQEQEQEQEQEQUUEQEa¡î2솆ã‰1c6F”[³¢Ú±-Ù‚îÎ 6! À¥¬ äŠ3!Qܳ0´ ¹5PÏÊøG0œúòN±<ØèÕ¥†ê š£Ÿ»— ÎÚPE/ª Á‹Í(ƚɦ`&Œ¸TLYr˜‘j, ¢#±× +¯t¹ Á )&š¡2ÄË<ªÛ’`‚:¡¸m†hé 9Á?‘‡ŸÁ_CÞzwíÜdÓ¬Þ-&œ1+—}µ§Ur3V)‰Ë, E–¾¬Î›ã…+Ym%wMÓ"EAXÆ:´¶ƒ2+”R Š1žÔÚæX)·• ~ÚÃßT$ %¦Z7°Q**!hˆK̰p V´¯ùÛNo׎€N;¶2ŒRDÐIìã&ìÊÚ Ô;P†¦¶6¤ÒI¥ávÍðËúĶ˜×¿A8wYuÍüŒf*ɨᧃI«–¨ß¤ð¸ßnÍ8kcŠw¿~š›×nÔÎj óñ1qbÕ¤¬Z\8‰®Óï‰ÍŽ—Èi¼¥Æ§eÏ1;/.ÇoF-6Œ(—ÝK·ŽåZð0Ä#…8§“»M˾fF$ÖöaSbw³¬§S"7YÚÉã»ïgªéÁÓj³J†BÑîÔðÔ² &Ëb#O $€¤ƒªMÄ«’Ð`3Ôñô’w^RC½úg¹ ˆ=½ ³ ?Ʀzª•Qz£·¬+ÛçPèvîò@DxX¦CO~M Ä8̺B‡—VŽ™YÔ·RH;®Zùµ„mÃ~™Æü;4·w"Ãhàk¾¹fiZW'ÝèÎå-ýç‡0“Ä îprŒà-"ÔR@ó8a„ <ÐÙ¼6<"89‚Mo3 5õÄ(lVBˆpY„,£A€À‘# cœ8 ŒÄpZ’¤,ÁÎÄŶشR*%’Q"XE°»a£Ä.Adâû›IU™d%‹ÕéÙ6å´á–ô©"y\-:³4G…tP0<¿ðYÊ3PFuÜ0@Ö ì7™èfe nXFCVsH!8 ðô9z§r+ðñ¼úòuPžÒÿ v;w2tàÐå B<ošH&a[ªªªáŒ&&ü l$UD3Œ+ªRÐNÿ 5‚‘`J¢O<< !rèå…$A‘ŒP ™ óMEôÑQH&B˜¢MI `j™þ¼ ¡åO@QŠÈÃ|“ŽâÙ×c$¨R‹¼63}¡Cƒí”à¤×·ÕšÛhâÁðš€Ä>?qn¬Ñ`A¥†'±&™š\¶)…ÈTÙD$ZØ,¥!f‘ 2cÅ”È(~žìY¢ARþÒɨéº7\š ‡, ’¶ɲ»g]ð>ŠCLê“YeNœ'<•ùì‹.ë¾ÈLç$ÒîâÚj%Ümï},+d;‡Îé/ËèT5iÆ5ÄØ/‹€2h°-÷ô&²ËÖ -ÇþcºÓ 4«ÁßÒlž£ÉÃ1j\–ÅÙj½yJŽBnF¶'ªâ\B@LEzT^ÎiÔÄTTª‚¨PÊØáúvÔç¨îw'Ò4Fo¾jxÅÒGçÇ—ð!Öœ˜lWÝâ¡rÒK’ UÓœ=V”­eµ²¼>>÷g]Ù4B ‰ÆTa bG» ã§+3,éMR(`P7ÛÉÓŽ mŽ¿™ Ù»ò–?È'’8…!Ó,äq U¾g ^”°]‚uŸ!³‡Hé;óSâB™‚‹QU¢Ù6¨ýÏúª¼ª-ÚªžÐ>9ØÄAíæ.õ,ÝÊFñ“)jÎl¿¨×>¨X`V„”ˆ…$n!â@xœà–AR£wï?½ÿ¯ýœ~2x1ÜÃ.o.׿6xš4ÙÙËÄËekZ·dàñ»œ¿¸çû7ì^@®‘Ëaûgk£’z\W ²8´W3Z¹3Èì·–?%ØÒ?Èκÿ;XÑGƒWcõɳ™Ê­Ú¸?)™îöÞ¢Wãι”`çtv ­Íçffäeëád[Øþ†Þ_g ôáÑssÛHvèèÊnaú¶ÎbeËlú½)˜7@WþCzÅ—õ¨(d…ØÚJQ-'·„LÆžY y2)ªkMX3dÊ6NïþØnÑò r½…ô¬“Ìv×ï-˜· a{RDøiˆ=¢Š}žÑæ÷)ø~ßÂö{¼H`ñƒ.M_™Øô~î1QTEˆ*ªª¬g 5±”Ii&ìñe%¨±bÚ±eTQ‘U‘#b¤TH1XÄF"‚"¤Š© Db¨bIP(&Ѫªª"ªªÅbªªªŠV8ÊWÊØL&‚à §Ý²û}ß&X’Q3Ê@„#!GПÒ6í_ýó÷üçÞ}Ïe÷þïYì;öuz½=~¶ƒ-¹8vRJõ·‘~Ö(s ‰ø3£.r¯€;o<¨ñ´7QÄI0Á{¹)ä#O†r»äý;²*ƒeë; Rƒ„ƒY7|ˆ_;¼’´ —€ 0A‘íxxž§ÅäëðÍVñÅcÖ«H‚ȃÖÁÜ£aKˆ” ˆD¤ ‰(T`~ž™oƒýXØär|ÿ©¶M²DìSU2™¡–ØØÂÁ‡‹^£Èïpx<­tcÊÙ¦­<¬âÝ]íšcö¯[fîÇ{²Nõª«©»ws‚¦ÕöqV­]L´V™ÀÓ,åùùìË›-viÍtôï¯ó¤½‹׿öYpÙØDP7 "‡W4ÌãÑVH²’Ë,E[D•$AÉÀÀÖ4ͽ\¹¡ìðCúØR9Mðùy‹Ø_|â|̼)#ÍšK'fˆ˜÷ðìÒŸÞ#Ò4™†—\­”g]]ãò,“×¾ãÒÙ$’I$’ ú)Õx+/î|Þíg)é>ï¨ù»ÿ“ñ¿¿§÷ß ÐaíVëß”]H["önª+L=™¾êÙÚLë•v\ÕÝ’<'X!› iyxœ)T4w8]Ñk6,¦õ¤[¦‘ÐÃo»­¦ÿ’ŒÀ4H Ì7‘ÈÓÈ2шrÞ 0À@v.H4»çЉÍJÕˇŠ2¥ˆ€—b5Z¥PrÉ e+J¿¯èòwÝøøÜxý[sÈ&Ý91‰»Þ¦í0¸ì—½cîh ­ØyÚ6zœ^–® .ŒcwíŒÓƒ]YâѧSÙ»:+.Ç® ÝÎ/RaÅÁ»©Üöº?`ùÿƒÚôAù‡ëU ªªªª¶¾]ýÇœ8µã2Ò5XEUUUUU\?†’ª ¶°ÒŠ( (£œH— üä9uè\W­ÔÞùÙÂdFã˜r»œ&ÛºåqÆ´ànf•ô™7M¤E“Ê&ø¼hî«N0:Þ@äW‡þ³D—Ä2‚m’ É$9ï<þOî~ƒŸ‚½eIûê¶kíjÊ÷‡¼’ ýÄ=i‚•J¨*P¡EQÐÆ+]´&Z\VRŒaZ9°$“6-T¢’‹"DȈ1’14ÈU‰$"«VÙR’,•"’–Æ|qV O‡äã ;©2•?Ÿìv5¿¸“a=×ù©îþwÞ|ÈJ|B6"`{‰I“ÔÙ=¤©*Oõh˜”¤ ˆ; #´¨j'Oþ~ÂàŸÖe™„ïxˆ¦~’p¿/YÙùSï-ûãËM@&ƒ…Y†Y¼´ò’‚yx:]n xp` ÈmÎ!¹.÷>ÏNìOôè¹K‰Ñ …mú…‹B”–y©èùN'Šu6ÎX…˜ÞžªÇJÊOðbÃ)8ôf ½Ó;•P°(“Ÿg6w8Ù~»#‹°Oçª`•ZÜö! Lp=s0Tì»/ÍQDÜÔ«öI_zwé\GSKgŒnŠ’%$B2, ã£.í—/\y}… Ú, À@ø=ÃÙuÕ§õ¼i¤rþ;I6’&Ûdbviª—rµ˜Å9Ê5@œçŒƒ(Î`ÂKà Ãa˜(Ï@´'ø~e®–\Ž.lk :UYýZe«V}ÌiÖÒ-YQœ”Â÷½F6äÿÙX…È7=_/g#°4e,SÏÖQ°70!ª^èÄÉÈp6ÖÜkc–†¤ƒŽ=÷ÿ4dÒÆÆSrÎþ'!MÒÀ<–™e¦4<…,ŽØ<¶ ‚nRQX¥ `ϋ¾–\va—Œ»„H·€ð|à:z3E}g9ݤ;>fÆÛ2€‘åóz­·DL0¶¯(~Xõ ZŸ·Ùì„”.ôˆw^nɳÈy4æ<§Þ¸ç{ÊÌøþè^?Éÿ·hÛuáÃÛÖq÷ýîŽ÷qÞ{ž——ì¼”3 ^µ„+Ô>¿ ¦Ã}×d»ÍÕêew÷¦½ßcè5%îc1+ƒ·zÝ5ç\ßÿÎê2X’©§°Î‹VCSŽEr"ßöÌÀ½uQµÛ¿h¡i‰ãaºÜê›ya²›_}êö#>ÿ»õ{¼©1ŽœâßX æn±µÖZĈ d`§yß~2å"*`…¢Š˜€€QïpîdÀB:€㈈@ôí°ÁÛU_¼Ià®Çf¥9Vá…¦œàÐ@@!Ö¼Ý !†C0ÖÝ;²B×€ås¯SÓðù6pæPnn•8¼¯ÏAŸRz’ ×Röïñ£µ“»pß>ú¿ÑØân°cù]YåÔ6Vjµ /Ó7À­‹ÙYÊOð¿e.Ž}L¿9Âú·‚u‡¥U÷sw#Î9Þ$#>D*SK6½í2ïövjæŒú‡:ƒ?¸ôlÙ(iŸÝ%Ë€L11Hv¯(¼‰ßˆ¼ CNÌâT«´à4ÈõK@Ü>QˆƒˆˆÅb*"""À0 Â"¥»LœÅ{‚Àáa°¡­é)™G?îh¹O˜ë,oÔŠÀZð{]¼,óŽÇˆºªG+r…7ôÃãížGî˜x³5ú4ºÞ´Ð¡ Ônoñ“é¬Ðèy£Õ‡ãÜ4ÀfûšÍØÚ²ôJ¦)z>ˆxss£7+]‘û-rdx"y&àÿg¯øzímŽc¬Ð=–aŽÜG—;±@*\) $Eí$D`„bKZÒÿžKµËÁlÏþ:gÆ^Ƨò=/½ãôL¨Šéý_‹½à‚è|Ì}Å7µøl&”L˜Àÿ\HI¹£òc€|A7ô:‚ª†ÜAGõ¼»K´?Xaƒê ¤AóÿNã—8â„×L¤DøqT4ÐÏA$‹"d ¨)±çˆˆаˆÂÅXŠ*Ÿ©ý b7UADóãÞÛb"eQÌ¢PvQ]dãBp3Çøo¥Òg6À=ÿº}¿õºœIä_£•Bç‰H¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*Bªž/ê'¨ëúæ÷ÿ5^¿mÁ½ÏíÁªtª„ç:ª¦uTâÊ e©Yáªq$¾*¨i¥ÕJ1xô¿Óæ€UXÿQ'—ÖUUUDUUU[ûÈɱ«GP*/BvÀÜÅr/ãÞúÝåø„4Ç'ý¿×ö93˜ÓäHÂXþÜ~æ d½ ëÎfÔ÷÷ÕJŽru<›ÓÙ9V¨›Êðvp_êoÑ™þùÆûO3çÑ+£)>¥¹*¢&-ø÷EŸÆÎ¯ÃØbön¹Z{jÀà¾<¨Ž.X °³ã§u[e@3'Œgð€0ýKË@¾ÿL÷ûÏà¤×ºÈÃ`6u„yØ©ô"ùßõúzGGÇ~wnåPé=¯“4„5†ëˆ@ k•Eãš,ùÀ ÛG !$]U/'ÜZË»ôÅ'‘“é×ÿ®çð—Þ(@Ô#híb½|–ÛQVÕhI-Ž˜~IÉ-íyÅr¶{„áY̨G`–o;Þ…#ú9Èù®ßûj¾ù6Óì„jäüñÛ7rïÄnÕ—:ÌY9cQÀg¶Ð)Zœmàýyx¦ýîf 뉨@en¹2þùvx­šcŒpn•úù_¾“Èsòð»Ÿ`$ÄÒ¯IÆ&˜pM>j)9DTS~”¤&¢^ïodõ퇂¼R]žÍã^ vNÆôÞQTüþ#Æu;ŸÅë»wÓö“SKºÿ—ÞÒÝ÷>tð½ÕOa¬J™A"€’iþžGæûŒCQ@;·Î¡ýÿ‹Jª½ l|ßö>/èjÚ!ò>Â8DD/Þ#è~v­çEU=ÿò‚)ô{®£Âp‘3j€UþÎèööâxÎWW?㎃èÐy¨ É"I"H‘‚Á`°X, ‚Á`°X, ‚Á`°X, ‚Á`°X, ‚Á`°XÁ`°X+ÿ«VµEUUUUUUUUUUUUUUY$’I$’I$ùý«äz/Wò:ßsþ×Éz—/Íýº?g÷+ ÒÒÆúÞ›mׯ‡†¸o|<8ñððãÓÃÂøuë¾¼¼¼•UUUUUUUUUUUUUUUUd’I$’I$âÿÏܼÚúÿÉËÑü¯GÎ~gï~÷àÜ}?}î·§õWc•ØàrÞ=Ýk_¯;-=Œœìã†æ·õµéH¹Ÿ>7™Õ›Ê@ž]gö&*Iu«1mš×ÖlrÝ{”{«Y9êxÛ2üÜÕó§ÎUJ&?‹ÙrBÑ Q€V<¬¶Ýžßàó;„æóúÑû¾³2""ä÷ žßðv¯ÏÍ@_$0EM°¨ö·^DUPÒÿ]„öƒïûûòoÝð=÷Òzo&r®NÇôõ[ŸÃ¦Ø¿õi³ º§Å7Ím!4± D$éGßüûñÿwû>%×Ö0Ö$ HÈøÙªAhú}¯Ãì ïÔNž‡ù¶·@£h½ð']y8_!v^¾z0ç^>íM:V}Åä.$lWR±Æ›ÁÈÖ÷íz\÷±r«mr:ŽþR˜<Ó¯I6Øä¸7°÷ÿœºÐI?bÁ ü@!à  ˆOP%Eù¼]€âßû{_zÂþëý=n„=|Ÿ!ð:Þoñò^ó÷]'ºMwæ}ßã÷wðb¢`x‰qÄCëÅÜ,AlEŠ í} œ¥ßî8E‚ =ÑÞ½6ãËü*¨sÕÀÖÐX=˜ÐA@Nv–ñY9Aü‚çxëü®@nA_‘ÇÿÇûý¾ ûŽÛÅ^પí-_º&LÌ \¶ÛmµµUQ†ñ€@ BÞ«)Œ!ÖºŠ= r—qw¶Û± ÷ K®¡íž´Œù-ÊBl]‚ÜIû粜è]¹ì º|è‘ô–Ë Ô:Œ(©ñ%×üI[~îé-nàvGœ9È÷Dÿ÷‹¹†cDy“Att@á˜ÂÝk‡Ÿò×0•6¼“.A ôëúHÆ-£ápø­íŒ@SÎ3`B|s€ÚHÊï+ûA·´ÍÊ„Iñ0>yTüÇÍ-ò_üj³ô°ú?mKã`n¯êdÏØku±X›4»1þªOkšwm ɼR4=ÿ?ÖRr\¢¦KJíê7ôkõ­hø.Ü·ìÓJ± ÄùuÌ$,þ-¼\ Œ!æ}L#&ÒÙ ŸÒÊùól Ƚ‰sÄý&Þ?ÃôþÅ÷ýÈjž×Çz4OAÛz>wÉþß7ç8ÄøýÓ|?±¦ªrg=¨'±*ˆk!‡õñ¡üŸgì½DœŠvÙ@é€íõsÉý4ø=& |¥ñ½!û‡, ‹òûg7ÃÞ¾s!åù|×Ñoþ冴ÏeáKè1Œ‘ŒªóåB@a†CfÛ˜1£Ohüý†mØQ‚M”rùä_Ø)e‹ÛÑ-¤%è¯è" Ì |d‹xîUU)ÎWZ-C’ZdÁw:20}>Jè/jntRdlÿ/ªR¿ã¾iä Bz:ñIoCúÖ'·Kâk¾F F˜½üGD´€Äq–YFÚH€Z4ý>Ã?×h4SõÁú K`ˆ|.-l¤œŸ‘ó»‡Úu橘ü¿þø¾×ú~w*|OФEIPGmþ^QMÚaŠ*Û° dOîþØ("à/•LÛ®¿P?Рsl‚©JÁB(ŒŠ*1U`ÁH‚¨X™óì<À‰ËèýÝ>FÝP>c@WM ZwÙèô~6ÊXù?6]Tgï2ýVZÛm¶Õ_àÿ·Û û®e!RB¥b*RÓü˜¤*§rkCªC©öº´í…MS‡»ýu¯Ï¯ˆ¯’ê§Rð?ƪQµeüÙŸ³"Ìâ/9W)̹Éõ’æ±zéÀ_T`<†àOCèyÎõÁÿ­eçÿkærý.ŽÓ¨jŒ  ©21ŒF#ˆÄb1ŒF#ˆÄb1ŒF#ˆÄb1ŒF#ˆÄb1ŒF#Š(¢ˆÄb1Œd$"À`Áƒ EQ‹"‘D‹P$X*§za"`’Ȩ°#1BV1Q„’ V #DF‚ÅŒcÄEe¢ÉIJ«-U’J‰d ©",”,aa*Å’)"Å"FI^ŸìÛÁà<ËŠ· Jáý¾·~‰ð]q$$‹$—5t"(ÿ¼v?ò?j‰ü‘ :¢OOÖA æAªQ’ ð>¹:DH*~D‚Jøa÷ƒ`n%àÐ4€îƒ@|=€E©ñ´(æ_C§¬\ˆ£(@"ˆÔU;êùDSv>ã΀=ò )tëk„¤ø½FèDÔE5“E[êéñŸ°¢Ÿ ‰ ¯@€™Ù@QMÒŠŽß½öY6ƒË&L‚ „Š–ò€ Ç úÔƒ\R•7j¢€DK_Ó¢ºê X2 :+Aaôù2I$’f¸((\¹&¹Çt8Ø„©=3+%)”tG–Ì4zb7J€ä„0à J1ЏšK–n²aq,IAj¡Äƪ3ÅþsÔyî{õ°QË:åòµ_¯ß}¯óšÑ”Ù’¡<í®—„„&¾ÞñãÝîQ”?°\o'¥?‡<²#Ô™,hÛů‚z¹eÏòí¹T5¢»79ݤg¼|VŠæ¤½esÒîN?ËB¥9;qÅ•QéqÎã7îû;¥l’mfÿáã¾X—­.Ä!É8Tà"~>g½³ò:åéÐÛsŸ¦ºwaˆ‡Çã‚Cn"¿i˜URÉH–ü_Ãâ^²„õz É^ý ˜þÞî7õPc§øÊÒæâß–NŸŸŒ1p€ÀnEá>ÎÓ%m”ÆWI¶BØâ‰)ikÅÇmd1äf>ŒûìdHF˜˜[½ëZ9š¬Þþ›gæ¸Ù¼.ƒ[„YÇñ™@ôÑÇôLÕL"ù¡xÎ×ù>9«V ^i×.aëïñûv³.¿²¾(àéõ«Ï{i¨¬¿z¨qq÷é@@ ™hˆ?ß2É KéZ *zÕHÞæ'‚Є @«™½½&à wè}{5‹õ0âš5ž8t5,o*z–Åø%žY’ÞW@¶-­¯¢¬òw´œíãyy\s%Û†Ïí‘g¹ °ˆùó¹ò]g}F´KIak¿~»þOÈ"ߎӳ%„©þkŠðUKŸlÕÂêQ×Ä@ƒšzú-#´hCþ9Õ»ÊûˆJþøM02|ç¹*{àpùc}Ü:Ÿ²{³%0ÔJ†ä{ñ¸æâñœÞëõ1NÎZJ®ÀàAE$%{êô]/ÿ|ÎÆE“Çëv»×7À?¨ôd¼ôC±Îþî× ~5ì;löä˜Òåu.ü'ߥE¿©Ó‡ÛMRЇÊÞx¯}éôÔøÐøþLBÈ ÷¦.ÀíYŽs:^ÄõG“’’ƒ¶Ãg”ô‚ÓD’‹‡ P_'ªôß;™ô¹9¿ëAð~77ëíúSÈñE;|€u@PJ¨ê¨‘BAêø¯Oþ?Ñß;Wñüîå軞ù?k¨ÃÌ{_ÈiZMNcœ1=ââ½e.ü½Šæ™¨ D0è>Ž \öËHþÌTõ NµN×?ÍÀ2Y02ê{IFñNiÆçŠ/±0Û>Ìýa¼€,ð”@0†Ã­æÁ°!ƒºÂª½ß¶¢ÁÁïݯ¼g9ÞßïvjÍg¸éC­BÎÀ»?ã&1F*3çWè=?û=£“„› {¨xåà·ürË9cQ¦ÕÁ'Ty!5qvXÝb»Í†’ŠÛ–å f0Oà¼z¡ü Ýƒê Øáç ú@.¨3…vÞR¼{’žüà —óê4jÅ:}0ÖÃN-*6€Ã— ù¹xÛ·°[:EÍô€A CƒÆ}.a0CŨtµF6(‹ö ΤñVÐ@]óŽØ Z;í䀈`ÙiƯF÷¤{|Ù*kʦ ¬PÕ;¸Óϯ•®~ɾèCâz¯®Í‚z_ €r!$9uƒ˜äMkšsÔ´e¼bÐj—Ÿ+ù•}öC!“ø}=ÍÜ:NƒjÚ轤+ZP„êqü~>ý£ÖtK —Jävãý`A<ýTþ·T ‘Ê`a˜Å"1Ao ;!‡k\¡a 0›œXõîj&…²çËæSƒa2… v74nfÜúÉ…ž“Š÷RZ¦Rܸ¥?#Ë­‡\Ä#ž$HyŠÍ±2m»åX­¯r‰oêØ¤ ?%¢)ž7‚R*|à "íH”¤?ĈÐ|h"%Å¥ßDõ8ŠyfûÅŽœjhæEóiÕ1Ô‰9´‡’ïïì›Ùp|*M„‰*?×'E»¾:K$lPÇz<&™‘@/Ñ>&`7ò rØöe7樂kŸwcWw‰Q”âUJ‰q_š¶Ð§úA,[D(b¼‚µTÉË)×Ä77×Ü0¡}ÖVb’ˆ„‚¨2ËHûô8Q“µì‰2ÜÍØâ¥°@.ÙÅ•Î&„C Ž0Ä€€`ÆïG' ˆ²Êωyð”þ™3œ‚@A¨œž%!0#KmÞ"®Ÿ)íŠAñ`-¦øZ‰Øã‡Døp©o2G“ÈáZ¾8k+e‡¸1Ãd˜àÚÒ83Ž8tÖ‡àíäa¸‘Äß2SqÄWÍ™ŠH ‘nd‚v —Ú‡Ò¤:Iœ™.ÓÔmÙý2nª®U™p8vŒHV “9Qõò— ¡‰…w€`é3ÔÝ ÙßÎ*ÆhϰráA0^)óÄ©ì·øL† dà&BqÃ)ôf²€H=&Xe“˜¾9–=𺽦’@ZÜOãð7&É’T"Áü>o™òøëìzÛëÛèó›ª9>ãGÿv4jÑ;IþB €Ãœ)£Ò…ÄøÇˆËÛÀå¶½î7ú~÷«þ-Cõý¾§ûzs%žSëqœwòùUü~_UCù‚  )Èø¯žÏ¶àyß_KìhõÞ¿êrù§‡¡3°Æ@‚Õˆ¶$KQRÀ[IJ[-U¨QR­¥bØ«jÆ2‰ ˆ‚2H©‘@[¨–É,[j*‹I`©d[VÊIJDKP„«m²BÀdƒ Â#‹‘AbŒ!ÃÏÜsë{/{Ýóõ{ê^‚/®Ö@þïùê ÀY2þš›7ÃÝßã\ì“™‰î:k¼ƒl%$ÄOÿŽE2~mù‘=^c vc¦ºº¿Jp2sÌî"÷îUûdtüÛX5}x%ŠÌ„ïA¾œÍÜ´ËÖîMùB]íô”$²÷P-·*¡‰:Þ‹ÂÃýQĬc˜†¸Ý^[ÆY À§¯ÜÀË@ü2b ïA0Œ& h"—LÈHÓé‘ü4ºg1w‘Nêù߯zµé».œoâx?¤üÿÆjÀZïáízîn†€¬ m%¸‡]íC®I` Xxs]|j˜;3Š« &ïjuþ,ÚpYÛ¾ „-GOÇÆ‘=là1áMq—1à‰(i–œ«Zœf>¸ä!W  sÕBjÄE¨"ÞgªR" fÚË8Ëù”ÐÒÀZ* IH’UÑSäJ !¿s1ý[²j2¯Þ>WÖÜùý!Æûýõ´ÓõºÉ,¶#{Ï¡©•È>ë­§£‰ãûÇúwûÝsÇg»ôqáe”œ¿¶ìmÅ„`šò÷¤Œ‚x=4jŸ–>öw‰2 ˜í÷ÌÀEú瞟0 ÿÇšCÆqçÐð6o’xÊ<_|·g×ÍLÐè@p8ÙõÎô þ"ß‚/÷Æaí̳éþnì½oU²ÓÓw¯ké½ßùͦûQzŒ#Tü½&Þ¦UÞg<Üü°. Yˆ_G¯C ÇäZ¨>Òö5Ï@_ãÄ++ rÃÔ´·}#Ô¸lsdYöé虾­ñsç?̧V8¼¯©Ðß„¯w3ƒúáëWø¨êA²våR\e¿féGçsôÍäÃc3[11˜Óm]|N0<\¥œˆ…|â4²6 ób0à8˜¯ó´@.÷{YÜ«\»I`ÇÍ:´6³ÞžÝ¾+}OM¶HªÄ X¶,+\HEH°1Â!-HZBb;¬6R+a¨Â}ïÌó¿¯ù¿›ô~?Œô½ ïÚÎjø^Z…¼„š¨Ä0ˆ‡¼$(Oš7FÐÅõ©¦IÏ!µ;zëIéõÜJ71œwíW?Ò$’Òœxò´ôWÒì¦8þöÎBÔG#âq ÏÊúËÂÓ-ó)™[Ïw—Ù¨÷V,ª]«išþO 9?%a–ƒã!ë_.Ô©©ë'!G9÷Šôú¾²Éî‚Íx*ÃÏÜJ†åØÂô´}?áÌ` üR/±(o/ÛVñ']Ã8N{V!3õÇÍË–ÿÃöL>iŠ{O©æù ¥0šmè}®ÎÇ¿ønéÐîbG+Ùèg’Ô:ïìèþã|}óLÀûgöñÌŸhä–xsê†ØÛÎjg tÆð:ÓþÂÄ'Ô;¡Àà=ÐDðüh×âà`Èy6€pw=H:PCï7}ç¿fÊÆÈÈ6×q®5ÀêñÆ¦ÆÆÆÆÕƒfcËš7x½è´1ëFA¬5†a½ÆqœgœgÜ3[›‚2Chb@¼^/‹ÀÞ‹ïߥ„a¿Þâà7ÁÔãÁLc!kHÕx{1òüf2å÷×~628Û;јn†qœg¡º†ìaÃU÷ßúq@Å…âñx¼^/‹Åâ‹ï¾ûïºñ¢0Ž,*xÆ1ŒcÆ1ŒbxsáÇ Æ€´8(Æ3¦ünû†é°8áÀV8–3ØÝŽ@ãœÌgˆ8Æ澘#˜$=péñ‹þVîÞ^æïW<üAó@ïÇåœR9CTs†°Ñï6Æ G‚:±X¬V*m:8\ ‚#lóñFüC¤pR:ÿÁÑ`Ð¶Ú°Š†x˜ãN}MâŠ@ˆ QE Q@ P|ç!ͼ㗬03Œcv:‘H·«Æ0ntêÙÔäð‡¯¾ ñUy"±Î±®9CPiŒáÃÝ{#gÓ|çø_Mﺞ·Úº›5jô¾¹â|§Àòcñ9è|m_hÿ¼ûwÂö>»Ü}³è>“ôO¢Õö¯ªâ÷\}£ÝWÆËwSí^†í1hÀ$7Dmsðk ‹EƒŽ0Œƒ8ãŽ(⌚9ƒ0ò¿šó>G[òœê|/3½ö;í_d÷Ÿpý#ÔùÏñ=÷SóÛŽOSÔ…ëG’Œ:Ú½ AÑŽ9#|7øp‡L*G@rG玈êGL—s&9áF§MˆnÄØ‡‘Qʡӌã¦Öï»|»~‰ì|ç×|§Ü;]ÎO–úÏ;±éxžëï\©÷n·[“ížóÁØøÓ­jì}ÛÌú¯cÈþcè>³ìÛ¼Ž.÷Ìxžó©_Žô5{ÎçÐ}é^ÃÞyžgÜær™ÀÒÖ$ÅÀ`@@92"·nÊBxAó§øoóKÇKìUt7KŽŠ­’ù?º;â_ø}ÄúÞ×ülyÒ£Àòð_#´ñ0Ä«÷t?µ´>PÀ!rÝ=± -+Ý£ŽYmU&]ãö?+ß#þ:%hK¸Y¿öE¹úSÓ¸8Ô… ôPæ¤0`Ÿ‰×9ȶáoîmÏÚè£Ãpçé864ÇÄ*¦ýxñi_¯`à /Æ:™Fúajs:¥/åzÔ?ˆÌB€Bù_ò¥I$¾6Öûœþ4§÷iü4}¿avVñ5Í[ïoåÈÐFYôŸÀà}/ú]Ô«(¼’î[N|I¤_–<ÚxÔl4o’\\‡¿J–íK“È{ÅAìÕ÷ÞÓé{? ºŒÆàü>Â?t+઱hÀQCè“N‚âù³ãœ—ÂIc—góþ×Õô¿Iñ>¯ôl¿¦Œ4# AöÄZÑOޏA D˜bp0F¢6˜ƒENØJ " TΨ’ô$üé@ÄÑþC1R. 0Z!§HBÁ0X‰´E¡‰ Ü6”fTúÅÀ¡E‰,“ `PŸ¤¾ßOW__uèÜìÖ¥Jж(_<|m|xö¡<ÿõãíÿAGºl¶,µ¡†‰Ë¸«Á“m*½2*ŠîDïF!”9…çŠ8bDi 0ì€iÒøEìÌèC¶´l‰þ×oÚ[úîÁËÃÈw43¾»x´4Dq}(ih@rµó—¾0AÀ„<7;ã;wQ¹Dñß“¦ñ=ï2ñ}îÜåü^¿˜7ýï‚ö“9Ç>Á–HŒ|¢‘ÝU#D"4Q?Ÿ¸H3>k#å×rSO¶ü¾ÙuÅÍþ'™Äݳ—‰k'6!uÒÝZ$ër<_ÃþGW3ý½ÇëäÈ €rlZB2H„‚ÓB `»Eî*nŒþj›—Þ‡•–QãàæáW ›#©RIöÏí „;ŸªüœÃúŃ’¸TuÓ÷â.ÑÑÝ }´›G©Só¶âò{Waß ·¡Aëu3¿¾Ï^z ª½ ˜HÂÂJO;TëJÂ]¹i!¬æ²œSxÜ’$Â_½wÎÃø½II÷*+Sç"?Õ÷äòåóÕ4CÂqw^ÇÕ×å}wuÇG²û¯ßþŸ¥¾iÏÚbM4üù >W:ÜæÒ>Ïþ·¦¯}¼v—€C×NæJÂ)OQ&K^ŸßHfüþ^Æ´ºèœ8x›©ÛBûûR„ÈG4·Æ( (P¤dFì6ôÖV" “KÌ~=Ç}6ÄO,mÓ°ïVŠI7@ , eä·Š’ø„2_z[#ì¾áêMÁÛXÑi³ íÍt7A‹ÅL¤I 7µç?û”ü‡hËÑÎÚi†Á¾äáRÆô±äúçA¸é½æbV« œ!ND£4q5yD2Ÿ‚ç-«€vf¾rÁè3óª«èžTÄ=GΊ9Š©–g½ï|X¬ÌÝ‹€p¸NÃ9"½ñs³Ÿ°äÙùOŽ­aø¯éŸ3öãææú_]íí}†^–Ï¢9Mãøˆ«í~~_¯¦]_‹ƒTÑk‹ì?°|-Á«ížh’CŸ5 럛Aö$…ѹ›Ž‰¦¬Õª¨6c$OB%AƒY„Q"AdŒˆªŠ"¢‘R2þ¦P)í`JH(MRŒ!ÀÂ" d™#ŒC˜–WF¨<¼° Ê^ˆ°d Y˜‚©qÕ¾qéyîÛUZfèõ=Ç‚k¦49Ã\¤’‚Þâ¢Pk 6 ª!Bw Q8ÃŒ((¢…Ie¹¼ø'Ê{ï}‰†)¥•„;«NÒêç`Û¬ÜuÛ ÀÝêY}^#Fôˆ¢f îk¸&úÈÈ>_ä{¹O)©1µ‘T‚a‚fŸV£ÉÁF;©‘€dUYè…ýø·,*z(ŠåŠš¤çNÄ€­Ø _D C’yãj*Ÿ÷–á&¥‘íýß÷žÀx¤î”Ÿ{ÃÕU)R§­BbàIÅ–¡"’Ê”*K&Œà„GéÀ8K ˆR«¬Š¡`ØáÍàô(Æzþìš—j=€*ùóQNûËg0, ›Qmõp;oפÁª©^EÂ;™=Ûÿj­ 4SAˆ£\8s=Õøø‚ê% º7€€AØ0N |ݸþZ¬ÂÐh8c~QQ;/;¸:½O 8ðü.å“´õ™<ž_ž­“Cž±QM4ÊšeDé¡/Ip …Ä Éæ¾ßàþo ‡ã~?ã÷ í48¼Õwí‚ÅÆèQzð‘m®SVJÀ3‚”@ %ÐaŒÈ`›ÀÂ#MdÃDÕYŠÄÚÚ˜d±¡f~ÌÀÐ dš¤IUTé(„ 4C b ÀBB1BȯÙÑ7–(Qcf1dlc|¤àΙC(£X_ÂK ÂQy,pP‰„B¹)R¤ª†‹Fæ·I5 †¶ Xƒ#ÉIa¤‚á(@¤ItÆ VàßaÇãù³’M UJ,eS²-“4ìü– üHÉ‘$|Î[š×$£ðÿ•„Én˜O±~&ò$†¶èîeâ>¾ä÷™e–YVU–ÎNæ\‰H¦´\6I Pµø‰^fƒ²³tÀ18ãHËuj›~†ŒÍ ØàÙ«DÔükò5;7·L¡ «Ø®K *Éí0É-Wæ,sGQ´a ¾st¯X9uµ¥¶ß/µyÕ“Úý·ªqMÓõ³ ™³? ¡ª@ÁÑru´boùÅö®wë:ƒÒùm™{WnûSþ:êõÞçîǵ:gþjˆÞ ù*" ,ÐÆ¾êÂÃçM¤ø|‘”èNLå xþ^NDçŽ4£Lòç ,X è¼Ÿ;,ÅN¼̘ á1*a~ÕôiÁryd6û•ª°‹çp¡'É¥ªWj2ˆÂ# sERH¦9…Ô…͵PâœyÉ˙ƔÁ¬î•Û@½¬(àÉC¡2æ.~¶Í!§¦$‰:ß6øC#ÝrH¨TQIdžDú™t}_CžÄà–Hl?}?VšI•ŠÕfÙ0Ç¡:3&Šœaß«…hÙõÀnЍmÆ#0(Cn‚±ïpP|þdô„UNØ¢vÕ R¸ ‰ÃàR¡§î~߬ &å§‘Ý3oNíçÐ'7Z0ˆ˜UODSÀIçÂ`_¨Ç"` Aï †ÀGb0Õ’ð7d4¯4oËß+Ü•µbÞª¡ hKô£LVy1O×èºù~yÿ×/Gûäpkò¯)ž*Ën¼®­±º|Ë C½…k=½çõÂ'ÉWËû ÍÇ®õ#rü!¤w£ªïÙÞÛâ (ª‰ ½à9Á†ó¸x PеUQ[{&î}.óWC)*ªÅŒLʺ¬—wˆx¹4Kƒvˆ¨È/ñ L>VÍÔýOÓ~­çW±™/Ò F ¡Ù:ä{½4‘q “‚z¢kóÜÙÇ—#×ÄÓn¼ÍøW'FÙÞboïç:ïÊ\Öæ 0:®ÿ•Æm6m¶¶Î¢qf‡”âàZMéšßYy5uÌM`# Ko a³&¬»xoÔoË—^C¸tË­dˆ†lB-i¥atôéM%‰¢‡ @ e4Ù3â2䣒s0›0a0ÐÇmîå9ÍD3«Ï˜PÖºdT4ñ5LæûGÃî{ýœ7ßVüœúx)"Åí«XîîßB§{v–#‚g–5s‰™ß¿ ÎñÀ²s˜lpœNN¦Ç1Ñ'.'C$7 ½ Æäôî鑹^3ŸS‚4PÍÁ$ÒG(Õ8GD¬˜ubêš}³Fé©Äça-]µ×“=†|;²5n›e)„íëqR·‰Ö™%o.42™ Œö4¦Ss:ÈÉhh›e5iÖTa“g.­ŽIøÝ×›„Ör¼ºøõnš·YÑc­Ô˜4§SN9I » Í8ä@Càƒè;îxot“7ˆV §¸B Frµ‹;â(¦á”‡!Õ†ëÆrM6í©«%ÊmÇ éÀ—.ScELºFóz2ºF¢´š.™  ÁÄèM#S)0“gbt98ºµoÏmS£ \ñ&ÉÂtW6ÝšpZ˜ÕJ`Ь4l©F»MøêM!·#xî1É0š5LM8ª‹…ÑÐX"à4·(,9˜`é³)ˆ+ŽW¤G^ÇR*PÁÓ4"Aˆ-Å¡Át28 Í4‡NnU»tÛ)· uk[¸$7GFŠSD9šòªËfSšbO¦sNA£Ýu«Ò˜‘–ïS¨Ñ5K&¢Z©ŽšÈ^;séþ¦§¢’v#Ýç$ËNx7* 1ACtŽì@Þ7SÊq´ˆäÊD6ãM¢7ok.雥ÛÊÖ_dÊ#„<µ7€Ì,ÐEGдH"»B·‡û›¦±‰| 8‹ø’¹Í¿ýøœ]hlËXÕ€aÅÕZQ¾S! ð‡V“·¿o'ƒÅâ{ÎoÚ=mxÑ¡î>'c½É‡z°³³º°K6\n Ç!|HSpì0¾GÉüŸq>P©!7=¾¼Uõú{u¯¥êî·ZUãLJmͶUã&·ß+uФ:CŽÐœ†ób2²Ì@˜FqŒç9Îé"@Øy\XhÄ× êÂ3Ñe°mÅ<ƒ@4@näm?¬Úó¶ìla¹phqÀßI©¾å¼ˆïþví©»Ù”ªJ©TKI£ âW‰²¡•%T½ÊäÊseúæSÔÞ©ü¸—J(hZ(h2­,ÊSj#Vx…ý_ Ï?_^fktïãRùsO^Ž¡dbøgˆ¸å¥Ê'Öâfx~ÓŠ[NLò‰\­ l©’¼M²™< a¬;¤Ö‰ ² ¬öªwSQ À~è66×…62$[6]÷)üz½ý}3‚9ÿ¯¸Ùþ~UÛ O÷}Ìwhh Øî»³é·ß¡“Îô`çB97;xçÓH;%\°ÕŠùóp:!¸–Hý$âq`Lï8yåÌâà>>·VÆ‘öS”MÒ¥ÉÌ>Ö#è´hã;©ØŽzßÛ¤˜ÁU)jZ¶%¨²X•Ib”*É-"Ë•¤RU°[´Ñ,Ùû’|¤‘–FSꔑ“ó 0®²Øx„Bk‘RÎI¬Á¡é_6gK2:¸ñï·è?ƒqônÿVN ©2²òÃÌW4ÐÃÂwN-?ˆøÛ8k”«#-ã›OkDã9¦š8p&4.˜à˜ôE9ôdldª Xnišø9GL5Ut^ ÉÉ;:‰ªh†û'[”v1’q× ™5ªj„u8<º F èÙdO h™¹Û¯-r:Ì&ç, m¶šhœMj¨ÔÆ4µÊåâ¤ò±&aóº6“Ú‘ï…}Zªª«mªªúq$#¤î{ŠÝÊ£³,{;ÏÎ]Ó¸')<ÑÉ,µ^Y;S_bÑDêhÇnƒÚÂCH¬‰D‹a8„Y$}A¨·Œ¤NJ…ˆ×Ó=$ûŸ`G÷ÅH’ ‚E«"U’Rʰ«*É,²J²‹*E”Y%*RÊ)(©Eˆ¥J±Ä•j%©%‚/¬fH+(0`í¡í^¦;¹¨†:uçd¥ãëŒuáúõ€‘â‹§š ²O ˆà›ÔŒß!ß$9ƒsqÔáŽá¼JÈ5cÜË !ð–¢È‚Ø_ù÷c> Ú™Xz=)üðé¬BHI×ââŸ8ÒQZ¥'…Å8سE4†ØDFRjÎS”Þ¦¡X''Ô‹-KbJŠX«ßA’ŠFABX ø0ÖäˆØ€¾Qö¡¿SKˆI;n˜¿JHþåKd’eÝõU’O²F¯¿’-£Ò(ñ†©,*1­åab²a$c D b¢È‘I8¦ÛB“$ ³FRl"%&lf‚R€% @‚Mf„„Úб-Ì (b8 /!0  6@hƒ¼<&(A¢+"F:Ë e`B%*bíÛ’LJ¤@µÅ³Lyœn׈<)j¤=<íñXΆª8¡É1‰>n²^ÌŠváÈõG`vðÅî;z’VÀ\ЦP›ti%S¥0ë0 ~‚¥RLOç{½ï“ãŒf_­ Ô²"JY"UªUªRªÕª=°Tj°ÌÆ,Zö$$1¬5Â#2bFHÏÀ™ŽI_&†R§1¢.DV‰k0¬C @Õ3ÅfVP²e1UÅ1‚†K ¡7âfC•å-èFHH†h…$Ð!C0€Ð°‰¬+$‰ ;µt9Ob{b<¡Ä‹¬ƒ#tí¨ë’›a£¥KÒ¢#ÊR‚úÂ|ƒõ$÷'Á! Â)"Å€, Ôh@¥¤ [$€JZ;FdŸ„˜>#)Gc;1 V b`a îQS«G…I-E©E’yúä`j‚Á²yS¹'·Û`äÛÏãÏ)»zرª|µÎ†SP׎˜—f»F‹ƒÞji¢JXÐ8¶i˜š¼³F(sLÀѲVÆä1»¨qÃS×±ªºÕÓsRšsy„|lPM[ÚΞºamaÓÏCC|¥Ë²Ñ˜É¿Öµa®¤mµª:î* Öºi€ê!®2 X<8D"¥œËa‰á!ØuÈXTªIRÂZQQFðØg : —óBm"KdBÕXª«K$² °¤J°)"­•*T•)@±-…µj«2AE¹‡8P E¤‚LªX’ZD…’–(¢ÔŠ„EÈ:ƒÊ:©B"*IaÍep[¨(K.#p£ýæDŽ4»§0ºz¢†Ú'DyÓÊå4$ëL'Sƒ6}noÒY:ÓqQÌdJà@åìwL¹@ëèu̧,²Ð„);þïPÙ#¶{ßuùðÉCŒS„ ¾wu÷ùÒý_ä©(éqz¾•°‡yà7˜â>Z~@E_*i2„)¥Œi§.ƒÇxü‡üî¿ýÞ=ÏÑð›3_§(‘x!€E% 2@ÑPZc ékü_w¸·~!Dq&f$7KLT-KbaiJ5×ï°ë‘7º.’ƒå kýN§Ýqq1C¾=w§îꆄWLßÀà!pˆv'L“c-V¶ðhA¤Q@ ‹/±Ôžã“’ž]L¾VšÛî0º ¿ø[5jªCa qIú‚è¢DePذ§»þWºôùy êH™9@ñÙô˜'-‚ GtñCÅûóï¾õ»WÑç:$ôóo­Çomk[{Â9µpK.$!tÞþ.!Eˆ§f4nDÊ…Õíé8î•—A”«Pië[18ô+~¨Y:ëß¼¹š² x lfíûñäIU>Ü”?0§Àp?3,NñÙ«=nò tC(£2‰EMW3½Ë}¾¹ïüò¦U_©E!HO¶B [QƒHZ*1ˆ†“лi³x, $6⣔³vB Hýù{¢*jŽHüäISŹÁd€šzt'²µè¾8ÒˆƒïÿGÕÜ €€~ð²—M@#Gt÷- ÷£˜Ãî¢â_¥£°Œ¸¹æ¡+ÆÖ59Ò?sc¨Ô’à –¤¬är@4PýKwýŽ#²¢´•ÿÈì»}8–d”ÊäL;œöÊ<bÖö”­Iéxíß0ÑQÜ㳬»-—± AŸwc[^MdöÞô<Ÿ§ú{¢û~ ¹my­>»_b,Â\$Ÿ`ëº*Óò_3ãÝ=WËç¬~‡²ÓöZÏ¡^ô`¥û$%óe}Qï{-OÝ<ŸrÕíÑ7dN|!ÌÑEˆÀ-˜² ‘V”‘²–E±-Ÿ»Òá›d[P©*è1aL€AŠAEy=oÑçîïswî3RÚOÅ9À¼ÀˆãŽ7Ì^NЪ£ÂÞ·Úd–{q—ˆúÌöÊ’ªïk¦"a€ß¡ªAüDX*2 ²(„€Il KR%T´²¬R©hJX–Él„–©jÅ*J´(€‘€¨I$QA„DˆE’FŠ Rap;Œ ‰ÔFêtÄë0÷¿»ˆHˆAŠ€$‚Á"±dDPŠ B¬‘©l’ØIi),€¥ARÀª*Ég«ë_¡§ZIî ,š‡ÈÔñ3[ ä4Ô¤B:°+J$(,Xº1nH°i.&bÀÜíoÁûݸeÎ<–„ë„@±Å€ H1‚AA6ƒ6@Õ3ãúßÜrã$rN –ã!ˆô~ö„ÒŽEÝÒ>YÚCPD†è[‰º²å ÔAg>1ݹ?=Íþö¨øž×ÐþgíxŒÿÛÓxoâò‹*7¯ OŠg»U×Êýù+ª”££1\n=û2܇HöRrâz™¹/wHQÞiÎÙŠ;ÁŸôéY,eý^ ‚) Ià±ßðŽåò&ˆÁ‡ âYg@}œŸçÆú$¯4Š~ÏiQçøý=9.Š‚zŸâû3âú’ö/{ZÒÄË2ßÜc7S/BÜÆH'É‘Ń0”Öai µðpÂJ½ZIRØÿFo7=ì9ùiÒ|ݬCïû?]Ü~7ÁëÑøu°ˆAßX{ä\0óBHñ>2 2ëI$m¶Ûm¶Ûm¶ÛRI$’I$’I$’I$’I$’I$’¶Ûm¶[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[m¶Ûm¶Ûm¶Ûm¶Ûim-¥´¶–Ûm¶Ûm¶Ûm°+$$WõT…”°¨±b‹,P,X¡¢ÈH¢ÀX¤(ÀŒ,QEQEX±bÅŠ(¢Š(¢Å‹,QE,X¢‹X±b€¤X±bÅŠAb‚ÂAEQE*¨¢ÂZ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim im-¥´-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–ÒÚ[Kim-¥´¶–Ò[Kim-¥´¶–ÒÚ[Kim-¥´-¥´¶–ÒÚ[Kim-¥·y ‰!!û 8C5Œó h¨Êt&©Sã¦Á¤Ÿx´~Ze,þ±oßIÁ7N ‡jÊ@;¥xM˜Ò  Z (±³ê4Æ46 Ë ʃ‚Ũë‰è»êXbŽ2ª*›0AÙ †RébIä£7\ú#1!¥DU“(ÀŸge°5P`)£‰,@F»Ö€ żW!$ø<&àmýïI4O”Þ¿bªªÅU‹nó’NŠ7R‘_·Wï#KÖ”ö¿7kð¨”8™@´ë¶šçqƒIdžÄm¾ÛPÚmM¢ÄÒEúfŠL;Ì™h#Ž«¶àØ™¸Ã ÿ…¢RpžÐ¼w’)2É“ ™bm„¡äÉ5ÔË£„çÂxØu›ÞAÀ”&XLЬ²Úµ Y6äÏ2šT䛘S–Oùù 2Ãa Ž«if$4(DQ«Y‡6dm”ØkÞ‘ç²,^Ȉ÷;óŽúêäžT²0–%HQêõàM‰ùºÁ ¢©,\„?ÂNùåì‰bRØD…’¢Ù¡D,TE¨”‰bY,ªQ*¡]ó9= ¡ËÉ}y ôQðù2|ú™$:'Cî2pí¸¨˜“ B`‹P‚Ô©‘ˆÅ ©¸€TV  AŒF&|ó¤JEs‡¨c¦¸py$iá5jEŠ * ÅŒUƒA‹R¢–Y-[d•n©ÀŒrxsŠ—ÔÞ±þ¾bQÓX˜Îã2žò{²rx$ ªŠ¨©@µ:¿µjÙ$ &²`+ˆ ®âÁ=¬P4´Äv“ER*¡h¥ Xµ‘R”°š€øÈ:\G« .V.Pˆ6¸´‚Hv=+[ìJ@jŠQnPq\JýtMªyäÁ¥Š[ˆ$äУ”?ŸGUâ·ž»¼Ó~¯±ø^;™âü|žË}Ýbrl¼Ö©O¼=o¢ÆY´7ç°{²ýW Åmð®ãäiÑÌC„´:cŠ„…¡‹e‰;‰gøe "¬H©TU FŒb¢“ ¢D B ¢¬Gåtˆ¨–Çäÿ/éùþÓér'r2‡yçy4ýíN‡Øî9¾7i™TPÞª(€z¦ä‘ˆŒbÑûP;¤‘Œ’KœEIUHÄR vH¹úð–S¯1Dìû•X¸"e åŠ !ärI%&QÄy’È·:Â3!d€‰q•É,²0%´h)Z‹"±€ ‚‰,wã¨Å6œÃer4¹¢š$F,ÍD2*Iò6A¯ïBÅ î“[Ó¦ÑdÚB+̨j&AÖ²îcCèòj¨£îàô‘ýš‘#¶°±$;ËÍŸV£SÇ_éy¿1*FSSXÂvHf Î ÁµÃÌÆ‘ŒR»ù›Ö*‰Ù€g;sCýàb,‰½ ”#ð¸ïIÖ*yq>^¿å'Á÷·”°E.Á’pǩǒfåÕÓcÏì:e¸â¢ú}2_ä?6\òƒ<ç'V÷+·õnèLc3€„!„n"þfþt·¦¸¬à \¸Óд•Ap¸Uû¥Q0îžwþ>–r£ \Ô©`èhÑ`b²¤#/ÄÖ¥™pR ˆ‹V‰u²&8”!@ÝlÈÔÈcI„¤B(Òá3sý>" T†…HÐшv’Të¦!TÉ„“ZRÉŠ¢LÂ!ŒbBAÄjÃe)bà0) ŠJ 4BµÓbÙRé D¨­3 ³ “ " fÉ$†PÉ)l…¥ P†°¸š*ƒ%`ÂFI  C.¤ R Œƒ6.lR4YV (cJÚn†ˆš“ ñƒ³OåÝlذIJRGÅhÀÆ‘^ñHBÕ+-¬AîØ%XÍ`¢†5 ¥R¢PÑÔÿ·sÄwødÿ²ï¿¨ÿkû/¾ŠX6›ùoó±%¡~í÷{Õ–ãé~{ÉC=G=¥œôYsÆË:½ì+=ïYï(íÑì}ÏžM?{Жòø¥Wm¦Ù»— wv ¾nUO’Y1Þ¬+ÛîøN‘{Ú÷¹ì¿<ârŸ$°L]¾–•»»˜¶|SkÃ>n|ÙÜ[—¯Ùí(w|7OdïFÒ÷Ò^üÐ÷vf÷ÄÑ1^öv•»»Ý×(øUί&j2éÕ¥^[!Õä{å—¿4=Ý™½ñ.[]Ò†f³¥vü3$ùÙìöÖñªlÁÞÌ÷̘æKÐRäݸ®•&L^3·æ¨ûñb¯³´¼Z±gz³ß1œÅ3½%Ü»…´çºþšó5Ôrî‹í÷Å#”,Ì»¦HóÛ>*—ÆÜøLóï¾,Ì™BÝÝÝHóæxâ®Í½Y™3éù™<>½ï{ã$Ï“±bÍêÌÉÁáD²Ûã$ÏNœÌެ̙^îøÉ3ÓÇ37«3&@ƒY™ã$óñ“,‘Èàèk3:dì“,‘Èàèk3:dmÍ’95™”ÉO$Ž@†²il•M€805&ÉQ´ØƒRcd¸Úlƒà'ƒûbY7kd¸Úx“%ÆÓÀ¤˜Ù.6ž$ÆÉq´ð)&6K§I1²\m< I’ãiàRLl—O’cd¸Úx$ĉ%òE€ ˜‘+…¹j®媸[–ªájªÒÕU¥ª«KUVÚªªª·JLÅUUUUUUUUUUUUUUUUUUUÃ!˜ªªªªªªªªªªªªªªªªªªª¹ÿ £ZUUUUUUUUUV ªªªªªªªá™Šªªªªªªªªªªªªªªªªªª«œ?¤»m²ªªªªªªªªªªª  AùÞ¿Ñ~ûž°'Љ†¬2ÀÔ1¤XY…>×ãõ2˜ ô¼Ö§÷ÜGô=Wöê ˜<×)ÿ?ýùywØøÏK½üºܤãí†ûX»À‘E‘MÚÄJžEP:óä” Jþ ùo,3"L¿6¢¨øîR¿s`–Û¨(£I ÄL Q…:·Ø„þ”óIñ#¹&Õ&”ad'qP˜H±c I‚Ã(’Á¥‰-TÄNzš´á‘˜ÉvÒ%Îc)$Òƒ \ãeÊ,.E 1¼ÕX#*†ë´³ˆ’sV¢¶ldÁfHÇ#VZé—,¢0ÒÊ]¤ÄˆPÅTE›4ú²qTš¡þ4b)¾SÌC¯þ4´U*&&'öþ÷B£ÛõTÆ@àíšEXÔGòm•2cô|~ÙIwj¨nÖ"$ƒr’=ü‘= ØO³fã1õ‘PaJp¥ :\QQADE VŒÿDÙÄF¢9Dû5‘ Qa¥’ØŽ¤l‡}$%,’B)J´¾AbJ–$ŽŠˆú©ú'T°~-ØB–@j•‰fçöÍ’ã ˆD|€…‚˜d‚”3‚ö-ލòT«Ø i¹O(Àɤ(¨u(ò’Iñ¥Nbɺ#Š ŽÜ§1ª…XŒ–MÉ',„â‰mH¶"KP”N à•05 GÝ£¹D±ºá¨“Ln­‡.UsŒ‰ÓoÌŒë!¡3Ádc$ Ð/RÃ5q€ÅKE V Ò¸àP‘ˆ›&ˆû˜NiHà‘0ïi"¨Õ„UO›YfGåÉ$⎡5Ș‘ ÀW2Ž’íã–¦0 Àâ07³>„Ö¬ >Ù*¡am¶ÑlIG"jô°=ÐËd”X"”Y–%Y {–D€P"F€¥P¦*¢@5"²A*¬…Šh<Ý È]õoÛ-Æ Ã úE³ªJ5Y'…G’¼jœ4…7jYFÊn "Ö¨*ªªªªªªªªªªªªªªªª¶Ûm©ëI5Dô¦ µ äžc­",X‘‰·€QGBùìøî6ÇÚO“Ë'.À½uÒ7ñ.ñK~!ä½°‘ðï½Öõ~οç÷¯r:2oÏ_’Aôõ ½eŒÞ;ÆvÏ'äùàç—?L‚’ÁÇŸéoÑüœW"!ݼÝt@³FÂG¾t8€„! ·” ^bDÆÁØÛÄ1ÏQ@½©Ç2{/îãûŽ—K@„‘w”A Ñ_Lòâ'x6“õ©ýL=ù¢~–Õ«*—eªÔ=dxi~OË…€|aÉ&·æønÛ¡ îÀï’¢Lç¶åÒ#}öÒíQ{íBS)„–¦öª²¦E„_ ²€Ø ­jàO}0 ¡‰c!(lo‡S*8šŠ¼·€Sn:iœ÷ )ôí•ÈbžŠêƒ d·¶v%b¥)´ŠŽöx¦R¥)9êô(òÅIÍÇòÕ„©*:{ÜMÒG°TŒ_cû׸ÊO0‘-!RÉ;’Žc_ãÿŽ¿ÉÑØ#¹  p‡¸Çµ ŒÀ@DBH „ $nþ‰wuòêß•|œÇ}ðè&Tszi§ý?-¯qzÒ-wûë©•q\fq[M²ÁôD훤/¨«ôJœ.î1û;8ìèäóç6'ïjî«M°ÇuHRþÞHôÃq>72¹2§É†’5™DDx¢BC„0Ë£]XŒîÛ“éê5»:¦šKàÁß6Û¨OÊQó1¿‰m6‚ƒ½òÚZêç4.• $ãÀ Ø¢D!‡€BBÁ2€0„(/nI1wâ5!´K’=U¶½u.ƒT¶òƒéiWø…’Íq/þ’ÉÓð" ©ÆîÕö‹ùú`ëR{)÷Åüˆ?è¹l£ ÄµÓ¹¾¢‡ƒïï»™k„ƒô¿'7Óõc¬ä9~‰AP " ÏÝ¥„X,‚„R AŠ 5jÕRÕIQ,H,$Z[@FH `(Ä" ¢ˆ‚YRªÉPX‹ UJ¥¢¬²ª–J¥T«,‘U’*„QTŒ,`s0˜c@qÌRÅ‘a!ßp +I$™m)“)(#—4Ѓ£E£’[RŒ‘Êa)G- aEm!2`Bв˜8L!E"Jj™Ia` bH‰)JêÑ™£#“RDB–IÔ¨R’“ –Ä5*–¢–,’‹ʉçU)‹R¥)jßèàÑ ¥ÊŒ*) ŒˆˆH¨ ˆŠÉX_ç¬úü`iÚE–Q%• Ÿ'ÇóÉí3 ±§šã¹žíéÞcÇXÈ„ÊO>ìºíˆd Ô ¡TØ€­€;ÀU‰K*DoDEŠ„~¶‘áT?Ñ£öà÷ÜùUïU qO˱j €’$, ØD¹ ËU#Cñ¿·£´ð)À^cò|Žçÿ~¶tº¢?ÍÓÐö±çüwY÷ßßHm‰8¤ò§øæ²h„î£ÿhI¹úÊÀò¡âpVáxºi Xˆ€\¸z¤÷žðàú>»_;†¯x±¥$–¢$åB”)ŠÅ!1õ–+2¬Â1"Ê•QC Š‹!FÐH$dDH4¬©tÔuÈ¿X[l ÔNHh"!1dXˆ#Cœ*cDHF0Œ'8KX $J‹ ¯ð#´3åäíȲ65“²Ùhÿ¥`Œ*'A –Ê”†  X"‚é Å5ôJ¯Ñ¥Xåþ8…@ÌP=Å×Ut*¢½О¬p¤Uz£ ™ ¿F¥¹ŒƒdÀ JšnQ ðƒ ‡Ä]!ŠÂç–¡ÜÄE²ÃŒ_g$P8*{—‡k ›hlˆx)$ˆyHY$)d† $P6e @!´‡Î‚¹vÞ´DˆÈ(Å‘ŒFEŠ ˆÁbAK,ªYJ‹^âhðí€d²HK**IGm?Ó¦dаR"ÜÂ*A‹ãgÒ*%Kb-¢¨©‘¯Z˪² bn–;…Ðq£þ  òÛƒÎü¼œMÚŠ+¾A…ƒk \—J¨„¹ H.@ÁɘeRT)j\æ!3VBI.ˆ*ÉtÀ`Áîb”$(hÂZs=Py Pm=X7*d`$0€€ '!ÅÈŸ0èîÞI­-ð–mý+zYp|¼ì?¡}n*Æ‚fùã’6•òÎoÖ¼®m]óxåë÷ÙH@`œµÕûˆª'J%€ZÄ!Eyo­ÎÿÒçoëóªè!‚\è¿×ú:o³÷ò€ncðb'»ø“ÌxÍ?]ÞͱâCª( â;&½6È®WžÄ.ü8„µKB£#ngòò}Ëýý¥ì~‡-ßÎä=žÞA¿áúa¸jC%˜eÛD¤§›Ž4q4é šÑ.¨…1C\€N;Á¸Ý4"6±3Á«(ÕcWÞ漣n–Ma¡l²"m˜k°h©[%XÔ˜¦¡H$J% P¦ÃUR0¦¤Î©£ú™4e9*g[“¡? 01£Ÿë² ƒá.TŠ †ƒW&‘n:Óõ›»ui,vïÃGSU¦¬²›' æ¢ëWˆÓR“†óSD¦Ò)ˆ"nM ¦ØŽ¶³l"LøòÃY&Ã9a”ßDÝ.Z¤ám!Õ5Ì”šŒIÁ©ÍÁ‹¤Rd5TäÔÖo*hUXY£ñs¤hìct¥JHÂfm”­VÆ­L´`àðLͶ˜NSµLÃ*éÁ3&†Ž#ZHL˳L„˜JÕ1½%YXÓ}òšÈhÕS‘ Ú RÊå«"§ƒ¨2 /1Ñ’ábïƒ%;T·ÓóÜhg6øCDÈÝ~Ž‹ Ãt¶Ésd£¼ØwƒZnGLtü3s+b!Fs)Jr:í¡dÐl(eÑ(Rc*å„<áf 'àõÇʸ ~—#åÿ‚¾ ÄÎ/XP i;¿k}þÖLŒ"†ü„2çñÞ3ÊöŸñ;YàŽ¼þî?aO¼yÃúL†Èñ{‡ (vG,©¼ˆ—GÈ¢Â'iI-‰Í42'óÝ’½g—Ϙa+11•%ĆS’È`̉0Â}®b0"ˆ9AU 9ÅxtБZJ*¡A…€¥†V)â©S¾?ý^VH dÌTZQ1D3Š@ÀoA¡"êÚGì›HžúŸïöv,QÍ(å~ƒÍ¾#Lˆâ:T² 6ÊÁKˆ¤2*X‰h¦ `ª*içLæ9Jˆ À ŸŒ<˜¹Ï=üÑ­@ Ðû E íB¬ˆi.ÕƒWÊÙ:´ïÕS²9˜íàg¿×åÞC$ŸÚƒ¤ˆ ¼ù÷Ú´Ð6¤ ’MÚF(OÜJ˜V0ùÕ$ŒhY(åþöúº×hw`y,‘’¥zÒ$K$U‰(ÿã™1ó•¢x˜qRI¨Ó #Æ’•ÓDPh €B Ew#ø- Á‰HkH& T$hšg(hÂ`ÂaI«Ô¹°F–H„ôDÜc`I6ºFEbÀÁK,VFE@ET( €ïÝÒ3*Š7 Gie2,ï]KÚN: ™ÚH•7DÄIiEMûˆ‘F—s“‚–KfÈ«‚ jà¡ÕKb媎˜À\"v«Æ€xî¿1eDÖ_¥ðwA vݯéýý#û|¦Ï˜÷žàÿ? ín àG«!¦±ò&²@Â4«á $¨ð˜•„\=®0ÉTu,eq^f—ÖNìA$zïõçÊÔ瀉£ =Ò=.Aú]ph2eÁaýFf³q #ܹs÷zÉî2!›N‘G£ÒÔ£ˆia*Ôéʲ«û, “.ÖÎ)‡ëIÕ«]ÚS2e,IdA0Š F!ž©Hެ°¼± E—ªLÑHá(ql®C³Ò˜Úe\[0’$.&¥3°2׎‚È‹flEºÄvû™\s$Ê]0½ÎA©´EDާHd‰*Ys0 » ‚…%*hYfÒ]“v?ñ®š&‰Š§NšjazÅ×(‹CS"T¹FS@æLB Ì€Ãc'^úTãSum"k×®RBh’jÈ^1[ãTá²Ñ-u¯"IÁ4lœÃ•W)25I»F& µ­[’2'[ y윸§z“ö©ÀšÍ[¨œx»“ ;È“p5¹†Ñ^Å Ó( [¨À&÷óÑ7“PuLÌ66 ×»dZ’œã$p›&N<9¦‰Õ»s›i4ç<†¦k©1¡-MÖŒähdʶÀtË\ ›IsŽ€Xik†l‚Öí·GV\V¸‰Í*n^rqÎxsG뎼yë& MS Ç]TÝ5T‘×R7rØ6©uAZåQˆ1*ðã—;V$œâjÓ:ÌÅR©T« Gãž½µcMðœðv¸òN”—ºh%A.³!¾?éÿ•ü-ˆqá¾cN:ޝ2hylwrýëàö³¢€£È¨±P t¥RÐÓHðÑ ªÉ9éο©»ÇžPäÞbÉÚ›0fP,єƵÁb1\VH%Ä€†µ“þ¢ 9Œëï~þlû´Û0|¿âý?ÃwB-ˆ²×êŽx‡‰Z5nŸth¦Œ,ÆO@ÚÃkú\¸ìV«’mI7‡zF"Ȱ%´`$X:Ìx2¤¢µ­е”ŠD±XÖ•´lJ• XˆRÂ’–,(R”e«U%°¨²"@U¤D‘d‚ÖÔ)*¢Š#A°6† YH¢ËB°‘m¢È˜H«#HED²¢S BfžoK7ŸÝ m§:@”Vi2\¹$4€ýûû _Qé:_Cë´òF@Ò Ëø~6œiß9¯Sî½Fé5!&á8!º`‚®*I5èO½IG­R¶KkÕ6R\'ŠJIl@ƒxSÅ%HÊ+|Z½ÈÙD/ävø–2ŒE$GÀ(£ˆ˜¢`F©‹@ãd$‘hÆTœÅ‰ýl4ÂjƒV.S(¬¦)&ŒHª«$Ts-Îñ˜Ýbeª™0ÕŽ8 Öãq T™mÇ%o±0²l’D‚eÜ’, ¢‰'6•"Cø5j2¼ÐÒF…–ºFÌ]1M¢¥’MdQÂP˜LÕÌ’oCds"íq“k…E²©a(oŠDˆ8–˜fB”E Nôû5'âŠBY ›RDîXSÆq @(Taâ©]ŽG(ÀSÀzËö¨7X{eC\ xD‘€¤DþñùÒ¢ˆ‹b‘ÉLRn?mS£԰¿bŸê%OÊýïïrQâK$ˆc|!ŠW°¤…ª¶Bsédøw=Ä…)5“@ö§<h©hØ÷ÉfvCu¦æ°xû1­¥/k×¢L‘dô6ìôUÑÐ8ñ×N ²¼n;rƒ(ÜreÀ·‘ÔŠNäw pbOÊv' uÑÚ%Ç„t£¦ ¶"à+  XÅŠ°ñ„J•¨YA% !%… !‘" IB‘,`RÚ BRƒh1,PÄYX´ dÂ\€ŽF&Á'™±zž˜„«EUFD#"‚Š(¨ª+UUUUUaü*’ ±„€¯ ŽIq~ëðë”RhŽÅéàüÎÉÔCتj1ÃÃÞÆä}JZK&}‘À¦X}ÑR§à4Éÿ#T<‰d²yP±#s œ0w|I¿,’²¥¼“‘#SD•¿5nŠØ, $t^€Ó¥ ÒÄ6ðº¤ÒÙ,fŠÑ(Òh±˜ºf'½ $ÿ ˜#ª$® Ø\©8´«wI™y¤‚LË"$*%’%²¥U U R%AT•%„H“±bD˜“°v;SHH ´G†ñÛAs¹´¦±ÂŠHH ‰K"ÔŠ²  °©Þ— ¦Žp6V)—«Õ¹¨kNÿ>/“ÿžØòÞÿîüóùûŸÙðŸú#WS›mI©6ÏÛGzÑ¥H™ç—½8§Þ9ƒk`¤ÆÙ͋ʄ­Æ©R×ñ—hÀ!R5üŽe;DÀáq ´•³æ|áÝW4};aÕðý¾Ü?›Ãé ß_Ý€ŸÁýõd‡Ó]{)—Ëfh—ãõÞ¤]%IèNxã¿Ö¼”RÅU6Kói—&Ð@!€B(0¸àëñiä`ž’DÂ"y!òæÐfÔÁð„wEr°CIUŠå]tð=]×˃¬‹o!¸­UÞ€¨è´Š=yÉÅ1™9BgIœ!¼AøÕÃAâX²Ø»Ôì€à|¼CÈz¦Ý_)©ÂÄHmO†=>äÄÃF&Y—Øe”ª”*Êz¨¶I1';xØw;\ÝAŸôª(×ÓŒšÀ10††$²KQ*¥˜€©UÈk€Îé"¹hqqrëûšz‰lîAüÛßçJ½ŽÇå"èÚàó^Çh^%žÊR‚O²Ûøncç¾ZÏî#ù¸½µ¿Uñüi‹CÎÆwŸ #ÛÃÝ´~cè,º †S¡`|c¦>}iƒÿÌ{×¥´ŒŠ11ˆ‘&D¦SB’ RÍÿÙHX]Þïõ mÞúº{†ûË9Ì©2ŒÌI€ŒžÎƒÌŒ#Ë‘ŠÂ†¢jh¢eR¾ö{Ó7Û“Ãižðé=½ªíd{ÛÞÏgY?Ôý7~¹2üú+“æ9!Ý | žYs>—,9ovŒÓò‰î­Ó×l÷kö‘žÝô]¸o~…NªŠÂ÷q4êùñ?x„îNÛA5N0ÒF5ªcP®I£pd%1: Á]@3B ¬àæffeT¿&Ïö||ÿÙ¡ðyGgoWäü]qgþ¾ÑûŸò¿•è÷"‡á?ùðÊ«UUT@"(+""(£UîKTY)"K"Ùbª‹"Á‘ƒŠ ˆÆ Š'å$@ýiATETˆ Ä$TA‚¢¨Â*ªÁXŠŠ¢*ª V!` ` "¢*"¨ª**  €ƒiVÑKid¥$Ñ0“ ë‡ÚeÏÎ0lDFƒP:¶@¡"ž6|¨¨~ÿÊb$ñjÅR$ ¢ˆvVQ”ˆaŠ64´ž"¶DÊÄ|]?6 h*‚w¸©´À3Ü ¡s­Ìƒë²b7F´òuÿßÑ÷m«TmzIz¤‡OÅ©-Ye4ÌG…åÅ«1ÅŽ~ñsü׸¬´¤g‡ƒrÊêæBsXÞ…p¯ ·aiɈ¿`Ýö½ºSᚊsÐøñÞˆÞ¡œÙzÛxwû¾Å3Z3*!9N (ˆ‹PýiæþÅ'£†ý*Þ|Ο¥@5@û°ˆ~õ¿Ãº2lEØOy!€A8ùóPP¡Èf5–DˆÈE¨4`ï<—’úþWìA¡õ0FɸQNN( >dn~ÜSÄ2FÈä‰ä"¯÷ÿ/ä?™9òb¯j‡À[i‘TƒF""UPõnˆ=†Ä'“!G[2Œ>íßUÓîÐ=S89BH¡CL ¹wU‚”ÄC€ !¼ƒN»…²è€‰I:nÏ[sƒ‘®6­‘®áä Õ„Õ·zÀäÍÙA;ç£Xµ~¡ð~̰ÝÉ=[é5”¾úo¬ñPB’­€Ñ1Ûu€Ó5æ8a.ȹa©óΔÀ» *Á/z!Ë›~cáüÌè¡ÿ]³yœsšÃÞÄt©$ŠI@kû¼B0‰"¬)(-‹bØ“öë!…BÁP±m*¥£J#ÝÈĵ •b¥B–Ï¿±j$UØP?`úžgôµÍG.r>¼h(’H$‰"Ï7ë_ü^üïpåGËè8ÅÂÁ¿Ê^Â{*uêžÇ*(qh=&Qñ›XTbœk;½)H èDnªð8È‚26_Qj2PmDä¢pÄQ`k&HIJ#íìIE1±Š©`Ü•I e´ß¤¸¯TÝF$Œw`–JJE-”•J²Y%J±e¤•R“^'%@2 Ð낆G4ˆ<ö}A¯_ÒVŽùìs9Ÿ›´ÓXcȧcå7yÊŽÊj•ŸÄ·A Ö£¡éIë#~|MEúØM6Ûr]»i§¬Óñ {,…Ĭ¶$ÈÞ+à À?^:µXÝVJŠþ,™€ÂxÐ 1`¶ï½P¿jÄ”*0 EžlžÇŒ3uwÚD˜âX‘žI—Mbœ($.+^aBB@°Ô¡Äà‚hþ7MFl³Ž"b)Lï—‘²T HcBce/ b“Nì`^G0PºÜçÒÓ<å<ö¯¿ÿÍgTPÿº¨N³—úÿcÞ<J­säXˮߋ©õþ—iÐ~çúËþãÔwËÞ†UÀa Âc@ÝD8˜/ªâG³ó+ãþ8²Gû[!˜ <æd ­?B°UÄÎi~•Àsì{zvw¬¤Y„¤N„è+Ó6žiúÚÝNѦeöÏìSÍi&Ð|Îg²« ]5 [£å‹;×ù~d‘op˜}œ47GÍ·šßFö±w5Éh¥ÌÍýîfÌ.)€fE¸öS§¼[ ±Œ‘`!†}½A „ëhLJûvO†ùÄ ‡óÜ µ)`oƒº‹A7C)';öÌ4ì«'$)<Áзž'¼ ê˜6€ÙOé ‰ &ÅÒ€ëw^îˆÁkoxWâœÇ“N#Q»°®hc®µLOQSуH¿.쓾`2Ø"…ÈÁi-€­ÂU˜´æ·ƒ¯FW®³ëçð‘ÿÈÜu ÜKÞ/×¥É0b®µ0wîã¦í*4á"ôH…v„(±Àpa~Fˆ‡‰É “œT?RP¬HFäú’:S}̦#Ü?íxÇm\AŸpÿSŽ9Ã#l‡ƒý®t|Aˆd=nÓ»œEŸc¼ØÇ…/} õ?™‡#põþKâièB6óí­“*Îø3m–d¢Œ?둃ìucïÆãê2™àïˆn½59vµ FéÅüßÍxž°øŸ}ì¸ãgMò«sÉús©oSG¶Fº¡\ŒŸd}ȃ®ûò»¹ñ6eÓ\cËÛØÖºù¤Nb¿ž×‰‘| ?ÅKÆÈÎf}ÚTº‹-"R<b-a˜¿5uÃ|úß £POô‹o–@†d`'$ÚòGÕf.¿‹´äÀæ¸æ°¨N¨|¬‘«X+8•´÷)N[é/#rcª£òw’wÒÎë?åáxÿ¾WJ^šÇrƒÄdÓ©ØBõ>¶Å²É°W?‚L1¼wþ©Z÷øÓµÚ‹®‰äOèç¿VcøA@ÀˆéYhoVÑ–¾Îè²¹LÊBäÑKgìfµþôò¾Kîf¶\Ž]—±†§\¤\h»­._Øöë×þ+8ÞnçÏ9aÿcÔµ!•Eø¬,NU‡QEÃWÛVZçHÑû-L‹ìEŠô¥4ó+èû—¬vƒÏ!úÎJ4ñ–Ï.0ל,ëÑx èMø±lHSSß–m×£©"zåžßa½ÜPG+‘x…bF4®“¤O— ^+ãZµü5ÕÐ6]>6ýVþh­~}ûG งÒÇ‘;/{óFYlÐôޱî-}f(?20”zzÞÛè—HIë$fÛ”rÙñbDI%Ö92dÉ‘"@‰$‚ì¤ÃãB±Xöõ™›ë˜Õ]o©îsÕï{Þ¢µ{Þ!ÈóÿïävµÅàj0—˜˜—"@‰&!z_-¨ñ‡xäý×ö]¬I™™¡ÂY±†ÛôdoàôþÓ¨¿”®W83•߱λ§ØØv'9ÎìtóÓó½¾Òù8‚ AÓËþ¿îþ‹Ç{Qì…£ìÙŠ1¸>Ðüa¸;A¦)‡È»ZÛ÷½ï~à*M9æ¨Ë:‚uͬ2™”Dàñgl´ó›zñ‡>Àpa•È…ÈN@ H‡](ƒ# ÚþM†Áüð;¯ÀA€T„GnR‰¶ýGóð¼üTÒŽæžRy7¼L Æ8`MBxàŸÑÃáäß ¼@ æq‚ø¦–:o×#a>pŽê[“ÏÂV%ÀBpB÷2Bí׿nžž 0@b·‘“Ò÷ËÖ¯½LîÁçßî ìHz. RŸ}0u|–µº'¶œÏv±gƒIjΟ!2E¡l¸‰$H‘$H‘"D‰$W‡²èc„!ÛŸüìÍe¦š^÷½ï{ÑÎp`ý¯SÌð?gÁÁMÕW]P{Þ÷¿ôúŽó•ô}“Dý/Íä{|UÚºçÒç9Þ¯¶÷oãký>»×Q£ÏN«æÝ8Ô3ÀØÁÚ¬Ç µè#Àƒü Àœ ù PE0C7 @ y½w¾&ñÓF(3Æ€>@áéâZþ)nÛcû~Ù¦„çt’~ ¦Â9 (ê¥r@ `Õ'æûOþ´gv„ æƒš¸]¨n‚î„8 ü…E‚ª( 0»È]ž¤¹VýÐj3í¹w¥”N„ÕW(ÜïX¦1‘„ž0èÀ°Ð Æ¥#¯ ‡-ÀÀ 3O .nÞœÒü»í †‡RþGîÕiF;c~Mg‰ô©€÷4€„°·ÐïÔöwc‡qàˆÌígÑQžù=ïë?ñö SÇîL˜ü´Ü€`àà `I$H‘"bIÄÂ=‡$ÝÂ*ž68ÅXë3(ú×ÿ¶'ó (¯´Â>¹¤Bëó‚`,AÍU4òeµ `&¸¡htÐiáÐ$™~æúùG›[i;À¸,¢ùý©Ð&{Fk&D¶Í—?„dFmÒ‹±$+ô¿ êJ°¨ï¾z@8O„UµÖzo šVÓòŽÿwwÕLôžßÀß÷ÿËdG#פä.bø™(.¾°®6ƒJÝ\w–ïÑR/ŠÊ9žA……P……………„,,,À,,,,,,ü¤bÐ!ÉôöÜï_ýÈu²Ë¤ŸÁ¬)P-ܘÌH„"Áz´wÄç““VHÂjì@È¡ÅR×/V?`ÀÈ| hZN˜/Á°þ~ Õ†»¦ºð|¨©•©jÿß^¤ÃâÛo¾:*“Rž>ÄÆëµÖ´8ÈÆÈ¥J•*T©R¿.wÏ>º–xî‹kï‚ì¦zw\Åi_“<$ °Ö TwõR™ ªÃÎò¯æ\-Ózø!*!à[À'ŸL,‚L@`ÄîjÞA,PC®æhT{I/þ8©²§ÒII€~éýÇïÏ3øÇ,ß–‡¯‡™ù˱Oö:› Ü ? Ñô¿'Vá÷;—Û°tP÷ÝÓYRÙƒƒá¢©u1â^¼ü›ŸZ\xoÝ¿Ñ|! Ô¦¯Å$ܲCßä‰à/sû* U´÷¢Ó—g˜øB… (P¡KÀEdkoòûúö…¡åWáC­©úÞ|N=ÕÆ Y˜· yvøC­ñpfâ™u P‡Ü8@øA𘺀TCÆ5ÝÿM>ÓN`/Œ69}í·ï0S®÷~Kªgæ~߃óc˜£Ð{ºìþýÅ‹}ߥ¾íx 0-Ѷ—íŽL`kôÕ̲uº[:,ðÊÜs.}ᄀ³õÝ2p‡Ù-Î@ÜyTï|º»§ædqqå @‡¸Ü”†´g~\¨BÞ-ù19賂šÔLЦ½]«ýXŸ.´bÝ’ŒðµXBl0 àWæà¸øøø:90` @߀yÃlµ½3 Ù¿;‘äûôÝ¡ýïà÷š¯EØtð×;7o;ž,Sd¾q WŽé4OÿX3#qý6.=Ý}×h9ϲv‹ˆ4u˜)nÏ/9û¤þŒ›rÛýñ7qª®}™ÑÍ%ô.§ÍlhxWˆÔ WX¨Ø>”ûù“øãä4JZh%îøeRH¿©”ï"c;ÖÜÞ%3§&/‹ZmÛïâ!-0Zv ï}¾UàLhÇhèA×w77.Û76`v À€ýço¡îø‚÷WÇg‰ºÍbÜ®ÆD–ÅÁ79o&¨Þ[ÄÇ$Åb­ò3îQõ{:ù•Kx Ì >ßonOðì”ཹ|œRÜx* :´>©g3Ço•£ÐÑó*+}¢Œ©JÍïò“ùy…(`­,™t®}eÞm&£^íeŒ?ë©y(¨¨¨§x’¥J•*T©R¶3Ø÷î靖ݿõ,{<æœJޱ›ÎEïÞ Yy9°±‰5)ä7Ü Ž€B0Èä5Üá}ÿŠÕN9ÁŠqãì–ç ©“I¯Á¾æé]˜«Ã|-™èÓ6üu¤0f`"éÕ«d¸»ªŽÛƒWŠOÁ¼•g‰CŠô^òF½uõ\{ûÌ9°_RÌQ/íËlßϯ{ÚWæ¾8úûR|‚Ú† @­Î÷ÆKX>K^ä\žã7í-éfð×1Kd=”8J¬Én…bD/?3™+N›Nb–À¬Š À“ 0L>GÑCrÐ\ëû|çX~¾Z4Ä¿o=5çW’»ªocîíÊ–ó÷97æ?)ÙöFb¥ßš¦¡o½ì!ÿËë›ãÂhëôÃwH¸Ã}õ†”ºÇ#byA 2,ÌbÖââ •*J•*T¯©¦è:¦éù6TÀ¿\´r ø :¥‡X íØC`%‡èè JD>ÏuT6ö¾ºšúÄü_ìhK£—žÕF »º‚kóÆùâ*ðØne›M»¹ 4˜{X›ß§±hBÍ è׃Íi/Þ~ZÒ;7zi s<ûžê> <´ ž»9/(P¡B… Û-ÆEõÎ2»Õ”sbÐDòDwšúûÍ»,ž ÜÈ^s0uðîÎW€%"•Ü| ‚EÏ„ø[˜6˜O†S‡äà›]W|2Pkš»»;é†L†²àãŸB¡¡˜]!àçáŸÿËüs>·ÙÒ’ñ?ðcã§'M í“€Äîݵ©6ÓS’³•¦ÇÙæóTÓK0ý B¬øNùyÿ1‹}+’;£¸_Íý¾¥Èù¹þë¤_ >€ïÇYŒ$Š «cCÃð½Qĉ$H‘Pª÷7g†P÷½ÞœmXœÎç<Œ FaªLAªû7ÁÐBeú=7ˆ^¯ÄåôT` `Æ Á<@@*\~ÜlÈ´%βµ¶ý«¢aºQøpÝu½»<Š ^UöWÆ©‡>†‡®‹ÀõÝÿ@Oå'C8ùKÁêí3Ëäó[ÀB·~Š/¼Å‚ÀÜ4ÆØ«ñ:|œ¯“kîb3`¶þ,‰­™câ¤@ÒpfðמðÓFð3dú®ßcøn™yqt^çU7’] ûñ®?qpþÔÐ+ âpþºª06ymK~›ÊYP•šoCz¡½Pð 8À0ó8‡$AÔ):Þ¯R¯'+}KÏ«ˆý÷'µ±·F-+Ë|\äysÏÙ-ÑY»¯«ò-GM;þ_ú®ÿc!ÍüYÕÇÛÄŸ¬ý"þÆŽç‡\òÞC¨·7õô«öè?x+ž„M2 6>­ëVrZSg SiƒFØ×äªîÐÖÂò¡B… (Q×Ù%>ŸÇÆÏ„®‹F—ºç”êõd‘÷vï«rŸNûà€»}¿@?ØU†xKÍ!þEqïÓþ¶â§Už¹µ}çÏ”sUM;)k­ÝICÿ0êÃÑ¥ë€y¥ítÓ)Z}ƒ6¼Ô[ Pz¬ùSOS3õØhó¼lo]B`É›¿d§ÂAI28¡ê>^'Ç\™X߯ÜN·Órµ®>Z PqÇŽì¿G¨ï¦)yÐßM‹$ú®žÌ=¹g©þç;N%ºë­–ó»:ç| hýíþ7Ùæá %mbŒ¼@â]Ÿ>PI‡NøC® ÍS­}ŽÞsá¿]Ák· ÷ÍȦ洮Â~Ìé¥YUóÚ7ê®{^›=Æ'W%Ÿ¾é±rÖ¹NR#2ÿ™ø–`ó¬8P–ö\ Ná¿~ÃέTû#ìøªÀ´—ágUİä㥭ïèÎX–·‡·8¾Ç« µ¹Ä`A¾ 0›(F‡t9Á–æÁ0Ø7~G1›ì+ìú%ôâëïK»42 (ȯÝÞÎÓ%^VoÛ[ßiËæ%ŸOà•¹¤Åb!rË»âE¾¼Ç¦óν¶¿,” älí~MÛÂu_ðËvŸzµð-‡†ºÃñ…™³5Mµ ïj®•?ª¶8ãÔöÒºˆïY¯7µD|Ôn‰Ñ¨­DC¤É÷ô€UA»¨„A ÁðøaÉ«Òh-Ñ‹âÂZS‡Xó®h•CaÒº‰žÐ@Ô[ùÀ: PåUø•†G ¼>Æ•ré…úÞbèÝIü¿>ÅLß[ô¦×÷jÌ~ØgÿÏ©ƒëVM3—8ã÷}Þ\ÿA‚]üö%=»«ºDÈý=Ô+?çµ=|Zl¿îéWùÖ”ýðb¿ªû…PU˜‡.l#ƒ€ E3+¯ý¼c5¿³m`×Q¾”\ÊÝ=ÏzœjC¥¶õÛ~1Ê#o¤ÿF‹wIL°jÊÁöÔ廨3Lù?„¯ xxþY’kŒôQËÌC2<Ű¥iéÝ@ªÖAÀË0Sml"D‰?„St¼ŽR.ÖÔ_{ÇœcÕ|ß¿AÃ#¥o}u~ô WäÂ=&0‡rÒâ&É„(CL‡‹¼Àþ‚€=äRôqù<ûü§¼7N.ólͶ·¢éÄV9qEþÉ![ÎÓGçu[Ô29üÚ%ödoZޡ⩺T쵦´rnóv‰×ˆRªU¸â#Wíñ<—©|Ëogoˆ½O#_ñÙ[uts 8ü„÷æCŽIr¡”뤟äÖæ—_ÇÄä0+zVNx!7 ’¡`Ðp2´ët¿oÍ °w4nU¤¡6xŠ|ïuoC±b÷öÞÉDý-Kj~D7«±s‹¨SËÌ>9,íGÜÖîDö"Ù{’Ëäk¾ŠA5y–ô½˜Àër©.gëëfšàË 9înÃT$Xb… (P¡F™×îZ×c˜ec¾>° žþôMl»ŒiU@•û°&ƒ¤ƒxVG@êçЃ£ýp 3\äâ©L¤ß½ WŒ<…¼Rår32’Ņsƒ’|^0΃Õ2::Üó"÷¿‡¡´uþfÆ¿ñº.›qHîÝÏj*÷`±ÑŠ—#oÚ—ýÖç5Ün©Ì™K›ó<–ÑmlaË?Xk¼>C;’é=íÏ[•òpø9¡çÕ·sê} qç4ßós÷@~ öÝ—?_ž*àQGQ M¡Ìp,Õr”UÀAºèv¾EÎLˆ_^Ç×mî¿=ä»[´V†ÞŒ×ü†ˆ0ˆ‰÷ ê¶k¿Œ©\©½^­ã¤Ð…VÝ.¯­kC!¢&ëuîG’ ŠYmZúo†;é¦*Ũ^~Ôz7•Å’rnËÕ‹ †¼sçÖ—Ò$H‘#fYêÕÝÒéïV²3Œ~²¯¾éO‘üå*7ß%$ lÁ&oNÆ| ¯}" ÿK¹Ö®ÞïWýiè$xº~ü)¶½ÛñòUùá¯åB›þãPÐQDIÁtþ| žƒ­¶¿oÝ;‡ÝÔ7¯m·¯î4­ç¯¾«Ãóx° žo'àG½ø]¨Aö}ÿS$ÍNOÔÃt¤ƒ#q-Dœmk!LÓ÷¥äÂÜ€öFÑ¡q—ÁÁãIÛz1=äëØ™ó3C8ÓV]¸þy›9_ _¨ñdw)†prËtúŠÕ¼ˆ½úµv£×OÌ|ßl5K©ŸžÊ*áMϳd‘º’†ï8ÿTe®ÒqCKÞ>Aë‹£:ò5ƒIž+Ô‘«XBþO¯5¼j6ŸÆZ{eà{ 0Ã( $€GG‚(Qõ€5€I†ºŸËz„^sóx)‚ûùþK+XR…X=úM²¿{©¯Kž~¸xÃ=· Ê´B8ˆ«'8íu‰‡Í´dª1Z·Ë€Iéxàñ„=˰¿ù ú ˆ(ð8ÄC^&fq@îzIÚ-ª‹žÑqÊ–—öÓÃ1•S!eûao#ìc~R~="D‰6vý¤é´·%oMNþ …[cíÌ5‰•dˆ5÷ÍsìüQ'À)·I'ðw ƒ qàþ€6†@Zƒ oCèM¾¨Ó§—ݧÙ$]ñÕÜ‹ð{^l +“¸óE2ö[®ØËxؾm÷âS·;möAPåÌeÉÍýkÄÿŠ„ë´›­A»þGO¾ÏÕÛä*k@Ó™ÀÙaGzêÿvUJl‘îéN.D!.¬@櫽¢uDz^7×û¡ò“ÆrÊ¿ó¤YôÈOoa cD(Žil%P€U… Ih?†ð.dlbek¸R'Ò_Ö™†o‹ßµåŠ…pu^¦ŸõgÜkLîú Z„Z·üU«Ž Ÿv:ü"¤<Æ&Ú¸˜àì8ORÌ`WÙ"î íHþÊw°ˆÌ^—^þýwå/—¤ÛõÄîIgdóáKÑC4³@¾bÁåEÝšù—¯Ô~ªPGÛ²$H‘#íœv’ø( Ü´åÝUÒÔ¬lH>Ì‚3«ö=pÇÏø@z`žtøj@ØA. L)X"'ÖÆ3õöP#¹.¼| ²¹ýÃÌ/SáÿBS…mÇÞ?òÐi=ƒ oà/Gpf„€¯û.>’Óáˆåʾ²¡•­òtšÝ—ý\½ >uv´~ã*ªÝùKÉÜ ñCn&0ÚòOó|K{‡nsCîÕÃÂPÌÅ×ò“«C ¯œÙlÑg3Ç$eÙFÏlõƃ(F†ü~bŒàš ˜ Ôð, øÜø4”ówëIÊÙOÂ/°â[¹z.mEšÝ7pód“QˆËæ\Djrñð×ù¾ª\ íµ“œº9jd‹& gä†Õ×v÷®UIoԫʺ,tÈ›8nÀÊŒõ v}XyøÝNÁxìW(+é ˆõbâ+ùg»ÍV`Š €ü V½Iæ2—±Ö·/AƳú¾=æÒÍmÛ¸5¦®¸¤xzç›vœÕ¿½?ÎKóRð„…ñh`˜ ÀkÀœ °]°[œ  tpóô=ÖTq œíö¿o´dú} ÇŶ¹Ò¹Æÿ¨ã®é5°4ös!.¥ÓÚ#Žyr‹š˜»ã&Þç|êoòâxÒ r ÷j<Õ$º\ZÂxتcŽÕç «n;6MËUÜõ‡·º6_A¬u5•ñíé²¼¾±©ì0¹¬BB3ÂAÁœA––––––––––”‘`VhpLÅn÷oc›Õi·[Ì·Ä·N^Y .$B81 C±°Ðáø¿…å¾ç9kX«áuŽ÷mžÿ¿Kñþâø×Ç«:–Ðô¦ŽK¹.Îòëíš‘{ XmöwÕón_4Ú¬üós+¶….«W­솷ҼeÙ†j¡·ÚßÁ¸Ï]YÞø[~M325ÌRéPÅGêdÆæ·4<iÏ ”éíÅõ0R’˜s޶\[’½m+GJ€1G†ø'Ã|¤?ÚHh£zûmêÍQöc…N¾óÞ:œv³3•þ©å¥ý£tžjÉ(Ñq]ýš?¥×`R>–®yWJÃdktnÖ=ÿÞÅã΂] üev{Ä<ŠvžbÐúJй.ý+XºX Ó›é$H‘w0åÇ^5$,Yq¬ì"bPºªˆNüßÉ…BèvãÂÈ$Aв/K)“ç0tnX÷|Õîu„ w„!Á÷P1†ªÎð2hîýÙ^n_©˜éøfï4Z:F?«Yô´„0™zmìç¿.¾×-.£ÁùKoá•'Ö÷ýZ®i:Œ¼è\ÈC°Ž%ßíJÝ4éÀ®žÂ…Ð=ïsÀ¼(¸Ã IìÔÆ~‘ív=Éœ/K/£ ~!W„—ÏéB{«=²áàП ðõ Üw•plÍC>¶Nc¶Ñªcã€T.¦³ÙëþFü©È Céç)ÆÐ #øvÕÒÇeïë ;àB"éiGŽ(æ  ”k ¢×ÝMžóæ—Ù­—û1PürÌlt01×&AZÂ8 Ívý]x2".} RÙGZØìÄíòaͯêYUìÕâ3£}`àÔ‡s>I’Ê wDÙ& ÓÍ®|eãA¸ÒM ÂÃáïy»ÿ}ÞX@ˆ0Û÷qS#÷ «Ì’±òß÷[óŒ½\M–›°r ŽCÍé <§hY Zí}àcɪa´pó®Ø0_Œã©aôk¾x<­” ’øwµg‘zä¡~oï—6^“ÎëÄkNÛêyYÓa´cJppqäÔ°‹&lï¾¶ôøJÿ75“ÐxóÅ{o¨‰ùÝNê+é`…‚øl†ø* . L)~±Ä}uìô®põÚÚQ5‘œ T$–ÞÒCð;sƘÂüŒV±ôú+D0Üp>ÓÝ.iá:úd³7…Â|*8ð`ñ€6‡ Á„/çןè+á«TíÉ˃¨Ì»˜ÈÃ>ªC‰Ÿ{³ÝÉ2ɉªD0Õâ¶lJùcùŸÕjA‚µ“„Óõ¤jIîÆpqöj®wÐ ]Bñÿ½ó°ö@¶ÇÚŸób%+½ÖŠy÷C×ú;F~÷O.ÇDºÞN—Éu龫œê!}ÔÁfXÂXÂ$Ä,€@È4(ÐÔ Û­07æ{ù×ß;ˆ8Z6Âê™H¡ˆáÍü`hÀ[ã¯Y(H=×&옋e(`Jfi©¡í˜Û}.ŠB<ˆN ãÀÀó¾O Àj8 `ñŒãR[«‚aíLFnÆùs¡£ê“emkuzº¾¯AbNzfÇ}K;»ö…-è-ûddCIsßø–Ú» ¬2h¯6ðcŽ<k0nI1ö9˜pXÿªÎ7Ÿ´?;Q¹Å¯2+S…³ûEŸ´ [f&ü »0®¯r0Ð߈š3ï=Uîo^1ÿì8–ô`˜eq¯SÜÈz=k"뺟ŽêZ ÿETfE]B“Å‚¿®ÏÖ‘±èþ‹˜|€,-}>/Q¬Ùÿ3Z•[oÊèPÏA>!Ádî¡£ÛÊÝ{ÎòlѪí«ßɪ½Ž8æu°`lúãÌ<Òú>³¨öþçç³õŽù}ÓX&¿Ãž£ƒò]`ÏuFG~`D’£m”)äÅEãO—Œ'€^BŸ5ÆÉ6F ­Ó¡D›Y5ºÍÚò•?+5‡ïD!ûŒ„3†oÏý°†Ið‹;£®òÑåã£*<…mÚµo9„Õ+¿â¦îùl¡…à&¥Ô6ì˜ô·ô³¨ ðCŽ?×e™þ©ñà’ õ7‰?Ç!{~ÍÑÌm‰wSøIFÿ4;@nàÊ“bÚAÖ¹ùFy{äôK€ú&ëx\ªsƸÂÅ0ç Wæ”7  ÐCá÷ßv~¥ÓîgÔèîÒzâz¯•G5êhsû¿ÈÄÐg?cíìv‚ÐqììåU»{_ éÉÕØÞrc{’/^@&I®‚DÅ«|„ È ãúþHvo×룪[ò]"˧Ml¦˜"Æa†aŸL¡# 0 ½æö"0Ë }R:î¤x*D<%Ï¥2?'Õl­½ ‡°B .€‚Á4CÕ„Pä*!`pÿ—–îÿ»úäåãñaç!ç¿ B¥é{µ[ê¡þð~oAþ~%Ù÷˜p~#zƒQ `÷Ü ÜéaÀ@‚‘mÿóãžQL6ˆ §­nÇfwÝNœCëeŸÙà“G/“§0 äTdœ…O¥§„z¹q9Ey oâäö{íRÌ«ëv{.˲ì=ï{ßéfUT/ƒÝ¿Äþ¯•ðú~›ÔÔ«=ÆÕP4¯gxݱߗ:6ÓôÂ&`ƒÀàç_.'nˤ„ ,1è|g Ã\ F¿Ñ+ ³¹Øõï_ÙjÏOøƒ ¹´pm$`Á ,¸TäA¯š=a¤ƒzÍUjÊ ÜÔÜü¦wXXâÔ®Fr¨€@ëì¦ÏÍ·õ^ªeºýۚ؀BF¬ò·2þøæ’WüFbÛžã+nsœ,Ž^ÖW'Ü6˜ýòá¶2üRŠ]+M‰<Öy’+Ô# 0ʸ¿—ÜünŸÒ~Ÿ…ê;I$’HÓøµVª«ë¾¯«Ãú/‹Öy[ ¶8ý ÉŽßâ#ôó¥ÏïÃñOWy›çh£ÃÁ†QCE"YùßßΆ` aH @ná!>69©ÀÃmì_Ú}õ¬ºçg¹U§.uÆVô©Ð /‡<É>< ΕC®ñ´{OÁ÷þÏ ¿kð–â‡ñìÁ€õÊŒˆZfÀ}šÉBŒéévÈèÀÈ06ðpã[ ±mÞèT}8ÊçêºR-묖a ÛMªª³ðh¸Ö°øŸvNha>•b#½?Wj•‰”$&Æ÷õä.M€Ka†gèr0éæðå (P¡BÞRâá†`ýŠ“¾žÚñ+ó-.e#ŽÑ¶ú•«~1¤6c¶ß漃„½a™¸ÃíD'Yé9IˆR(ÇmJ³Aç@TT­­Ä`*øÂÏ(††0Þ‡#£9>~M*GẾžFˆóõÎ:ø¢Ž*©aÃ8a)ŒX5÷ˆx4_T¹ž{á@ Q±Ö5³¨I¿S‡@`G£¨ Ï]¹yO–ïKµUén‘:jJj¼Ç^%Xß6¡ ]WÐIïêµÇôuRoæf&TYáéWãà‚1€iXSü^Z¥4·J±åĶßöNúîg9%àu‰è€¬„áò¸˜¾i€,'Ïð‚”z Ð À?AÝ€Þíý:¼T_™êéîWûèãØ ¨b@ ÇÐ`|-UG ÂË8p¸æ+ô=!‡èÃòêeÔ6Ít¦‹€ †ÜQíà Ré ?>ЈG ÒÆÑ¤ ‡HÆ;ÂU"·—] ž~éÈEb\v¹Aòaý*h~«/Ôæ‹(Uÿשæg¿w˜þl†nóÃBtþŸ)8é¾¼ÄGRFô¨H-¹ïñgw~…Sx¾¥æ­>þ‡ÎÕùø°vF™óŠñêåhMØMÈ>ðNàb:‚hr‚L4÷NíÐw'%îé“»›gr0/á @a ÁÊÏã 1€2F ,TN¯4Ò,°-Ù=3ÆMÐ}Ïdøt}·‚ûÁ}WòFžAÁÞ7±ù{稩ٴñ¹ •*ו̞, ö}«Þ[³;±³;³ ³©R¥J•*T©Tm c´H(ÞK1¾D”sn¾w}×cBþI¥Û&Á%tÁQx_¼CÁõÈ%%A…Pðã’ô*—ãô1t°igç:Öo ÛÀøý‡ˆÀìî@>]|2ƒˆÀž0z]ü §ƒ‡fâyWØH&Z¾Ä,ÞîýĤ=¹DfœŸ·_éÄ@{ýŸ4ÁÌåw² ÀÂU Æhþ×,dÿks›‹‰Eöœžº¬wµf—ÝâÁ«íæm1³e|8äÇÛÛiihäÛ}åõÖî “B¿r^Fá·tùF$ ¿,àY èqÁÂz/âÌ^š˜7mJ“‡ÛÖ(Ô-Õ£)°vÁ< ì` ëì‚Îù.‹‚pÉ»üßœR(¨ŠY Ü<ð§¤N_d¨ Ò0.\Ã×þÂ+v¢8Ó\P&§† Kâå¼l ¬yfm~¾Y`–Î2Ñ è™Òqºj$Á- ±…wMè†æ}Ä^S‹ï·¾\ã\‚Œ“É®¨9MÚ³J¼O˜™2dÉ’i¯ó æ>¤˜¿¬ÿ›æµmÎ@²0ÏAˆ¼ª‡@+dAŒ &BqNY¡:£!¿¾±)w(óuøìþmË$}Rª[yG`ÆÂnˆ¤ÑjÁ]ãO‰ÃÁËu‰Û‡šúzP,;ÚÇÞ)Ùæ}î£Y=Ë¿¸ÐùÎ?3b‰+ö]èÞ76÷³ ]yо¦˜‘h;Œî8Ææ¤€/ìGÁ}-í³Ñ´`Ù‘«œ¨£„{„aA½€¼Ð< ðß=`œ°®² yíIƒSWy?*Hk àÚCfŸ1ú À0MN,ÚRÚç¤þÄ€qnøF¤CCÇÅIòáò"¦~±G–MØRUÝÔËÏ™7×SœšÕ‰Â?AÝsº–eT7îm®Ó‚:w:ÛÓfóÝußõú˜ÒÐߥøS¸øó###############.ïù¶½f¼ã’±‘]ùƒÕ¦  Þô(BÍ'+Úó÷δT˜ãñg]Iû2m_ûÚ}˜º=c`ÀÑiÉ€2Œ-ÇI ¼?ÊkòÑäZ{?¯GŠ…È=ƒæøV=Ì=4À`mo<#, àvé’æH5¨À(á…€4¥}ÁtuÇpÀ)%…z¸âço,«ôB wÚ™îΑ^ëô]¿B+¬nà…øéóÖÚT«7ˆ44·¯ºkÇO{æ”Û>¯¯¶OJ 0éÍ'ÐÍ%J•*T©R¥d¹ã7›¦¢ ¼8…w-K^)P_„n8\bd’ z=" A…ìs[…§ûÃH½2R äï–ÐevzÜ_Š8þéJ €Û’€^›Jöô™¿“M™™™™ 9(33Ö ÌÁ›á7øýθ¾2fnÓÎñ¸ýß…ãvüFÌ‚à}®³ïÿÙ}b`&DÜèU Ø5h>‚ZozOÄQ‡~Œ ­z»ŽÖ›¸Ë=cj_éW ¬8P0>óÈk ¥êȆ¹YCÐ@Dº:‡éLHXç!œ€XñæbÁÝáå½ÿ}B~‘¸ü;=0±˜§ènMØ`jv“!ˆÄüóÝ5öþÛwÍ­ÏGá( €¼1GÃGŠ8+¤Ú0ˆÉ3ÀÏ—¥_c$Sâã·Ÿí>Cažôq‡Vfa¦<·•ò£S¬!CøþO:šjf ÌÁ™–ïæé[I˜póX²<Ü“f:ÿ´ ±Ðx.ÌÅh^h8ãìb©Ÿ±&”PâƒÁÚ<õÇ£´âÁå °©@š€ãŽ¶Æˆè^$›ËÖðrÉ(a{ÆQ›F” ^qPV>åÃJr€£†C˹"!€:&œÑŒ_.õ`–!%ˆY•HÄBO¹÷î­mÖfв¨ ºÉ?^ö«Þk©ºýÓø­†þn}Èhx7"@G ÷¹ïW½ïƒ™G×ñY¯P÷·ãõÝw]×Ué8žFsœç9Î몺nsƒÞ÷½ÎsƒßG[‹OyñßF,XÝB¥uXë¯{߀Uÿ¶ö¾û<Ÿ†I€bÉŸ‡æ‚#˜Ûa§ƒAàxfyEAPBíµÿ®V&ˆCÓZè„H7X;ÊoÜœµ-Ö„qQ’í}DùÛË2ÏñobÛé£kO'Åô¬p$ç`*½»ö2”òJyL×m½o™CŒ}b¥•s>ßz%¤GOæÆbçð!·Šë“iÒ“ñÌÔŠe§ ýÜ$s×ý·öçÕ—4R Ý!·S̵Ø>cår™+•=çÌ=ÝJ4Õ·¶ Ó4rC<=±¥žÎ~ãg§Ù)ú1¤ÆäÞVTJK2`v7ÉÏ:r> ®uuµV9¸ä D_Õ9çÖõÜIGWöë´M»Uü$£·ËAùõHIô-îs~®ß ;¾Ã/ÛPù[ö÷¾XYkNm;J¿#·ñ¬Ô2Úåu÷¿,Åht~Ëï*V±âìÉoIm„×ìžÂ·yç€üpLm¯ —Yœú\/å ²/±€¸‡½º°wXCÃMÝfçƒác–Ú¸^½=êAyápÏ;òú~ d¯5zªV’æýߨðŠÄÙzômÄS¢P^ðŽr¾èÑ=.€$ ÿ¨$ˆ¾ß¿×Ù™ e!M©pG½)4)f,úwã–¨½ÂÑ2s<ß+ï™AÀq† 0„$ò$€ã‘/ j"F„:¥Ç0ÙA—½óž[|ø»ìY¹ ¬ö§ûŸÑ­@¼ån÷…0Fc%TÅm¥Ò¬ ±Xuú$|CPʾ¿ýØçÐäð`•îÿ¢<í …P àÙXÚÚáãµ4€í%  Í ,bø(ˆf„4âø(ˆfŒ|çõý¿…í 9*?Ÿ÷ËAÔ˜ÑRó&äæKA$´/ÔfÁƒu8{h7crOM’¢YÜãÅ•ïyü@|£xm°¹ž‹“Œk#65?u[öñZodŒëcòne&í-CúÃÐÞl,4h†“‡ xC ´OŠ ±€PH”¶Œ‰:I¾^ÚðK+ñ¬]rÖ‘W8k%òÚð´œìêc¦ÿýS§•Îÿ~~~W•}àóÍΉÁƒh¨þoÔöŠüÐøINW¯}B‡­GèaQ%qFò•ì@”+2‘réWT¾« gÎJ®ÉìŸ7_1ÃÞH!È Rwá°µ9eM¾ð›ÖŽ¿‘›Å#¿€õ¥§‡8ÔC°ôšðÙrÞg‚ΓEu)ýNƒf’R2 ©‰J=dö«zåøª¹»L:âÚVïNiGsBªšuÑ”ß8‹–‘¬îí”÷^…bûŽ1yyƒP |ýOäG— Ýÿ¾³’¾8Æ?*˜2ðN~ÀàÆã½bf½É :OZ€Ø˜ÐwÀzÕï…h ð-N.ÏÙ' éJ`êDÛÒÜ>æ4s`& ‹õ§„À˜7Ž #StøÁÔä˜ ƒ"–ôÒ»ê»õåî(mKV_Ø7O ªÔ;žö¢‡áÈðV¿¿'y¼ŽÇÀ„3þs5üéêëQùpåšD-ý iúŽÙþå•Ì!¹‡wÕ4ƒË[!Eˆfÿô,Ur ð1²@ü‘ R`È©Îp;¥ë@Kðš'KÕ¿UB·{–t-°øŒ€–Lß4ô/§tIh²\ž»SLŠ™]¬·èòd9üŽ_A ßøþ¥ÿ)CyQ¼7[‰¨{hùÙ…Wžo–&ŠÇõã7¬¿ÜYq%}yLñh±½„‡ãÀ6yæ8ÞÊÂþ1ý-©x}ü‡IÉðøÝèqAæûÞÜã%ã/zwÜõ_µW_Ù‹muxUÈ(ý}%¬¸xM÷±“¶RXæiXj⌻×ëß‘ßù¥¯‹GRÈ5/i*f h¸7]yž™–,÷RË•âàÓ‚hP F C”£kbOÞ höÖ5ûªíŠõVbOÏêÓÖÃå' 6nÆùÛy·*þN–f*~[ ·0¾ñwt¡ô=_ ¢­Y`H4åý`y'Aèþh³õˆ OíeoáC±I1£A¸¦ë¼;öﯬT¦ÿç¦5í¾/#/ÃQ´%>¦ý>c“ùÓ) ÖM‹¯=á‚A°1uTåÞòü……ým+“ µ¼´?ôÂv¤¯–ÁVfÍs›Êôò>õл†S»‹$¿ÁùŠg1Ãõy­jºý7M¡xµñžÞ[[GámÊc™äþ=ë×V6ÍëÅsgFU•Ç¢Ña{àxÉw<¤Bkàhmç^·áÌAôpÜòZÕ®`ò£èeÜ5Iy£œˆ*U`Ü: xÛ,ÿ–Nôr_UøÉÃIm3Uù-b=SAÝzwœlDޝ­þ9¸Ò––Óï|ÃÈ´©*ƒ›Ê¬Ïx~­ÿ’ð,aÒ,$„/ öÂFkþµƒ’Ïù/…šô6†ˆ`võÜç4ê5W:×5žUÑÞŒ§J–#3“˜âöZ0P€ãÅY’ D`$8ä®F&L‰!Àb‚ 92ƒ-·¶E ˜ÖØs Óû¯°H8Gäx<£ü%w¹Œws–€1Ñ'é¾@ž.6Rëu{S/·QŠ?ø¥‹«ûü?î¼óDÌ ¤MúÑï\‰R‚Oѳó"’ÞhŽ,ª¡@NNû}ˆ×)pTľ½Hˆ¾°ÈÆ‚p%ââít7{¢¡Pï]ï­,~Ǥª¿âµ¨¨TW [ªüßyîºÙûD±÷ç‹¶p:“ga¼Ú©þ¦1¡KØœ;΄!ÿÛIí“ä5Dф /yÇ-·}ð>v(›ØmØ3_Ï1-6Vžj#4x>Õƒ²Ñ¢ ÃKÕ4þ®z2 Qñ«¯GyÎèôSä0ÕNç¶JFX¸ïléŽù…ÀWÀŽVÒ‘úO|ÔF'–óeêx à½}çQú%¶wã»ÆrKÀEàñŽßÄP€ õ|ݼNûÇúJT¨äf~AoþkmJöí@7ÛmËrÔÈ–ïÜ/Ä\Ò/ûÝ鿉ûŸÐ¯O‚½ÿéº|üSêG 9Ô.è9o¿ìdHég1 º_ÈÀ~Wÿ̧úÿÿûþ;?æîvx~+÷kNt‰ëãa‰¬¼ÇðœÂÓ>ˆßíLÇÞNþþ"33ÝûåÂ{ªC™ðè}Ñ{xä5;¿$aï s+}réSò쓹ÄT)Ö$Sö©Ü½eº=ØLq{qtqœÆ 3› àL™0’(?"ƒÊÁ×&á‚``(é°0^äs€€y“Ï>I0Þ˜àÏ€\àR–üÑĸÔ ¸†/àf±`”åðÍB›ÆTÔZ Ú»ø( Èû¿0滣à>Ÿ1`¦Ác@ñÝoÓ?^´›,+â®q>ÇWñ}ÍH¢ç[°äêpN••`ÉA—©wi -YÅÊ]=ñ8Èv6ZXm@Ú4† ÁÀ áÃà0áÉùyTÁFÈ( _¤²^ë9>"óÞ ½Tù¦ÞuD×Iôk¦Ù¶ ζ^û‹•vµLnÑâò ]-½J¦\$ÞA¤uìl_~`}&Î:ôñŽËnéûÞ„[½G÷õ—:‘;´¤H¢ŽÔƒ9ÙòpüN"]ÝCká­ýåå”(ÁYÁ(¤Bh¼R9w¨©÷å›”÷çª12 ®Û†Òñ_¨gà:5ôÌyRq3Øçƒt[t6ny“:ŸÉÙzƒd=½¨n5RüߟðÚºÕY_“ò©”†k^à-Ava¨=éþJÖͰ©+¢úB> ®ç(·Ñwmç寳Bv26704ËÞXÀ7eND ©wrµà@=Ô„w?‚ Ó~ •hx¥‚^ëb˜vuØIëÜ·Håp¸ªì¿O¼ùU«‚Øœ¥³PeqSâMáÁ³õ .ÏNÕM£æÝ˜Àò$p™’³ëX‹ie,é’ðò€À !ƒ¯÷ü½Ûª4d%](T$–ψۣõx}éø†2ÀSiÅJx%ͼt¥TÎ`žÛW–ÀîÌ·½\ŒâŽ©}ºßTå¶úwÔ^½Ê†ñóLYW#î·gùÂÐþz9÷fSüå[ØTí£¤N÷U 7kpx•\Ï^2xÚ­ù*w%çµ¼ €  6iˆ€•ƶµl7¦œÚ²¡»…âÕ³ö{PK5å tö †0Áâ›&n¤€ Æ EA§•ãì,sÚÐê°°ö‘uy\nD§Zߊ|„»¬ßݼ `ÑÛëc¹Åÿ™üî²[šìLv½ÎO&øø«ÕN‘ŸawZi¹3m#˜×Í>ß;xÿÛûÝ'¿lû¯¢#|‰7ÒÀžd›ßæpCCá³¼}:#Oûàmç«âO™ùYú_ß1‚Øè½Ÿ&¤ñ•¶¶ºsþøÏQç´l·V-HTW ¬7ØÈçiV¾.E=²ÝÙžö¼‹çŽóéÔ”Z¶ » ºš#4§"çµTD„Ãè cUÁ´®' ³Þæßóîèº-ívfMÊ<”ní&‚ñw¼ø˜q€=Ó¤µ}­e³”L?¿KÛY*j‚Ýž4RìÄ"ê³ÌŒ©o}×V˜NIÏjŸ®Î³ÉÌF “MÊ‘90S"¢Ì‰eã«èçE¾w bÓOªÍ9¹ûtó8ó2ÈGì¹î™*ºµÖóÍáÄ!Ʋ¤H¿ås4Ú¿_—„ÝåØºR²bp ¯s2²9ó•‹“]:¿Ïà 9Ã!« !L0CŽ87üÃ'5d.zü/îèòq!`Pœ)‹Âè}‘ yd}OߺúßdàV?7³ˆñà6Ø´ À\åƒ[¢N2)‹ŸN¤`°{¡®zÄ€À&»)Ï´ AúyŽkÕ¡;~¾Zî ´u¯VSí Ãœ `V.‰þ/^Á°óÀ‹#¦Ï=rše·&ê ð™†ØÝ}d_gÀ¼@Æ06ÃÀoÆ™Ž§:§ù’@08ÀÆ@0ƒª{ü7uË8+ô·A㡱٧Ŀ´ü~K‰uOµQ}±<ôRå‰í'vÜâáñc¥6ïÍck‹Â}ü<Ö$}Ó0‹êäÅ6}ÓÅ_0ß¿×ê¶H9'ç/¼Î)¢ÍÔ¾Ãq¨€;nf—m¤.¡w?åß'ã¢þO(:î¿hrÒ9K,Ÿ©ÎtO-v^‡Ç½¤iW*öäåÞ7˜¥*Òô“ú»H6¤Ý÷ÿÔUŸýì÷}c`Š„D}çÀ#}|ŸËÎ!@‘šŸr8@~y*@0+©Z$«’ ႾÄ7´ß©fûp t'ã¯ÝIÉ”t„$S`¥ƒ%Õà NºnÖ»m%>ÕëÈᇥqÑÇóÈ]/w¡³Ç¼c°„ç•’ãäÿÏ={yâe(lìoq"¦1ù¨‰ÈTTfmÒp‘¼÷²øe±Øúü×T?oµú_‰†`-9{ñwí‚aO'Ý2‡á@•øIé~Ï‹a°¦Ž£¿«ÛÝq°ÙÅýÈwËÑB:ha†Ãà0i3êPÁr‹÷¨[Êζ÷µOgÓXž&•Æßy×(íߥ›J¹oÍR¸–æ_™5Š É'%¯ZïkÕsƒ»ÿJ¿Y0BQJ÷þJ#_Ìmú7(·MW1s¿íMÛzÀY©«t`gí›}ÊN_z ¯®ô ä^c_|í%€^Ëßš"ÀTp±rE;ÓzÏ{sÕú¿eúWš‡ÖúsPåàêvÇÁ C‡WÔmÜ>J®’þ–@EË!›™Œ÷_¹ûuÀ[®l”b†;.Ýä[×—ò™Æ®_Ÿï¸¹ú½ª.§µ~Ýò¿«è 7Îhc{Ñuh‚ÙÂî÷jú 4ÅÓVÇo•±M8Õ½›³G¥5µÜÆ\Ué ?gêjæá©WÔ=æõeÞn0áù®*dåâ2¬m”}Y‰”vi45þ˜Íú]çoܼ?Í>—Àfž¯òŸ [æâu>*=Ÿ¦¡ÚåM±Ë¿±ÂÖWK½ùù()s7uoW†ÈS̼ε¸dïbKXûîqì;>òî¿ýºFö©VKõ}=/_c¿-~­ÛYò:±cýþ.0§Gß;ÌÎ¥k$Ò?©Dž¤WÛG‰º¹k¬üe¾Õ(*Æ…ç?âæ¹W¤´íÏÝIm\¹oC½mª{Iµaßð‹Ÿ3Þ4cáè&h6@g.nߺ?õ$álÄE|*/öh¿}Fu/i÷H“núþ[¿þoÙñÞ³Õw½Aýò¤( ¢DA¢ ­¤¢L ‘""Dd(Äb(’‰”HÕÿ+0I‚DH‰"$DˆÑ?ºeŒD˜"0–5i"$Dˆ‘%’ŒF"#´ˆ‘"DH‰–Q”b1‰(‘)b$¢DH‰"$Dˆ‘#(Äb?È`\ZDH‰“õ)ƒˆÌ%?áýý5&„ˆ‘üä(‘ƒˆÄJ$J"J!ûT¢DHআ#D˜SòÿÒÑ4"2#4×Ò`Ì”DHˆˆ‰"$DDDˆ‘”`Õ¤Jld ÄQA‰JaF„a!㿳áwï?øxf—“ÿû’û¿Óo½GøzþûÞø±åþ×ô*X&ÙBG„µ„nM û‡½º6(àök-OåšÌÐÉ´ó‘bÝÉü/ÐÕùè¾ vüþ·ýµ{F·×ýô?«…×ýCk[»ð‡¹aÞ(¢ ÂH‰ÿ±J"""$DDˆ‰UJ©U*•J©U*ª¥P À  iÞˆëeÿ${=(%{ñº††[F©›7e㪚T VÐp 2¥Tª•RªUUUUJ©U"!øiDˆ‘"DHŸáýºµ|ò¹jûŒ7±ˆXkûÇM™`®XM„£°—¬Ýrú‹»ðýÞoµ¶¦×yªí4¾vš£ZuB¹‘ÉQ»“cT…»¶ãÖš›oû¿µã;¸›-ÂX‚²Î¥~õ×âþÏÎÿß÷ɹô‡Ônú7¶4U4U4U4W§èïU9éi†~ týOù‡ÔŽs¨]ÐrÞ!H?»ÿB?å ‘ÿO=yúÇÄ‘ûÈ>™šþÌÃk ÌЀ¢þ협ÒÎbtû_…}Hág:…Ý/ûÿ®óò`GëÀ€#„}õú¤|Y÷Õ¦è9ôTÅ/õœåÝ’0“#ú~Wé}¤D{?Nôx¶øýö Õà,Ër¹a@/ŒBÂý7M™`®XM F!a.¯ü|‡ïoåS2•rš™¦1 ÓfX+–dQˆXJHÂWiëlýoôzû¾/Â,sþð’»éÌ}òÁ*žo¶LfƒmáÝŸŸ»åþ÷zQ—¾¸ç âïñ,¸8{ŽLVû§ÔŠâwzõ¨qËšÝ4©¿÷Å]]ï}TûÝM‚øúod€GTPœº®®ê=·¯Ã/Áx‚Ÿ¶@uz{áçìÿÅþ2$i,æ.ûVè9õý³òSÍ´µ(–ù²O' ÷]¸yÜ_†þ¡LÖ`ʫխ¡ `@#È€ˆ‡Ç€ƒûoTŠA“ôÛiT¼׆xR¼¿›GJÎŒª^g¸}íâåÚ­®¨Rì]ô »;»Ÿ8''¼»KìƒÔ¡ó_óö¥Ñ÷[ØôIŸ¼Fäy ³N¬¹Ÿ¹/#oú«%ÙcÞÕÅ{“¬K²òg%ÄCfý.«w[¾W÷Øúö¬ÿ'ñû{èr/Žz|UÃØö© U–Ôòób<8l#Y¸__!ì÷¿A7uilÏÂNø’¥‰§„N0_ÿ?ÑÐRX$Bt¦0 ñtòή±¯¹±ÀÇE#ºª,OFúUù™ŒÎ2à±þ ï·±_[,“e§¶Ò«ùf¸³T8,fŸ¬½ÜŠâ×n«à½+ô;;NWÝv‹6y• ¡Þ½´Ú‰ŠôºÇ2ÑJ¥/ÎãÞ1¢ú–‡0ø8À¢¶„j=ÅÞžû~ðRÅ7¡h Ø¿ºCÂgñï9JvÝ^m¹ä¡Fü•8f&Pœ•ÖV›_Åô¹mµ÷ÕŽ]Ïõæ›Ò­„ô¬w8Ô¥\ÏxeÊ Æ†ÀçØêx·|eïÚOö°Á.ß@”;¿ž«nw­2Fot–jvGß'1/ÏÛ|ä\Þ<ä«áªÓ/¡NûCk— ðýÒþ&Ú†¿"ÿƒ”[KâtÜi—F-Å0OÌWöø%°=q©²<"Îÿ5I4 òb\)®8Ý*´£ÖýwU,¿Ô‰—§æÐŒfa3sÒÚù÷VÜA6V\"ƒ¡?í¿`pjØËÕ6tP ‡XÉ’êmƒØW°¿ðÝ ‡?¾X'Vúå¡ LC†6z¡½aN7+‰jáôj‘©kà9ÁâPÊäþTdÈ©§-zÛs^ÿhˆaEš‡·÷kÚb`eƹa„9¶ùâ_»{Œ7Ð/S5Fá™&$u0߸çfÝÄM¥®K2;¿™ÂR¢ÃS«õÿŽèøé>¦6DE Ö š›×ÿ9‹»Q‡þ×–?‚gÛùS1;G“ÙôS ˈúóí&÷.ñmby„ÇgO^’jÆù"Z ñº\+ •þ—ë)ZÜ*cé¬^¿\rLýÒø=E¿)Z*”ÁïÙëLJ$&ž¡ð¼» ýúá¿b·@fÓzu×ñTV{¾ i.T‡&¬/06›{’=ÿ7÷ùÞÌDî;¡F5ƒ—áCñŽÒ÷˜ò”cL‹»jü1ӪƸÖ%›ßý8&щ½\O5uº6‰‡ö•,–)ë–®Šß`õëݺ°vãÞ–Ô{®•]ÛXÉú}Ò¥{ÙøÞÜC÷È6îî¿‹%êüK?—ïä½Àþ+&'joB‹Fr¬¼Î±âä|9æ>ÊUª±¿×s}óá´s8ÅàvY»T¢¨ž]ö×|ß™Œq~¼¯ÏãÙÅ@w=Û½fñZü~Œ'òjê"æ _“²P½¡ür?Q#þ¹T¿ÀO>ùVü-)7‡”?ÛôŸíÊ•HïöG>î_µùåª@F4¾ï[¸¨8Ãöò8P>~B †±ïJ AF&¼]Œ|ÔÅÞÍ,'MJﺸ”äü}àl•çÿÜq°Z÷LøÛÓÏCýò†Áh.Í|„ˆI-‘BйºÀ£‡žúÏÄÙ¿Œö9ÜÜm£0C¿›(0´Xv×¹ÞûŸ‘MÍŒJ µ×¯ûë”õ)p{eÐ4Èv‘jŸ«Ü¦;#$¯^ºo»sÜš[ ðxaJ'çÜóIewúÂj¼SålA£°r\&ѵ÷…ѪÏ3-N§€±ùD”,—Q7{-ß@‡ ~/ Õt¶µª¼UUê²lZÒÛäÈL{.»Ñ^³ÚÒØÕhÑPƒÕT"*!œÂÈ©Eªr8;göþÞð?b„ Qí¼#dݯµNŽip†씎Tß½Xƒ Å3¡üÄ=ò¶=ÑÖf*Ï4÷! 㻵ó>³ië?ÔePÍqê)’©j)_³û‰ï6ÁH‡NöŽ[`ÕìÒøñ¸É±TÙïiÈWŽâÁÑÀî´5SÍ|Ž¥eÄB…}²u0Ã.5L„û_^]û«ôþŸZy×vÎf§*~$ÿ x ‚†8ç¼T¿ÞåÄ2­ÿÚ·Ã1šŒ[¨i»7ÍÔÆÔ¤µÇ¿DkÓ_ùKùºÖÓž`Ñ*m ‚šÒÊÿœC´tzêoó0¤©#¨ÿ£Þ;ÁzO{ ¶¯‘™ÓÑ<´®&pZ·?˜Ý;éæð{zR‘OƒîýÛAÍî^çk³3JNž¾R "‰÷;(5g3I˜=šT88"H,N/ø) üÿµÎúãúå:û 2‹È€`~°À´,‘Eÿ£å·üoàÖ<ïáÿOsýƒêü¿©òÇîï> ƒ+E”Z`fsÊååØ2€á̓4 @p„;ð P ÆÃåíûE”k1 À4®|Î.ÜFDFz|Ci|T>òê äÁ€…(o†¯Ošj¼`¨Ø9Óx6E½V7 `bÏTšyéJž/R¬oÔž76é'¹±ìîßκ0ÜàíýÒD%·LÞ“w™Î̲tØ9 .îá}ê;Š=êÃ#htŸ×A Ñ\´¤‰¹á÷3÷¼xJ¶J««Çê¼{²øšʃ]ÿ§(ß ÍWǺ6ì8-Ḽö ^áI 9êeUçv³¶ósÉ\ƒ)c=d§¢ Og€(a…Oö²¯pÄð‘¬mo¯<’gúþ¶Ë&üÝu2ß±ÖïïœhŽvâÂîÏž]Ñ;\Í„˜Xr)·Ðv¶öCw¸S?¯ëÕA_Ç  Ñ’lœ©+NùFï/ Ì GIû_ hÓæ}JÏÞ»Êû–°ÆQõ1{í̵çîö –Û‘]¬ç÷W,šµÝ¬¹/Ë[wþÞôÌdؽ_;¹d‚"¦Þtêï/cÉ*«—[.uwYδ]7ãÃrØÍÄælÁËTËW¡Ã—÷Ú+:†]}ê+‘o“úãk÷ü’íòu✽vX{}%'«¤ê¾þÔH>Fñú¼¿?ß±s­nùñŠ/öljþïsÓæSœ¬plž“4]Òà‘²²y/éƒÁ÷ê³ááòÍ8‹&rl~mÕ¿q‰‡ýFÿ«å§—QÃĘ3§ê‰ÒÂ?d––k[ 5vó¬µ\µ?ÓO¹Œô¼1:˳gKå™Î6!$ÃW¥²³— °}¾rw³àãdýHûÕ-w§n°UÉänÊìcêû…»#ÀEY-d%Ú÷ª–¦ì(bÞùðÿÏ Å~9³¹c‹J?„Ži°KB=ùíј†sÝSš×H±ènt©¹ñ¹ ÇãƒÏêIï»û–h%©¦ÁÌÓÓø>20GÁ‚Â]Ú¨¤eÀ;M„¨ ×;¤ªHCÚPŽ4ââ‘ðÅ4suÞT÷' <žMz¾ Cœñ~‚âvJiþ¯ãPÈ~IÐⵈXh¿Þꦩ–ÏI®§œ˜¥ìþÖgj¬¢|K³ªšW¯²g®˜ï “¨ h®H錢™ñ’3tÍÆÕ¿Ot–þäAØÆƒÀ_ع°¨s‡Îg?îYOäô¦<ï_~F Sá&ýý»÷;xa¶sk+"ÿïÓÆg-\` ¤Et…dk;ª¥ÖÆŒžûÊÔ©Í6¼÷Wùì/å~ø|;Æ•³ÿ Êæ”X…rÙ¢iЬõ«sœ¸ôð’^ˆ» ó—,Þdg:ý’¥ú0ý_Où×#)yÙ©µÊ–|¨ö–þu÷õ·«‹ÜmGÀ·u=ò‘5Ê•{ ßóÏ˳OgÒ©Ü!…Û¡ŸåB.Ê«õÌØW¿É¾òmWÞ#­oî"¥ øé:ŸÍ'œ×XX ]K™*ÃîVÚz‚òš5£ÕïdM’ûyð8ßb}tŽбþãépãOñür¦þÈnˆ~»´5„t°̤8ìÒPEªÍ¿~ns"ªýý?žF<}õŒ7Ñ;ºñ—ˆTå÷^XFs-Kœâ#ƒºï w{ÏUýÚ#«i¾óizIåÿH݈T]©|ŸnQç 1—ÎW…RaÁSÙD‰Z¨¡0¸r£á—Xà3è5Hë$Yð#™%}1îfü7ö zÞB:ׂ9+}=¡óMcþq—ÖÏ‹>÷@­\/=Íìï£./#;õCO¶ ;ŽÑ9°G]‰ï­¤÷ºg}¦æ_»|¯nâ!•Á9ÊÝ9»±²Î“àp÷EªéRW_ASsËšxo”zzJß_¯ŠEÚõæç¹Ù±¢ZÈ4íïß²%<ñKÞ2ùt¿GÖíø7oˆý·1.œ2•5æ±°¢;VOàÏô_ý›ã¯ÅA5<fÔ6Á¢™èjkë£êî5w5|3 • W_„ïsÞû<¢ÇŒ1KÜ ¶—Çí9j$wÂ=i‰?c©E‰‚å6RZ ™]V¹%ÁU‘çIÝ’‰ É+÷O ¹¸°šô¾Ï}ÐÁMkcлÏ+7i/®9/d)ëîU L²ânãpŒÁ§N¿ö´ªº‹1üƒÉÚ È«§Jnë Ìiú÷Tº‡éÓaÊ+ç¼wìnÓV ·Q$ú*z²FøßõóW»G“/ÁúC<ù†ØnÂ9äõÛ˜äV×ô5¾kÐ&ÿ›q_|¤9ßèÇÚåí}ÙOºy™ü4?½\éú±›l£ûÞÓÚU ê›õ¨vl;ÈIÐEÁðüû*D¶‡èI,çºHðÀ̘À0 áñ …‹D–¾‡FÙ­¾÷ÞëïO9/‡ÕÙoGYJž+â׬=açÅÊ»0·Ý[…|86ÃuÝWÚµïg€A6î÷aÚyØï×õÀ>ç^ÝÍ}¼«¼ 6|í{`:{Fûi/wµu›5f<Ƴ6Öo>§ÛéßCiîû¾}}Îú4ÅI{Öº€À©£U”:4r›XFw“»z>¾Ž†¨8 1SÐ|» èCe§Fí>(ôUºøúÀÐÚ¼³o¾Q¹Ží^^;ݾl}Ïgsk5QUé·kŸ;»6[W"û}.ðszÀùZ9óÎOZÒ³l¯vt"·‹%ÖÏ<ðä¡{“ŠÝtÚÕï×±›VSX9îÜ×·žoãéoFúÓ×A¯WŽ/é'2›‡5ÙSµèkž¨Ž3ëÞ¾wÕWzôú¡{_C½½÷Ýß=¾}€w€ú¨vŽ—}æ=ÇׯŽêÏkÎÆùÎ=UàEš%eæ§mám@ç›ÈU÷É:\£jzI®Æ$ªºå*áAuªh P=¼ãõî_o¹Ô€= ô+”H¶ hrdß`zG  ªTPV´öÇlØmº×BP@ 5ï¬x 0£Ðƒdi³•´co®’]¶Z4ZÆ…­dA=et)"÷À°|||š4dL€ÓWØÓ¹€&‚­!@ JªV…40 ô…@ €®¨õŸ`w°  ¡U%P  ÖúnÜÚƒ@ÈÐÁP%ÛØ(ß|çß@Ñ*Ê ¶FØv3™Ÿajù¾îv•UR Nú\óTÒCÊŸcë¾sƒÛ£ÃÒ…îçhêÀ>mvÀ®ÙöÕWº}f¯½Ëà ×sk k_a{ÛWMåÁÞ·L¾†€Gaˆ¶dµR²ë.ÙŸSîÅô>õdm|ûæóÕ2nÀ„ Й11‰€2Õ M37¦I餙è›I¢g ji„™€“i¦˜§¦Ô˜˜A?Rm#Ôò€Ó@5DhLM&hšž¤ÃDÒmOIâšz›I¦€=F€=G¤z¦@¨Ðz€=M4hJm(ˆ D&˜&˜LšMHÚdOM"i²j1’i¦&š†„dzƒF‡¤4Ð €ÐÓC@4Ó@ “Õ)$&“F¦SÂL©ìSÕ?Ñ2M=<š§„6 z§¤l§“LÔS èFL€Ä`aɈbLÄbi¦€LI i£C@˜˜L#h“„d=bLÓ&˜†ši‘©ª¥OÑ“Ê`Dòe=5<†SÕ? ›Á¨LÊzQ¼Ò~ª1OjLƒôS#Ê< TI Ð1Â`€ )à¦L5=O*{MM1’Ÿ’dÂŒdÐõ4`e4iêhz&€Ðz€Ó@õ4:ÿý?¹ûb?È?¹2­J¶*!ik¶æ»iÒÎÔYQ5nµÊä=õè’Ö*% Ê¤¦ TйĴQôI~´‘LI«$ëRBÔ-‚Ø oº[åÚ¶¢Ù¶Þ½†”ÛF‘M²¬Ñ[³T´PBSŠ¡¤È¥í5ûïÑþEð\!!ûÊ«¿zþÿóëS¼A ÐC2H Ï>"Ù(¥R¬z•i5ûÄ»ˆ̲Ž^‘õmx[«ûseiöfjfÉg×[QlZ1¶5«ôÍ5íÚÞ§Sk›Z+zÂŵ‹â×ÃÝ_Žb[õxá ’¬ @ <Ô[òKáÿWR°þ_€ÊŽ?ƒÁ¬ßùàq§‡†{È©þ*¿KåùQDËâcEžGÌ¡öÀÀ&¦‚õrý¨`±òûÖ= ö4"å“6'=òWDšø¨a%kï2ä…VI.ÙqÒXÖK<h>|ŸÛ¿™@œÎCéìúÙ½†m¿R!;|¯NÖžûjàkqg>>w·W‡©yy¨–á9dQêÚž›Rn®å3¿_ÅÀƤÂ=ˆ9Gd "î‰Ú›a…©Î —µìŒ§K;èâÁxÍë.ý0qIòS•5C\¢º+ŒTÆjƒ„ ¨¹Ä-l¥ÆM" à.0Fð5OÛÃ$šâÚ=ž¥ÂAÓñè Ç("á àŠ7¢<(ì¤åN^¼[΢yªG*’}QH2;¢¥â©öÞ?†Ë•–DjtQcRËÆÆQ8fØ6Á«‘89{X!‡ëò¶P´nEÅe/ïL¶ËQ?UŒžÛ{»»Þî¦kÆ©C–­»×õ¡vþÄ.S>¬ønM5O°Éuy%ÖíYrU%Ír9-›xeYwTž÷ÖÔjï® ôˉæLqARù¹lËDÚUݼ½©Z§.ÏCžÍºÌ½!_¿‹·ÖHÈçFPeR^ ‘šX,ΙÿDÒ2 „#ÇTÈ1‡lð'™'‹—g”µeUËåv­pŸg“j©J¤5ëj«¥·½÷É´q!¯U(‚>†‘YT¢KÔ„!!÷Q5¾®ÔõþÜÙÔÖ¢ÍòLi.í÷¡}ZKöXüåÓ[©ŠM4ôå©Î ꄱ9*™•UW5ïᦧÐÚ÷yP°…•ÌêV‰çór<ú2ÞpøÃô¸íœïÚW’®¾Àê¤CÍ÷ ’˸%á§4v'l9rÔˆž:>Ƀ"¤„ÒÝ[·XÉ‹ã›Y2­K–h^Â7¤C)Í£ëÜg–ÊÄåÎ ±óù¿Czö]rÅ%½Ô„3¨W–8•/ OŽófMP2ìÌù”–†(¯NwÂEã]’S}ë×m¸Ñ–iU«{8µÁÌD–+K—Ÿ<¥ûö¼6:0Ù©abæN:ŒóU{ÖêP™H³­Ú%Ðù¶â_¶º_CRU4§B†}©‹H²F‰Öɪž©*’)Z,iá\íª¹+Ýè×-K¸.-qŠÕèg+œ½é$¯<0UK©‹2]…¯¸,#; Ñ™Ú1[ÙÂÙV›¶d®¼U¥níÓ5•#¯Æ×sv\4EbIDÝ‹ZnI.´ê˜¶:(¸ÕK]·pËÖŸM:'\W9 ælõÚZ9–[Ï@è©Yyµ]/F–«ÒqYT人t`Œß=ÎÐý„{z«ÏÌ,>>ž+Ïp¨¿?+å?_%&Ã'í¸HŽüx,/M-† ­Å2Hµ«p´¥ n9àq=”Éô› FŠ5é‹Wcö%ŒÎ´W3Ý’[÷¥|òÄ\á­€®êQ€ƒõ”®rôí[ž9·çéá¾ßµÀÁèôsÚ(t“Ï„ÆøBŒÒÿGøO%9ìLj˜.W„šõsæ˜Ï>å¯Ï™ ù"ÁQ7³Ùø73ù†~>Î$¸äá§ö|#­>ÍïÓä°…_yêjhÀíßË·_êG‘ðõò7©ø ×<>¯•úq½ÃdÇM…绿e7U¸ííM6Pç#Ø©æ*sËÐÕ>2¨pPý©E©ÒâÌCDšsQt&Y«Ô²«.29fŒ0\.%é_!Ò¹¡Ïmg`Èñ–,6<ÌmVû²9r³´?^滎ä¯ÂS&WâWæf– í ö“~ÚHèinK4LÙêºÖ\CCBÙJV݇¼ÔQöHýùg»5“Lé§eu.Ò©“mo$õÇ&Ö®ÃñÉcŸrÅuÖ‹r¸}LTQ‡cÌ‹´ Íùp+¹Ìž°%~¨´lõø¦#Þü“îgHocâò™—Š÷,ì>ìêμõáйC)&ó¢¶hÆâ™/àudJjs´íBZ$²XÔýÿÁ>„)¬u¸™ìSrg¹Î¶fÍ13æ\êâÑ[jôÓÀ¿,¥2¾iX­jë­‹<”׭цõŽIcTÌ·ÖëžÖ\–õT.þ—Í^xÞiÊÝØ=†:ïX««ˆy›« iééñÄÙz“‚îó33]ÝÝæD< —wwWƒ333-®ï àsw1óc*«0š©ÌeÞ£*3(ÌØ§ppeØÁ‚´]ÎeM»ÓÈ4ÔaâÍÝTpÛÓœŒˆÌx‰‘Wܹœ¬‡zqS9nïx&²ë ÜN<åäæ6VL j‚I‡Ë²*†~Ñ»%›*๳ôÄʈlk°EØ·ÌÚ¹¥Ü#„àvQÎñ°(ª= ¢xV;{›ïãv±ªeeçCh¨v:^åZ~œÔâ½Ci>ùÿ  Öðõ¹º]ÌYR„`¤‚¤‰^@Lød=©×ñÐ1çæKî϶™dÓôÿ)r椾È÷M^L%é.í;æ€Ô]^˯ëÁdÓ5{ÞVi¹²!>Ó®mI{–’Þ)ŽHÃìêå0½lÝ\Øoꊡ×a•P2b¿´ÌÍCñʃÃP;›86èû“e¨ß†ÛV6¢‚D<šñ6]lfñ¶÷ßűÈþI>þ™œíÉÌ1ö×ZÇØ®ßš:Ó*žO˜À²>IèÝâÞlé¹WŸ©¤5¢ƒÙ»€(¼nì`E;ØâéwâªëëÏšF,ï#Ç$qY276ª²y—_!™ßƒ ÷mi9û6Û·%Ì[PŸ†ýC»n,Y»îÝ~ Ï'}j¯ÚÑw<’J2ñóÕæþ¹o0áíãÞ~η}W‡’£ç„LÇH—FDZïç*Tð‰éÁ²xíO"Ö´€Õ©— j}"@¥·r¬²—ÈûhצÝ÷0®=—p𠆮Rïæ •ÙV.Dyá rwÊXbù6$cµviÅ‘ÝÜï÷²ÀG’ÀGð?=–[h$Q‘a©–ÈHm”šb^ÅÛ»S—½Ñ°âŒ©µÕ†­Tµ«dÔ”O:ÛÅ«ÓU^Íí”™˜h“…‘FPâIÎ5Ö¬ãZyãzã“HÍÖÉÂñ¡G‚kV¼×+¢„!u¢e×4¼¥Ûmâ]›Øñ ÆŽu!­i×avmÓh7F´ˆUV“&¹¥7¦Æj¯7l9á* vq…†Ôö€ÈÊŒ±bfÍE0Hœ$C¾ôu~¼þâ_ïÁˆù¡žN”5/¶Ï'‹¡ñlš]u¿äj»õå:³&oò3j$5Jn£N œa»íU9 á wͺS¬‹À#mY[ž÷Gjê5i¦¦)ãèÞGnÇp=9ø¡‚ Ñ›¦Ž:p±»¸‰öj«Â³×ÊP{ôıcTw_ñ׈ªÁ —ÙçH˜¤Èä35‡)’ ÇSÙædµíÌå\Ï>Gƒê¾ÅsߦsíÕ^NúÒrˆõ*Ø‘@¬aU$D ?¨Å§3ÖqÝ©»üöŸ+Üu'§ä 'ID@怗†§Sn´µ$C¦VÔÞ7Ù\Ê÷6J1åžruÓ(îy “$üþ–U|e• ³´_X¶N[“¢…7®½éíÀ­`tçW4Œ³w$ Mëèø~Aw$í[¼¡åõJ* AîÉUÈ$„‚ÈÉ"¡ÅÓÃlZxz|k‰ƒŸµ¼ëõ ÄOUÈí‹ëÁ«-j]êZyOÏ^ð–­j*¨äUQMJ:}Y¬:ÌæIð¦¦þá7V{ßFêpÄ.yžó¸™»á^ËÊ*·Ï»N,M©˜È–¢RÈêé¥s+—m»«mÜ£yy]æªß÷ÛjßOá_?ÒÕÛï:$$ ÛŠ©‰Ú'pòû.ÞÙòokUQ*O‹\¶Ï¾=—»ßÞ¥FuwQƒiÝÈBAI—G‚¢nÛÑÒglm…70vhc<±05q8uÀñöæb >‡‡p²öÖË9Ì0eHÂrJèALª5TâÍŽ¨£>kgP¤T.ܘ5›ðoi#Ä&°NfÈ›‡V¼²ÕŽÜ’KSAVÍÖ*ì#~ÚqE„-Î+“„Íš>&ÒÄ]O®yÕ!Ú>œíž~UФÒD–g¬‘âÜIÙbú;&¤8 ˆv…å^Fî'‡áB,!Š‘^± þ$B‰pù|FR&êýé¨N„d#¾T×5crÉPOŒ,;Žo™ÉÁPö„½Âödò*k¨O5õLÇzL¢†E \šwžŸuã’ꆾE®tþã¸{ž&±­ÕRÑà€ðn:‘ n‰2(¹Ã¢%†³^k6ØîüªÝ°‡>+³›¶÷¶‡ •ÚpT\3ÅÞA­d% o ™:ðXÜáó¯ß©w¸Ÿ‚:àH®}=û%“ZRy–Æ‘$'ëÕ•Ô)Þ®72)U¥^äQAU1FÆ-)Fû^¸×*Ü9ÌÄãÞ ›Ö"j¿¶À¨n%gÛÞù>%1È™*->Uèu~Wþ~¡6àÈ×A*Ó¼px×p[vnpïxÕºx±å8;%!#ÝôÑi×°Åb<ç:ç C1ì+[‘!„I @‡N|eübL!ÀBÆô\ïqÜô‰|è9d”Èr2-%uú“O+޵™ xüúU7‡i[¤·GfÄPêAvø 4ágZŠ ’¥áèv©Eäëp–̆Dª*¡Rgâ‹ûÿ?e„òÈ9ñ‰Aïæº‚r´íB¤ºWrÅsxíÇŒ0³°ÚUÍWXc()ÉD»ÜA^[W_#Èn&à2òB…÷»üiòðÌè7úÞ}Ë™ÕGÒ’%I &ò{úýÕÅ=’Y£áæêìõh´4̃78êÍ ëë¤N-*‘®ÄÖH“ˆ¸µ{[î`˜DÓ± |`¼–Kë¿K ZDùUORšöpk˜™‚Ýþ©¯/ÊŽ–‚%ó‰=zÖŠ´< R¹-¸05æ.Ž·8yr0õoǞΤ‘ÝãßpœÞ˜9Y‘áBd5ôúd‘.‹wˆÂŠ- ˆvaÕ‰”´†зJÝr@¡Nx/x°o  ;J¼»?FbÒÅ¥!œ2Å4ÆËÉYp7uM§‹f¬À !¸mUÀ¹š\á­AºHŸ$ߦŕœýƒ{w¹*ˆ‘ »8»—­Êîé¥éi&uËÎÈw+„Ãc¯w<Õ$ŽÈQ[+"ôuÄŒäät¡´[^ ÅUÙ‡V//‰mK\8'tV?“vÕ0.Ž¢±²RC*γŽDÈÑk^˜Bpào€?ÝŽ»¨âñ¼pŽG9©Ù¼ÝI$"J‡ˆy1Aà^é…!¶éðá;m<ð[ Mc”•¸L #%ŽÆ6$ðg+FX…•½m|£u˜2”Ϥ+UÎWnBež/ÞɃ~ewêM4žmacÌÍ¿|±ž¹6fÏÃùõîw3"Ûaõ¢ø¹)²Áå °c#ÄñBŒ-n2ÍÔRnëI¬¬‡i¸j «³§NC¼ü/˜CeˆgT˜ÇVTàÀoU™rê#FE‘;úÏJÝFˆI¶йÀ3Ú:­El«)“xl÷¹¶˜Ê; ÕJ¶I™‹Ý ”XT Hv¯•K…J’šPaÎXκ¦UCµ±1ácy3«Á´„H ÏHˆH{ ªÒTÄMº“ÑÖº‹ çÛ%ƒ¹6\º^º–0´Ešu—DÈišÂ6%®ÏÑrfÔÓˆ¹íyÏ›®ow;éæ.0ˆÒ!¨ }÷Džñ8¾‰‡>Iõ&àf”㳆嗌æ<;)Èòzv­\Õp¹WÚšƒ«ÖÚn’@„c 8Œ€µ¨^K´ël°ZZ,qm2ŽHCš©¢RîYÊ “5JÙÙ‹"Hî×ÆÑŒ±™,m&rr×_„³%c4„´¹jÉî䘆´Ø–à88iŽ cÃôªyVX¶xTÞɽZµ0ùs—…_ˆD&­å¢ªªmÊ!ņ}eË‹68B8œø<Ë…Î5 £Äཊ z¾ÍHó]_gÂ-xqJª›QØÏ@fŠÒö‘yb°TýÙ®“.‡Óí[Åõs&áùcàÑ…÷¯Ëðýоâ7…¼‰—èÕµ]êà@GŽ8㪹.ÆO9o5'FNá玙ékÇ#ÃG-#¤ŠÔZíܡͺ‡ª×ÙªùE‰ÃÝã§”Ï˽È\Ç6o˜üëOƒdxXùx„ê†ëãÐÍsUö.dxs"¤EÀ—ÉAÌdÍ<{WBÁn9ž5ˆªØ¬aSmr¹âõ·H|w`ÒäRlqËøÅL?²—&{Ó›Ùßæ·” W 9öØéÜó›¤ò{8°áî—¢éû9Ëφµ­<»m©®R‘!Ôϻº[£,ñÏ«Úp/æbiÆ6 8·n p»r_}þCåï‚zø4Qîü»°.”×&e0ÍïžüÝiVîï±¾ ˆBjk5¦ÒU#R[è Kì¼¾Ù@Ìᮊۮë@e¹L†ê¼¡pHñR•7–•5¦²’x<Ù@Ä(êÍŠætQT@8šC6°*³>Ô$ã9Í{>g¯¾¼=tï{÷œoÚÕ ѱÁR'\>ÙÃŽ«Ôq9mÖÔÜœµ­mÍVbËUB™nÓ曆ÌE“=4¤rìjÔrrRføÂËËÅmsQ\±ê‡3|йkHÆ›ÙMæ\úgš`KXЫ†Œ&û³S™Þ@Ä× \ºìŠzÉIÞèåæŒ‡‘<–Ò$§Ö9 ¥k5/bµU{ØkÈ5*_/ª3$£‹±Á{´î éÑëðdC“¯ÂÁY´Ua‘‘%Ä6;µ5`aj6‡®‰Ô£µ˜êé£| B9Ñ¡¾Rá¾Ý‚ŒBÞM€áÝâé•ï6µ=I–ür*2!³„ë4Tx¡‰ÄE9©MT07y~f"iÛ"‚Ä©QgéÖ-…#·ó[H¸çò|‹v“¸uYÌòˆ,FødH˜—)Ù3×µF+¾œÃxw’WÄLs™âu¥ `B\‚H°åµÓXZÂêq‰ÖŒçe©%¦÷:`õSï`˜6Ý«ËdÚ–BH± ÖÒöÂ#w1Ñu®YÞ‹&sÀaö&5…¯IíBç§Nª‚Ly°O'Ñô~‘öR|—Ÿë‡Åöij,„™~=u),ð†šñ½{o&ó¯w×kÏÃh¢6ÞšÜÅxë¯7æZïg}ÓXÐTZ‰õ¾º@½VzŒSV’…¢9C†æ·¾S#UHg‰ Ò˜`Ýq8 rDÛsWNõÃÍáRNjªªªª¹€~5Àð¹€eSör™ëðò’nŸ8½g·¬ÐpåYœºÓF’Nèǘñס@ئÍ2¸ž¬×/*qsv!LœÌrTd©äØÞgÏÄðÁ„dH4™˜6*’ ¤Æ ÌŠŠcož½>{êu÷ùŽk‰4h§dß 0„dIpq®î¼SÄÍ,©»nO½8v¤¦Øñü޳^Î}÷磣Mû¦Ëȇ%¥x® †¢„;'Bøô&z‚4.¬=™–XJf²‰x‹u ᶆó ­`ǯϷ·33 CËDñCÁRt=|<~Ç Õ"F×)ÆTjðÊyùºø—.Ûœ®%t®8z<-f†`L“(·ÛaFYÔ-qs}òl¥º\±j7ŸõÙxÍ•¨T Ýe!j[¢`ãÚ´&…ûë¾ØbNô™–›ˆ06sóÊp5ò˜ MíF¨Ã¨peÙ±”{\^5»„¢K›·~ ­-%d ‡ Š®TÂÉ"ÜVI‡µÁ"‘Q@œDPÖ²cªj¨Ó„c,×0í9Îsñ‹R…ÛÂ(¥ÆDfTa”8Ôæat˜ùÀ3¥ª ¨evá"eY£ö0…±t*½¬¿*š°ùQòÈ!Sæ®™įU¸±ê•àËÅ×Û#¶¨Ž‰EF™†ÂØBíè¨áœ1Âai:µ‰zCq·I‚@ä±SË ®d¨Òñ¿=`oŠÈïÊ¥eYôd6;LÍ-·u%d@¢™z®°ÛÚ0ã¡;QÀ¼©$ªª¬Ö~1£®:š×^J†Z¨ Õ6©Sƺ<ç±ØÄuJ¦Íhk_fUËZöXTr®¹8Ž[ÎS]¼‰A×—S3ÉÖ÷_¦É¾•çÉš¶^ôï N®uÿâ j5,Zjòº-–]`ÿodqy^/¬öØoA¨fkÞöKˆ ²èîIžÆ{8Ð×83»àº`M S7Zm°>&îÂV)ˆ.+…Þ̳2¹†ˆnDf4“ê×3·u®öÏVœÎ#³8Tú;påPÊ‘T–Ç2’É à¦A§Ö ÇŽK:òœ®¬m¾Þ‚õ›ì×± 6 Êñ áYŒŠ#ÏÏ[p®i܃JÆdf2Mwa²m`Õ-„% Õíc™»Dl‡bª5’Î0Œ°» ë“`æß‡*Ÿ›ð[>ã®{¾šÛOÜÍiø*¤šßˆçÔ®Çs ¾d·¼Rð{Pîâ7•ekÁ¨¦¬*%îÜØù ÆHo#ml&¿-iÏ®CÈë™c’>“¤š¢HT„ñ–™Œ÷ ‘÷%×ÙÅbvkÑј¥JÆTQÁHD€tÁÝŽšÁ“ ²É ÑÀïSHÌ­"ͽß_}/æÍm{]±NzÌõx5}Ÿ É̆ñ’SÓayƽþƒPúwù¦èÌ I†ù%@kÚ£ %¢Q}¶n<™¢L,H’B¼£ºó õóÌì›e¸sŒÎ¡æ€òß:7™¯À‰¥¬SCeT©AØÄC. ‡ KkXöJè–\ŠiŽºçP†²¡xRµaQ†F:k²^Aƒ§µ/‚æU±AØQôuƒ·4¤'”‘Ab>ê“(B Zl™ÌöÛ#yã§“Mx“Šj; o蔉Înä): ®BÌ…ÅÓ{ÉX×¾:à4™Ë„‘žp…©_‹"3$*‰×ØÔÏÌ©î—í.ö¿Q•ü Τ6.ÕòîĵâÝæ¯Žn@À²·„‰ð½mº¹ºz¼]2Г ê—†«1^Ì÷Û,ø~’ŽÉÖ[–^H|tïԸǽw< ¨‹ãtc“ò‹ƒ Þ( 8i2(¬¬AÁâv’òéÈèÀM€tÕ¼O œ"Þ;-ØGÊø‡uf4’[?/íüA›ï ÇÏÆ\~¶Pö00Cí`Ç­YÃ\H}~6…Ü]™&sÒ6y×-ú¯n¯Óº”›Í52öóu<í¸ºT…¥Ûßuý©€ &!Êf`$;кèþ[èŸ'Àä<uœŒa3SCY§„µR/›*.w`ù/ùµ’Än?ÆŽ‘ù$+Ñ¥jˆâ¯Ú14.aE¡¨7ÇýavýŸÏ5$8„IÆIê”K  á|r”¸ì?.¬ÀXGô` ù4|ë#Áóÿˆ¾óéÛ G9¸³Ê†L Jl*gÉð›$ûÁ8ɺYð’5ø5°s¨’ÙL¥ I±)j}¿¦ÓtIfë ÉYa”X3üžYr°Õu¦PdÖSYìÈ,…²-€["KB§êQ¨)å@¨*È£ H&øŠÓð¹Š,¢!ËœëóDÚ3kWÁ»O¹µfdÆX%JÅ¥TUI¿ë7lMÏÔOÀ9@øæw,á˘HM®¤)U/¾ÀPYHG€€ïmRâ%Ksž˜…SÔ,mª†ÙC0Êêˆ2P¤’FfÝd€›¢ hpi%íÑ–ËHIÅÝú[j6¥¾5'êlËaK± -„)"4QXBÏɹ`ö)N $à™qtÈ7B¤ yq*Ob™¿]X$@ß0a­s««Ù­,®Ì‘Ò¹Qµ’¨ï½k)ʦ­±R}vì­®;#ÜoRxf¸Z-Ò,¨PHȰ•Uovª5:A>GÈ nF0›ãiªPöcÂï£ Œ(„ù}BÝ/°»†1íêÇ2°ïVa9—±ÈZ ýX-I¿€,°O\„ðÆ®£R )ZT’ÕEïÄ BPEE‚(ˆB• bímªìµ‹ZÖÙjj[4ɶjm²«U)T•aV¤ýO‘‡v?7îM„6Q#„°’Ê‘÷$#­$ÔD?_/¯ùÛ/Š"ƒ¤Ÿu{øî±J?ojI Eä@øPGìà·Ž7²*’2z°Ñª³ÆÇÎó?—‡Z€ñâÍ÷É«sUpÆ)‘Š(ÅYd¶º^ïpuµ·w~ŠxW…Ì·wU_‡5ä´¿â®×ÐWf6M£fTD%@hÌàÏ›\ÒùAT…Aõù85±Æo {äN©Ø8Ýþ7ÅnmC¨à~xAeQTçj&! INqéIùsð½­Î3'%“JF–/þ†ã¸¨nÝŒw+ýSG.Xî?Åp0ªQÞѱM˜Øy“v4¯õÊÿ¦$˜PáF0~fáO•Íõ8¬¯[õUÌÑà¯G©³š›J”£wŸíèÝV›¢½Í{Í–UäTÒ¡UÓ¥¹:5­mª ÚÀ¤!‡BbC ¤) !2ÚS PÊBÔ E¨$5k1 jÝš6]kMH‡8¶I*)VÄYaUY.“Z(XƒJx¶1#J‘U*¡‹ŠHµ1Èb¦“©TšRb’U1R ÙI •$9óÍVµ“ZÅW Ú†LY$MµDÌTY$G޽¯<븗pë¸J-Y’S“,¤"G—åÜy^Òõéêq×f¢I5e©•w=/;G¥Z:£iûM8i»gí)»ƒ¿¤èó1Õ 0\¹¶¶ú5·Æ•ÚÆãI-­'ê4ÁM•‰Â±¦1‰³LUJŒTbiL’M¸<»ƒ®àë¸Ë{í²¶ùåªõè¶«Ù[[Ý6Ú嵺[¥µ’Y$–DU‘$Å Jª¦Õµl¨÷Ôn©¥Is Ì4Æ$+ʼnU1âÆ)±P¯è=NÊÜœì-µj']uÖë.ºÖæ €s¨¬i‘‚‚0›HQ&°ÁЬ1R£ª¦•aˆIy+ÉZ#·ŠämʶàçQXÓ#a6‘KS¹UF”’bªU$˜¨˜Ó4¢ªF)$ÅI$Û¶”·BÇIi%tkP„$’É"}áB’Y‘¦£p¢9Fˆ-ïæã3g×'AõH%zöhßF¥€Ýä¶ö–·µó]t”¤²’„0£QSÚØæ8TªŠìôœ6rákðrc~–顲¼Ìn§%W©ÙÑfç ¯CÌÒp®íš6uaͦ#½SO¸Ç̧ÆJ7vtiö;úóWVé²»:=?ó¸usaÉÍÜÇS›Úxj[&ÿúX*$óÓ«ŒZ>Ó¹<zZpi7b±»“½³fïsK‘±ñ976cgWµÉëi§¹ÍètnæÙÐ݈Ù]\=÷'"¸vný%ssn¯K‡™£a÷‡Gg :6w±ÕÉEVÉŽlLx+›“Jî|ÍiIÈËÇùPÃÍBøÀš dJLg+ØÈPj“,"i+Œ Hg1¦KƒÛ=ç7C«›N÷ ðpö¶b¼\ÕÑù]^Çs”p÷4îlèÓGŠWf7ri³aF h4&1Ò J I ƒ×)/“•¾ûâc¸êÇUNŽâ¹¶1ŒlÆïs“½[›7x4äÙîlÓ“É»‡‹fîί3N[“½L8pÝÑճűO;ŧ'6ÉUàØ®NfîóNÍ6rrN ÓÁŽOK«ü&Æ•_ª§Æ¤ÅHª‰Uü/cí¿OºèþÊ®Oñ_¤œ8a¦šhp©8taÍ_ã*)XÝý‡6ÈèÇ61£ó994ÆÏå4|îltiƒªšy I4ìÃ…u?”¨iŽ­#w‰<[°wª¨ïSu(æ¨ÅM*LPáQ¨›¼Ìg&+vìl¤æ¦ê›«²±†<æi„ä§U&›‹šÆ"ï8¿Ãÿ®„þÿêùoüüËoÿþ–mû¿Ü¥拟ýå;Àó?ÇèÙ z$_—OÊ|ÌkâýôÊ¿akºc•=ÈÚj‰D÷˜Zë¢^}é±’ßíúZ¿•ˆã©«Á´húi½²^[õî…HY/ëy4Ÿ ?I8E‘b?BÚ1=Ê|½hÖµs3PÏÒ¢BÝÆÅù¿BëO.sèö§æ6YŸ[òÖâo¿ÕtuYf3íÉŸZY¹Œ$ŸMœŒ—ðÓS$Ï/À´'GÃÑÕC¥ÏòsuÀóYUk„&Qx̹ ê˜Ã„˜CP"0$Ã(°Ôf§] DñÖzô’I¯¸‰7Ãí×on“ºîš$,.kã—ÛõdŽnBd‡ ž_Ÿ·èýͤÍÍ{Ë!Ð}ºÂG_:-3|º»Í\Xú¶¹ŽºgN-&?V5}¾ÅۅꦅH,È%™BdÈK ­t\;Ìλd4 ;ËçR¡¼Hæ\ß=ô¦q²$h‡b½ÁöhX$Øñ9y@á»@‡ä·TGN_)“>íº\’>¥µ8—P’Ñž3 }ïvÇžúc9 …”饮þ[ ¾µë²À¬NÑë®û“6(ØÛ¬òP™&™º;“eRN öNdäÕ“7I8s™–¹lû­Ss$Ù!“…ÈHBJŒÈGW“NB{É«tèºôúÚ¿Ï)Ìõ÷¾úkÆ#;b;Gû÷§'4ÜÏæá¨W£Iãu«àh‘ÔgrDîçÔÐk/IxÓ‘Ç¥¥4j3HDò\{.íNýâ –$“ÌEÉßçþó<3W¸{h øÑ¡Çªh>dº×sW 0Ö©—݆o‘ù5Z0” UbdlÏ&zÄt]Bf1I%›`Žd“…Gm£W½Zª„Ò&’ãVÊ¿IWÙBatgÖf6®Cf9°Ì /6Á*2#›}¶-µU¦\as\ws%sàV— ¢U¡«ŸWc#‹«Mé5ß]8Äú°Ç}(ñã{ýfŽ“&I "‹ë[„ U((ag¡¾-kÀÝÍ¥´ÉmŽ›:ŸikâË‹lêHnø9ÞÓdª­ØSxÉ!iœ&íhJ†ø~ Ü­4Ž„™™a–Y¬!À3¿O­¼âl™Öf5âó vC¤rÇ:¨Š H¤"õ6ð—ÉA3ƒì–[çµR>R9ê”òpxÉØå€ßk›Àò¶ØvaÓKøÙ×9çÆUͥȎÉRviB"—¬8âai|Ì1›\ çá¾$Úg X°ŽKÑ ¢ä‚cTF”z ‘8ë ž-šþ·à­suZ«¿ÁŽéOÌ9–O8ô`<ºÿ¡Êø~7/(¼–Oݯñ8¹×_î_bØnùðxû'Öÿm/@ŸVwNÏ̯N_§óþŒ½½ïÈ©y Aˆ.ÿƳn?qÕ7 }K½-Wõ7g¸`ÞêO±÷§«æ7OíÓ›&ïM«ÍÌúceS¯VZîK¢¬Î§§;^–Á<þþ 5¼’_GoÖ7&ÙŸkl‚Åù«Búˆ&=·ÀÕ_qC]iRzåTUy×OÃ|ž¡ËM82Ò|~v&îäuvyñ£ IôòøvìY¸ ƒDÅÜo@|Ì_c[Ì/½{mÛ‹ý‚7¡=Ktª µcÓ/BŽóç²JYÚI™'„üí§ÈõéIŠþ.`ðh™ÄLØë¿1¦Œn=pãs•uµ0¹ýl0ˇD¿y”ä”i¡Øv=ƒ[2ÝÆÉ™MëÚ$¹R½}":3߃ªvæöyc3 ÛDZÙk(Ó&UxHÕ9–N³MJrnoùo›$5^ú5ÿ_¦½íÈóóvÌrqK×âÄâìVˆnÓ¥/ÆãzË}¦‰éZùµ/F¸æí6^BZ¹ëÖ@s)‘Óños¢•ëSEèg–ã¥1Ô;ß *!I¸ q¨ ‰]þª­!UDåg ì9É=ywibÅ!$º‘™ì´n3l_O=P§¤¡Ò³Ÿ#Ó w®žíø¿¡ã¶T&òŸ?Τ~J?nK‹ãEÅ÷Ï#ž½Þxƒèèï½Î^tÈÊV: ·c¯<Æ2ÍiŠM½ú ùp™èÏSFQÔ™¬Þ¼øH¨ˆ¤ªÂ‡9ÆÔíŸz+Þ}õú³êMAáò7×ò᫚”MG¶>ú>ÂÈa\‡ç©º\›³Ñ ý i2ÁÅ¿=¢…u.>ÐwÚ÷´q­#Ðï¢èŒæ®q¤“4@Òç”}Lw ’ä™ÛÇFMKÝ¿V=Ëríñ»-æ=iºÃ²ì4‡?,ÀN‰9 ù‹§ 8‹0A!îpÃÑ8‡\å53kÚdåv›È’jonI õMžs"bÂ4D|:Ã>Ùôm@Û鸄áÇUÚ±—Ó÷!Txæ\ýÔŽ`;q@»—,0x.)üçåÙñ¡S8©û©ñTÉØ> Þ…Îï$ãXNm÷“SNí…5ˆY“¬tN&$ $æ%ß'TI=+ ä„xãZ€ù°YœÃÆ¥Í8Àõ$T:ÝwJiì×$ÖŒ²2¬ëäN^VᱫY‰¬ÄËý–¦F®M‘0 ŠÈ(°$€/íb…,Hüú’ó÷ROUÕ‘½eÁ jÉ*)-me›eM©¶U¥S–¹kKKfW5^ͯ4ÛfªÖÊ€ƒY,*1ŠVÙ[YiU¥©[RÙ´m±I$°–, ’YRDUµ¥µM2mµ,­¶k5©,DPX)Y RY*Šèb¬`Œb¡€FF ˆÆz¯Ëµ„#Gø¿OÓýKgû?áùZgþ/¸þf¬¼ßOü¿¹ýÜM-óúe—ý¾íæ¹E{Þì"&@Ý2sá°á >Âz2žÝ>‡Ôrm„=Ý+,3±^›l°Û{ö CdOÄŽ©x¸Ç¹ I1ùÄ­4˜X‹µ7ÂÒ‰÷#ag>yq<ŸBŽ„2ÖÒðN`šæ’Ï¢rË;Œ[½6G †ôm}ùÐÄ9ÎŽ1¶ß/a\IZço·Œã×NÕ½º¸NÆ´³\ÔÛ0¬.] 2×ÒÈçÍÊs[AÜ<ü(¨ä4 ¾FRBAÅá47Ô­Öãð ç˜T-eK"Â!KeB®ªÊÊT/*^.³× ‚á–¼¾×í0q6ý¶~îx™ˆ9D¶R—Ý HŠZ…ûrGÖÂ¥À=°”6Ïë6;˜÷1†˜aOÊý§Šª°0T7a²«Å¤ó§›wg$Ò£fœÚlæàiñ=¯•£šsSÏC¼èlÒž ì§õ›¸i;ÔÒ+J›6a1âhh›´¬6yÍ4WhŒYÜÄcæzËæ¡tF0$+ ¢s’Ï„6I d㇠{„¥C€°Ú VPN%4ÒL`^/™K¤)p´¬Xá)°DQYI Áà®÷ƒßLp‘Šÿb**ª©QXy_˜¾Ò¾ë6e™3333LÌÌc1#Ç‹§ ÉÈu>îÎ!Å1{\˜jÀ²¤Ôà5ˆÞŒ„|¨|åT6yY+2“-Ôbg!GOD²–Ye–Xç@Ù zU"Ôô¬ O±bÔebJØÚµûV>´±[ð¦Ô~ªTRxŒªà5h¢Š(¢‰‰‘1|ël¦|r›2I$’I"t¯Ï¡ím>ÕÙýâßàT-Ó–çÜ*{›Ã¨@žEàx¨àu'¨õõu9äyøÏÀ¹DØ$ÉðæÎµxeAÍ Ý¿{1áh×ÓÉÂXPªâîîêUÖtŸg|Þn÷Û^;sÍggUßv«¿]ç'Ðüg‡ß…'½s^_sÀÏi¨¡áÞÌ¿„;ÏÍõsÓ³÷7½»ô¨íÇs×·.'°ë¹½ûsÝû?{º*Ï ^+¿ N‰1<‹æ»>óÒX=;3ª<óÇ=„öèýàŠ›íÒíZ®*dÄ([‹ˆ®æ!ú˜„»t=$j£®÷»“]{Ï*„Iv¸çn#;_~Üóß§^½ûöíØ¿mÝÛw؈ŒÙŸm²p.Bv.à‚ªpÿXÒ¹ü¯#´þÜ;'d²ža²ÊÇd‹º¤Hö땬&ÊI¢Tû”{<™ýÖN <ï|—ÐÎ[—3ïÚåê^ö¿)ÝÜj&£!БVÇ&1+yMûŽw2g„èBPD.^Þ~-ãUUP žR ­µNøõ'ÙëwwdÝý×eNËl<µ9¥eþ~¸ð¶ÚtóEçÓz÷~sâyF/ŒZ$duj¬Óª¸¸='T9´]’‘JŽ˜]3œsÍ4¹ÂÎÙ©12#…v¶ë“°( .ð_J 6°˜ÅEp¯{ )ÚéRrŽ NtdwMM©/`$9OHË â—0 (òðPÈ̪ »H“—}iÉOÈë.§Ê­ê7vc"’£æS 6¦1‘¡hµ‰Œ-^têú1[½Ôùkâ÷³cègϧek¢°ÂYQÇÎ ƒ6È{÷‘ó_~ÁïÃÊ}'Ò{/Žûçë¼Nçs¹Üîw>ýÞïw»÷»Ýî÷{»¹âWêu,H9z 1ï0´o€xKv¹£©Q–¦³Ž%]B"æ°6Ryžn•–Œ)aÍ¢ig¥Užáíp ÙjØ>¡klG”#hy‰4]èú§©ý©_% ëz¾´ÓzßîMURµ´Ó¶¡2jgQt¢ŒqšX|X¼„{=æÞÙ•†Y„Ë ,kéD2)y4Øü-þ¥â͹¦“¾j×'%>¯äóÔ7RI%ƒ˜É¼uËÑ1À‰5%‹÷g{ê*8ɲ·xç*ÕYj#·s!©7Û®£jæòÈb z¦½§ˆ ó—À,‚A ’îD’w^Þvyמpó®’I$’Hü_Wʾ÷m¯³U¿vÖ®ýH  jæl§w>ÎÉéfD¶-‘i-z”¹­Ô®–Ö6ص½³kšØÕµšÈÛ_€×“é7ÕS^ݶê(ƒŒdøÉ&Ùo‘Áéa„2°Öö¬4؉´ú{³9’h?ˆbQñHuŠ9».ÐÌ*Ä2ÌXPª’UC÷ýoߣ„‚b;&‚S9 q´t‹ÇŒÎç|˜.iæ)HVh-;RN'y¼Óh qlyå 蘜Bš_ï §&$¬©§°ù[º¿œÙý'ï88N ‚s0˜)ÌÇÊTÑþ«ù/xó›ŸÛ;Ô§ ÓÔäÃ;ø[¾5~'6çÛWÚDÄABð ¢Pn<6 ‰Š‹¥†‚@¬ÂZ8°ÅÓo?Ð ¤ô•Q ƒÓL$Á˜/ (¢›¿æÔ o—ƒ £Ã&„À_ ÿ‘òÊ3+ $  ”¤ÃŒM)Àn›Ç¬sC!ÄdÐ 7>¨Ã© q œ›Œ”ˆ†?Û÷L&CÁ¤ÒTN}vå\Fét|8uô‰Ó{”r “öM’ ºqá=f¸ñåÅh§1Ff-&Ú*+•2ás„üF ¼•\çŽAļm'CÁI EÀ¢4:º¦'*‚˜®·W“>ßùŸÍþwð¿ÜÿwÿGóÿ™ý÷¿£ý/ãéþŸì¾¯ê·ýçSú?'äûßI‘ûÊþOè~åýo­õ>§ñÿGùŸÍÿwùß³þ÷û¿ÏÿúÑþ—ôÿßþ‡ô¥å÷{ÿÛûïî|?6øEU"È2÷ÚeOøBR;Ú‚KM4ÓÆ–§3)+!Wá&šÉÿÙ´fœoÛ€zHáOì~Ë_?ôÑoÅ=1ã‚HÕñ|qü1Ä  ?ü 7óؘ÷F5rÊòðŠ|ˆoføÍ08RAE/´?¬ÕÅ¢¿ýÛÏC 9ÿ@óç2ÒúVŸô)¥ð"RHL}<ŸPù‡Ó5»ÀR“ŸhRcêÏÄ>üü#ò„D?—Åû3Í$$‘“Í>«¸!øÇï?ØßüÏ/X¢õÆ’÷ª­kZÅÆ÷½î7½ïq½ïy 33!¦fd4Ì̆™™Ó32ffC<̌مºÙ–Úe¶™m¦[i–Úe·{0 ƒUUP ÁóUTÕªªÓ32ffC™Ñ1ffCH™™ 2&d4̉ffCLÌÈi™™ 33 1 32" Ëm2ÛL¶Ó-´Ën´fµ­hÍkZÑšÖ¦CLÌÈi™™ 33!¦fd4Ì̆™™Å„ëZ2ÛL¶Ó-´Ëm Þá…Þõ¬ÌÑ£F‹d¥6eº¦[he¶™-¦oØ<9>GÌöß»¦r ¿=Fâa€R,B B OsÑ${Ë!£¹Mý޲›’¼ÇÞ>Aã N(ò'ëŠÅ7üý5$ê= êSSŽÌHa4[É÷¿{ßÑžR“1ã L0‘e")ÃOb¹8ri§céaÑíscò1ŽÕÕ§VÏûƒª¥RU)_5>v˜•B(ŠeÓ5Û C›­¿Õ)ý†/ÔÄc-7D&RH€(½“p=Ò=\O@ ‹ßºtšy˜ˆ IÆDÜ C¦l“ä„ÄÀ…_£ÄDJËÅD£$í¹³Òìw¹¹îxNoÊìÑÍ̯[O÷*¯‘S½íN'ØW Vçå(¬&•¥cËüý ˜:(Ѥ݄ý ÓdŒ)¤ÅF+öŸî•¥cA¥l®?êtЩ³ÁÜ6)Kå?r~“ÒÙþéû/y§sP4ÉKŸÎc)””bA±Šã9QqB‚AÄH•&3‘$8'8Æ!R&ca@~ÎË5ð•ªC0À±´…ÂóàöÈtt•çý¯µö¾×Úû_‡ù‘ù‘ù‘ù‘ù‘ùO‹âø¾/‹òÈü¡ô>‡Ðø¾¿Åñ|_Åñ|_Åñ|_Åñ|_âü_Åñ|_Åñ|Y?;ñýM=¤Cãøÿö@;çœ0žÔ>ÈŸ=ôü•$žùP¢ŸDú'Ñ>‰öÃ=£ì’ LLLLLL!a€‚ ‚A%$áÄ㜙œ`^_à»øñ^÷fÔév¨£ôâïѳô¿Kôå|”7OôÛ©4ÝN¤ÕU3[M{B5_ûrK5ÙäÁ‡ îÝ‘ÔÒ×ï¾™e¾÷ݼ×(¢/{ò ñ÷þï­«ÖÓ©jÿËëÁ2½_¬#ØÈÞ–K¢Ä‡6ªm#ûHˆþÙñ¿ ó©³ûmŒi>óЧ MÄ~™§q“VA—aaW¹™_ïð\Õ?pUY1‚'ÕÈhÒ6 ÊÚþ8k)½É7†˜ŠÔý&Ÿo§Ž•™š:º7 ÿkSÕЈL@ýÑ)€¾~U‚1N©öäÆe«BË{™ÌæFI@¯µ?'Éò|Ÿ'Éï|˜“¤’JÒP’IRI$’\~T|†eÂʧ· ŸFçΑ>ÒòžûƒwÈÕ„;ÈŠö5»+}™†Aü£¶k3Yã.šõ#Þ‚Ž³aš‚ž½Îý!7,Pþþøæÿßr]çï$à5šå!°òMç9aD_ÜŽ<áÌ`s°w GÉ&P–â¥:R)λlX¹³s0\ΰpøu÷z Œ€>„‡¶w= ÿUäÄð_ëSèro¡¼¶+³¬I$è³ÎP©Ë5x×÷Ø¿¿~Óo8³ªÃ!éšÐi>–y†;·ªíÜ“ªÆùo £0ëªUT*mjÛèf6©Õ¯³“Ÿ‹¹ÊÒs{r#Nvؤ 7/É‹ÈRD´QÝ+°*ÄZ… ‰rø—BHãõ„ˆñIÊDýõFºTc)+`'$ ƈâQ‡˜J I„–±?ahö~‰?Åð}/¡ô¾ËéâN’I+IBI%I%)'|éÓä;öz%jxýI¼B]‹^¤ô)ês{¸÷ß¹¦4ø¿ë—MŸ:Ž[LUu}¿å«oÂûÐÛm¶Ûp“g#q^= L=.çŠl“îŠIÌœpáETSý,ã©ùU—Μc./ŽuàK·Éhþ>týx0ÆžSø€š–ÍÁB.¢OŽ,‰.S,#,ˆìw„èaøëâ?aì{\…âêÔ«NG5V:±íž-yL¹(âo|¢Ñ`,£øa´±ÑûÃÅK)»5î |#æ|ÓîüÇñülj:I$­% %‘øC{[µÛ‚‡Xóƒ¬QWH)×òB“ôu ÿ²wϾ†È“gÂé¢ïðÊßfïÜÆÇXǹÞù6>.$}81Ts`æúš<¿YÃæ""ÉHi@¡Ñ¬Ý-(×7M*’¦6Ô{ìE™%‘&ßlÚ¼¯«LÞ.ÍŸ—kDÈà88µ\ãsD†Ò "mƒFIl+Â~{ˆÝwœq,‰!dVéÁø|ø ¨`œghІÏUQNhh\Ûð=?ä<Ç#Áï»ÏÀûJùG…€zOÓŽŽÌP¦kƒCú¾=âó`î #™ê{ý® c8¡Aèð¦þeU*`Ìt1™Ì„¨16ÀŒÃßÈüðzCÒ8r6Ž 9ÑŸÖ.~‡5ú Ëé6¯…Ÿq5}öfa(fhÆ1ŒyŽÐôž1Ìz%Ïö¹N˜³ô XÀ¤g ¡tè•»YQ’A²xŒ5ž%@‚!©a€æ”§Ò%b"@Èt ‹ÆøVj Xb¢ ŒÀô9ÚwwíRDÇ’º…dzæÞOQgWD}u"lH…XеJúÄZa€2? EH bˆäz!éú_ØÏ%D[”ÌË HŒˆ±ëƒ$ó1ò>‡›RU§½ÉÜ4û­¤{•ZÔÚ€ËUhªh‘-µ- ˆ*IEO¶êÜï1%Ç­€áJÒ¢Q9Ä+%œ.bâ%R’=ó÷&¸~5?PýÓQ[² ödÓq¢T?c´urÇó<Ú>ãwÀY{HÉ~†TKsÓØ\ĆÂ3SSQE¡½â’IJµ›Æ2Qƒ²J¼J… A¼9ΦCñ¶:½,تv}ÅÒ|>.žÓ¡ þç˜ÃpŠ—„0`d­çðÎh§Edð7µìû?#×õþOÉù?'äö}‰YIY/®¸Ó»>xW¸±ã”úúðòŒÑsq„ÔÉ?ïÿ®1ücø ¤|mò¾wýúºEÉúüOÕþ7ó£Îþfž½AÌ ¢tP2xóTpãBóg“E¼¿M§vï´ÙÌçˆ?/NÒnÝ6u“‡q?yyÑWðª³Ì9…„‚1 ïXã)öH–e¾;®ÕÞß¹®«(•7næ£M¬yÜ•±ŽGÁ=ǺdC€ÈÖphÁÝ(щvÌëÐ8$aK'ëÉ çŸpw`Áq ¹ƒ›ûµpîèôµªÙÜÆ= zxW©©9+Ôwn©Þv•ÍÆY^ x8c¾˜Š8Y#…LG&8lÙZyÜ7rØãƒ‘gŒÄºìH ÅPÆ\01@°_ÆÂi:9wGÔåð?®êêøÜž s濚h2š\ŽIV˜{p<ÃŒÓh0Na¤S~ÑĘ¬È Ià˜`lR·2“Ÿ3¿5RJ,…‚'„ÄG‰rÒAE(6ˆ%ÍžC^ÁiU > #¦4˜²ž)ÄÓfïïlìيǾÙÉ¥m=8iÉÕÞÔW ~Z|®[|,¡+\½ºkósmðׂ¦Þ‡£mUWŒ§ZÓÜ“œÞ‰"‰(Ä‘%&$„}€Ö¡"DM;SŽŠÊ᤬T§ƒêwr{_RÏCÍíuŸ/#Áõ±Tì©<îS‡–ÏG¦žäæÿMZœýæ5µCC¯F£Qô Š!Ø)¡vdXÛ ªüƒÉ0;ž—’½vžtê×W&yž MÛ;ÏiÕ‡_îcûˆú†Îßp£×Äô;j#$‘)ÉŒ]—Æ+²µTÓÇ¢æ%êŒHdvò»G5Š—’™ci“ƒ*{—Šh¬Ul5óS¢ìNjÇ©÷{ònäc‡'ƒN±õ½o„ûÇ_ê»äýg¡›ÊèÃ|7màšäm-& DQ§Ai¡K¦G÷ÏÙUlðW­Jïèkõ÷Âæ.šÄÖŒ>¶aº³]˜±o _«[+fÜV™¬c[ccÔ˜OI)Q&& #‰`’)$ó=»×<øölÆÁ³“ú.ަÏß{ï\ý6‡™ZwKÜÖ%)%¾(âRbQæÑ;’óàŸÚG!Ìç°J,-1•*5IM$F.@ (Ž8ÙçiÛßï_VuGdx¬RÎjã›t¤´•陸m˜æÛU£'TõòæBx(z“aË’™ŽG\Ô\ê„§lÇJs…¥qŽí}Nì·z*øÕ»¡<šl;=Qc·`àdƒ®+»]ú Îj¡˜\À¢® 8¤œû›¹¯#»7S‹lEèݦ§…af ºPXîã¦g­ª•""éšl6¬äå±»n“MÝšywºÚ§ìlìßc«±™™™°ÌðÑêBk•3!<>mSÔ 1Pgîë™æpv>Qâô4zÃŒ`kìô&ïoåúš;œÎ­4÷Új½*b¾—¾á¦Êÿ”ÒxºI’ÊßÔæïÝ͉Ex+nPâm1š–$²·1Í+ ßi£y³+†í=åœÛXÝÃ)”µtš•w1³õ¦Æg4ÓMÕÃvÝ^g&œ”äùTriŽN÷59'G6šO”àsl›6mɧ#£s‡Òß›±Ã÷˜ÙS“ÎÒ¥~'fãN—äÓ‡{vã¥I*XÃŽ“5`Æ´ÔÙ•\´Ê›K;>¶ïCÉ:¹94rWãÔ´ëf&[dªñÒBs‰08µ8â5| vFFÇd§¼x‡1™EÔ„ë)Þ­*uO[|\¢4—Ì^ôš`Ò%ŠÌ!—càÚÓq™Á»b‚Ø 1´÷–z}ÌMÜÈÃfŸ*´{Ÿ´ö9½ μÊ)ÑÓ2™LO‘ëÊk^‚•5'½Í„DMH‘-yûAƒPâ#(V))²TpŽá"º!Ž :ù•û¯dÇWçbržóZzŽ/ TSˆaæ )$±QDÙÙ¸= ¥EÒs1È_%(2XY.Bq‚ÑK ‰ ƒ˜”æÅÃ\,L?4°%+3“Œi4cNÈŽ}à[±X_.Ò=Åñ¥¥ ³Œ!)ax¬¸8ÌV@Çz¼žÂ¼6*CM‘‚NÏ7£¤á·Z-½]†Ã1‡±íóh¨úE€˜‡Ö­41Ñ$c“vÌVšiL}Ndtiº•[´­šL+eLUUNm ªÆÆ%b°ª…TÒM7=‡‘à¯:8<¦žæéëN*ðç%O™,ö1Ážº–«Ðù¼±=mÞ§%Tüɼo\…bÆg†C 8ð´¶i+¹£XL@¦ 6ô£Š1Ž0 ä°Hƒ´UVWN•Q‘gXFbC”½a(òñÀe&%F3Œ&¡A|˜¸”s(8¸8„ÙqLKä^(¡xÄt@pñå$”æYpö zÜÎÞ󦹼ì{ pçÕAÈp^”Ââï5߇XUr©’¡V]®íf¢ó½ÚÒ»Ž"ÉžS©ÖÕ†`-B¢•¡@â\…D$Z0&’³k2ªÁÂ%Û „Ã-ChaR›nbàÇT«Âöh-ˆõµbi¼ðiãÌÉ3‰ájºÍK$í!»ÓAÓ3¼róÒgÃÐxõaEÒ7…1Š9D*RsÕÎ0ó@¥Ò(Z!)UQE\ß(— Œ†ÉD ÀP <Ý'(. ±«12!18áIˆ Luÿ³‡Š®õ4“иªW77{†æÏÖVï-@H"„ŠRᦎ(p¼Ô£)¨ôÞ(lºhhhäpiG‰ˆŽRº¼Tz/b‘É‹ γ¡$ì«mµ¤ï³Fž‘V=©ÏwLÚD~w¡Ô鹑\äÍ1ôfœ¤%ô¶;»Hcã$½3_QúEA‰,m‘ã$ôN>,p·žËÆÛíR±Wh·G““xpÇV;îÑÓ¾“КrJ¯ÍÉÑ;'Á°ó9º:º<\ÓwÜoòþOæéô¹'rr£¥»Ñ*n®‡‡›››‡)âÖœŸ[Åéx90sc›£­1éiÕ_ÚhæÙÉ»sÆê«³‡©Š[û¥ìtŽÂ)b, Ñ )9Àó)<]^//S¾ø‘Oxó³Òª¯IfïT=FAâ’„îDZUAyŒ¼½ñ9äPœê•]ã4Šé$-¸—‡ÊŒ&Sš<ðŠ ˆ£9†QP¥RB`ÈDI œ-ŠÒÅA³Žm7Nå8cçræî퇾èÓ¿³g'8v|±mÓ©³Ô˜û·<Î÷VŸRtlÓfŒulÃçc“ÌÆ:ç¡§'EnçF¢.¯€pŽó¼Eâ¶ó´O †È9$„aÊ€±€oŒ€»LðÈó6Žk#Ô•³£N‰É·6Ç ·:·t|ÎnN©É^†ž†É³M›IìnìêìáírtiÑÌÓ>Æ9·y8yß^:Y-’ËÍŒ÷ÔdG¡Íú6žk‘Ô¯ÝMÞ†ÚYàS”;î湺IçiÍŽN†¢toEsJõ6nèj‰|pÆPRe P(g¤Àã( ”Ê^\ ¢ŒJ2#Ï1v`@\¥†3@# >ÃAÛYAÙsF®a&âyLÑñØA!ÁÜ.!) °¤8 ÆÍcóø\‡©ÜœÚb·ÙÉ»ƒž8xm;¬µÏ½©§uo¡¿hBdÙʵ­ž²tT“¯ÐÙe-˜^ 7³y*urpá³+dÞ6¿!¦é\šV핌rý¹»g {XšzZ~&ÍÜ•xKy¶nªÇFӇб\1ëSåiÇHáÏfÎ#}½öî|¸è´v“Ìpå÷9ºœ×ÏÙ®FϨ¬tªD°UQ ¤¥q"8¥™QQÆ Æ1‹H⽎©‡sÅÕ<ÎIÕ\,Ù±ÙŽoÝu|Iât¯7zÈš+¹çkGƒ‡‚iÉ»î{"šâQ:d$)€È)x‰ilyøàqIpÌpŠIÑétœå®è’Á¬áü#a^“¸cñ;Þ‡3óû|dO’–ÂRqJÌÆ’B$ ã†7Ç‚\ &aÄòˆÆ/l\O¶Ý‡z¶°áñ=l†•Õ<Ï2¸lõœÞwÉí:©CņÅ9;œä|5ÉÌãMNçm¿g7©Í9{¬Š²bslÝ÷]“¹ÃöÜ:Eupw%l{ùB·w«Þ²{«û]"z]— ”t*iNÍ+†•ºº¹¸pù9Ÿ* >·#õÚ;9´š¶ìÇ¥ÍÃÓ6TÆ*±f7VrvMš*©N‰UU»«&•U[l™SJÄøØláÉ1%4­ÒpìÓÝà äri³dÇ“Þchnwº¼&6‡‚uäÓÅSÙdŽ9½.^qÉÌÙ¥uHN²Í%;“î;ÚQÕ­9¼ŽM“¢QH—0‹ÃÄx¤IȰ—BÒB’à4  |DB·4ëT Ù ’W,Ôõ.–ò÷<éï;17YÃ4ÓLbOrÉ6o¶û? èé¦Ôžd抵­Ù²–§„µ*•)â^B™ïJ9ót5MšÑíe§¾3‚g"ØÙ èÐv6‡ÆŽòÛMD>rhäáÕ_’¾UhÅmÅÌTÅ-ÍhåÏtñŒGh*ŽEv !…"‚1QÀ8¦v%%‘Ê(Øn)÷¢®2b(c²6µàŠH!x")xk0³{¢H¬ŠÕJ‰Œ‹7œ®¤‡}KÂEDÎØˆ/ {†ê*épÀ#UVK J–§“.´c#9¥ð53=#:o9­w¹ †íær8W‘ž#ÖDÝŽ}1ÞžGÜaÍ¿le2éa§s'K"ï„ññ›G;RÕOk»©jâõçßÍ›Çy»\ÞRlcOJ±ÑÍé©ÃgÊnó961]ZcÖóWsNªñJìáUÕ³…³ Õïµ28ti'‰ïôsåG&'ƒ“FAëýãIß}ÍñÉó·n.o(ØHpšµãQÆdå6`Y5Àìà²îq²v¹z¿¦ŸøLoÏ&Õ㘟i³Øò+< Œ=~1àtlünÎo‰É¹£6iÙŒM^NÛÒDÊSÚSKÃðhÒœ˜1PãX¤& )Äþ¿”Æ%ðp(Lyô‘ D2ò¨w4b{í½nSCa ;Âêuõ{TZ=¦g¼ðc×`™M¼äö¦ŠÌŽ[yž'ô›ÏÉÉènæHôÜ7‰Ü}—©÷§ŠtO1æLV<œ yPñ¬ ­á`òÓ|ºj‡4¸8S|ÄÆÊÙÝÍæWgØž‰Éö}NÿÔïuvvbT8Ð |µ.QwM½ÞµK¨iÀ¥,µ°/c[`¤ª‹Ñ©22YØ TŽiI\@a×2S+3Œ#Å' F‰ÚB1R%7DñH‚‰§-jœuH<–XàAæ/ÂIM¸’މêé—¨¤$,•<3pæðr‚ôx4d8dÍ‘õ‰&*•3*Ðz[ÀBA‰äÒÛg>¾oÇjÒI>-$ÐÓrIj-ˆÚÅQV5’ѱZ j¦AE'’lNGŽP÷’SQd¢K”º‰Ûe&ˆqÀqpDŽœŽOÐn!Žš~OÈFµ''1ܶºB¸*[}’ˆ  ´Ò=˦E¯FG9`_UÌxš¹ 5aeÀ l´›Bíu¿yó;:½M˜ôN:`tµKjÉ!àÆÊ×;LW5y˜{Ùɳ—¸UöLbÊ„éšé—hËe[Û Ù˜§éýðÆ!U «p#[8G”OPÞ˜OõøL¡¤Py¾^;'?&BÀ¾p0Dˆ‹æ$ç×áĺ>ëæ~c#âUMÒ~ÉCš£ó±>U$ÄHŠ!´e/Ÿ×Öï~çž§õ¯gFcÊCjíëÂß9|.H†•ŠgèÀpk´*M^©ß#±é‡òQPÕô0 ìÊe32|¦ffffffo©Û³7énÝ™™™™xìÌÌÆ1†„)Œg4)ŒcTqÕLÎ8F%~®úÖџ˺e”’hCÐ’æakC $’T¨÷^÷ž6=8qëï>·§°=ÝÀ<Ã.ãé}=€øwÙ´*ÿJµ‘Pú«(è<Òþ5pîᇉ_zqü<þ¯Ae·ü*â)©ùØ~rnIÂoðîBdÌžQƒ„„Q'åõ«ð¡º¤$’I"ë ’*Ë„+êD“$ÿnxTÔIßß½.ƒÆ‰ˆò²L±˜<_wswêy¼è/¤ŸÓ-vÅ»A“$Ý^HuÖ¾iæ@-DÊð Ü5‘É0“†Üa'ŒÇQLæ ngKË·ŠÒТÎ:Áa$@-¢Z/˜¬\ù;”ùÒ=Ò¹‘׊áò«Ô„“¤ÆîÁë §Ï´m><»Qäͼ:BüD=&²tñ·=!¹aÖg½_*ö‡yç8Ýœtˆây O•<07hS"¶”£•*ñrm)b‘Ps4˜èu¯b»ÌgÎ)…ŽbªS’—Á”¢,˜]3HÆFÍ+QòzÆQiÕ²H&ÏÇ¥Üô;Éáðµ–î}þk}=qâãx¸/Ã{íK>Sy§sð5ÄÓ«`WÓfÞZ‡Ae•Ž“ê¿L/³Ægd\4É à íãÅL-RJÙ%ÇC¡ .F$¤ˆõTp”íqKwö~/O‰¯~}2<Ûá¡îU×¢eôë +Ú}Ö¡om¶âÜ­Z‰½ zŠØYTU­y‘§€éåØÙ¢*¼ “[žéç±Ùl}Qè«1…DµC¬¤óš9Ï'¦™èXvE*9XÖ‘ï’@vëfSJÂIYÊ©nÌ,yþòÖµêgZµ…"Æv¦¨=û’4G8eJ'%R°fÞ‹®¬‚•,êõïjÐl`‡+ÓÓTI”3]–ÆÖ¿<¢ŠN¨=EL “«¯4HúÚÁJ»mŽHâÜ*߯‘ÙÜYñwtãÚ-òË–öÉ-)Æg¯ÇT'Œ€üÌAi>ÄÌЯ'ù“#åfBø]‹4[ñÆò8X‰K:[Ž¡T•F‚µÆ+Z•&TÏ.¶—‰Qr0ÊÄ÷q¬nD‚•ØÓ+e©•®Hß$Q“¹äyݭݪ†ÂgÚÙ±Û3á)Éåçy¹àÖ‰§ƒo±ƒ>7¸‰^^ú.®µ‚Ð~:ý(?i™îóN=úî÷Þº{q" ¶MC¦©p€&æ>að"í«>¿ÆNh?å'kªŠÑÜ)UcÊÝFæä}½Î·TÆj|Ôm?a~ðõüãGõÐü_aòI >UUJc!!†V@’¥U©b,¬V)j¡*‚* RÄ’ à·i{ï™ñ=VÓ›Án9hìÕ^˜_/'ÅÃâiÚ·±q´××èÛ³Áóô’Ì7=Ás!d_cs "fCÛQH"¯öóŠ ®¯<û×»V–>„©÷š>€ó OÙÞoØ_ËBûIÌ»pjjûZ Ï ~#«Ci%Œ"ÑÙ¶ÝÛp Á‘$_Ø{ß‘ùQþ¿ÚoËúŸ— ~×ÚwÙü¯´ßv–¦-W_éúü8?.y¦ªª¿2ªîù`›~¢–Æi1â–Ûmki¦#Þ÷½õaÃ…øpá•õUE5a­÷p"zžú'¶×>ÎÞ»ü¿§V e˜o6¦¥íIµ5fÍ›3fª+÷5u5! šKÊxNñôŠL‡¼| Ÿ®§ÇõY:j‚yÊŸ¯ö¯ùŸ¹_ä~•õ®_ì~uéáéE ±ý}UuñüîßÚ?ì8‹fïKXŽÝS-n‘ÒµÊå¶k’Ö­YSå¹e5FºbÏ=_ïú©òçë;§­Bõëãú¾«õ5®)¢?‹Èx8‘¼wä`¡Î?dh„&¡úàú‡ÛŠ´+­ IfôüÈ Ë ˜øÇÛx¾B‚†´@ý¹Ž¯ÁÆåï{ôˆ¡°U>8€*€ÒDßÇ'xñx›ÅE{Þ=ï§Ñædô|søæšª©£S®\Ì|CàÑ^ô¸û¿?œ²­°‚Ø«\7ú8ûÿhÄË»·"'<P˜Aô’>Aš a;ÐÛ ê=ESz&½Ï’¿@ … Ž&¯åá#«ï:Þyvg}L3®RXbQDûîöÎ 6}8xzïDrƒÕú8µ+K§SS¯lÄ_ü_Ö™+‘L†÷~sÔÃì](YÓàÀòRT>ÛùÝÏÃæ}>å|½µÞûfƒEý™2_çcËçòsùÛt9>ÄÛƒ›ÑÏïsËúx…ßY~ÏHVÙÙ‰C;6‹sÜé|Þ€ìÛ—IOIouLàh:¢D#Ã…p0‰éŠ“PÆqæM®®ÂŠj˜òÑä}/Cêpœ7c«í7cMÎÊáÍþ+³¢¹+:!À¤€¤ÑHÍL 9%Á‡ jh‡WQpÕލn1SƒÍ¦ß5àùÕöD¨#ëŸ y]ú”åÝ©»d T2§&%sb¬˜ùØ©ý¿÷xzx*7¼©Šä«VU‹õLNŒ Àçª9£­Ü+ó[xñ‡NRYz®Þ¥ ‚Š(—J­¨I.¯Uw›±èáê—%«© ‹ÖõÉ µDK.JÅÊÚÍ¿·ÝÁ. ³ØïZ‘K ,¬QÈ—ÐòµÇ¡TÄ8yŠ9ü«15Ê ºœ§;Æîîå@ŠY$‘*ÉJ 1ê `y'?X<Ò®§Žy_Ó’xe\¢ßת~Ý?<8h,5éXó7?o¦j1dÔì}²ó:QãÏéTÀêŠbñ_ý'  û_Ñu0$OSNµD;?=EgGš:‡$:mzØâo“ÓY:õHЇE@ØM’‹ãw“de;‚«SËn^çŽQ2È ¡¤¨‡„ÌnÆBF›«GMÚ‰£hµk‰&MѤeª—vèÚ&˜US"Ø^n)¬K ŸYiÉ7M}ƒƒ-²ìaˆ²QõËV–Éd©Ê¦¶¹LAp–u!¤Á.¸ÚH4ˆÝ [””QŒlXXE¦òf9uŒFªqÄ>˜å¸œ„ÿ.eÞ&ù[{wwyÑ$’I$’Q $’I$’I$’[¹™™‹u$·ww3#fe$’I$’I$’I$’Ks3.Ö-ÝÔ’I'}»º¯Ÿ½²Ç˜x³ö¬ìвò÷?ÔÖÿÄÿ*È?¬ò¨î^e,3„¿äˆÔ/ú#Bö¸ïï/_¡ú #¡ûkËÀ7Ï_ë\…ÿ ÿÈ·» Üª«Ó_íÚßà[û\`ßáZÖòïçg¯øý¹pnÊõ—qk\”Jÿ]~¢ñ¬VÌL·ÖÅ­m_¬¶émn®{^°×q`¶/ÖZ¤ë‘gY+iY—ÿ5ÿ*äêƒ^ã—½ç¹Ê¼÷÷¾GnjtF&=ŽñFš9V‡ÑE¢§|í…?uÞi¾ïHü+kõÕ–þûÖtm½=3`û1ç4ŸÏn}WA¯Þ‹‚Il~5/9”‹‰šS奨T‚ÕE)¾ÈOêkµÙjÕ«KñÒZí )L5Pæ–ฅ\g‰jšo‰1YJÊRÉ"‘"*jPÈŒ`"0O Ì¶ŽŽ&œQ–ImUÌd–É+(ݲÒß/ëºòÉ-µ¬©Y$‘X1`±Q—ƒûò$@T⪊SumQ—+ªiùᲂ‰L&½…Rš’¥WïèZ€¯÷®ûÅN*]âI•BÀ„Bïð!ݽ;â?VþnŸÁüïÏ›ƒŽÜ5×_óñÎj¬4Šcõñ⣎¾>]¿^þ×lÝàékÛªsÚ25ô·elðA.MZ´]eošRå3Õé‹A¢ E@â=¡>¬P¿ììY÷ö©o@ƒ#!ýÔp(ddû,´B&Š#ñ…Uj‘þ_û?Óùõ¼np¨ªªQ_ôŽŽšã[¸«üÙ^5i³ÎÄj"‡Ïä,^húÎMá£F›)am5I4ܱ#ØÓ”ØäŸæ˜ÛÆÞaÞÛNÏ?ò*$*kÖÏ`ýYy8ॢ8ˆˆˆˆ¢)JZ""8H”¥ ƒÐ&RŠ#C‡ï6l»)Á£TEÐH”qDQEM¥D„DDDÑ QM´GG“F†”¥Dq¥)i¡4htSfeDQ”§Ô)M Š"ˆ›$)Jˆ› JRÒŠ"ˆ¢(Š"ˆ‰¢–ˆè”£L¥*"ˆÒRŠ"ˆ¢B ¬ÐèТ(Š"ˆ¢($ R¢(Š#JR¢Bˆ¢Q¦‚–ˆ¢(‰¢B”¨Š#JRˆˆˆ¢(Š"ˆ¢% J(Š"ˆ¢(Š"ˆ¢(Š"ˆÒRš-(¢(Š"ˆ¢(ŽŠR¢Bˆ¢(Š$ ¢(Š"ˆˆŠ"ˆ¢)¢–ˆ¢(Š"ˆ¢:%(ˆˆ"(Š"ˆ¢(Š"ˆÒRŠ# ”£ ”¢ˆˆ”´¢ˆ¢4”£I J(š-(蔢ˆÐ”¢ˆ¢R”£IJ(ˆˆ¢4„ R¢""ˆ¢4”Ñ¢Ñ)¬˜š*#pGFŠTF’”Q”i)F’¥F„Ö>¯Wu×y<¼»Ê%êÑ£F“ $$$$& )J"(Š"ˆ¢:$$%(¦Œ¥¢:%(¢(Š"ˆ¢(ŽÙ€úÈfpP4B Áz÷§SD&ÊRÒˆq“:ÌÙ!6lQDhB”QEÞ@™åÛ©¢©’¥K6-6›h±´ kO’nÖ“ZŠ”¦ÌÄ7dt«¨ÊoÕy6F7g%â) ˃ӷԹdÖf¾‡%á®(~…CçžøäÌ3/ €' ý_Nç]N€H‘V@DF”ØÏšX®ÖÚÆµ}ÛR#þŸÞï®·îvÔT£÷èó—ôáÒëÔéZÖý'·äŒ”Šå7FTã³ç½ëS|z ] àI+Îwü•ønl‘Û»–æ K–æÅÎd¸k‰Ýöž\Ôss/;[³býsW"Ðó¹F§%;¹ŽÕâ¹\æ6@ó®ñ_ŠøVøZü¥@ACi»-¿Á{鬜ñ陞#œLãt4…x¼?Oö¿°ÑýVæîk dGùKnfM,!s‡µ™¼¬û›jÆÉ1¿]ð OìZÆNIœLH#!¹˜L¯H‰Óø±j+C.$djÅ&d’Ã4eªc2ÛiEˆÍµv«V¸išŽ2gUƶÝôÜoÜkÖ7M´n—-tÛºI‡Øv< ñø¿súÇ<ÓB!ü-YtFÓ˜:wÐ:ðV1ˆ~™ãà<éážU~™ó´ô}›þ†Ý¾„ qÙåÃñwgÌ8Ú2®háçwÍüÎ/ÕþF±®{ZMn^s£ëxrþîÉ¿|ÁrûÊ× ˜c©·b/¸5ÕS–,jy6Õ2Fò×öáw£Th}:º²I!–L7é‰bÊ,ÖLïõhgÒÌÝ·L¢™ER‰d©Ý¸^ÃÕs,ë=þ{tº,«—}\æ$¸¶/ËP“8…ÙP5×¹Cjµä»±×ýíWá~^(_•q“´©…`_qsr ²ý<2jÑ$Tþ¦¥×qzFiœhµqÔÜÛ®ðIÓ|ÇÞy¾;w«UO(Z‰EDQyqü ëL àTQ4ÔZ[ôý›µþu›£lÁ*M@òÒ—µ¾-žž½iÝå浑{݈à<¬©(L£çn÷ª÷Ž0£ÅÝ=(SèØÎþüŸÃÅ  cÀ…U9U°òjøoQ¯ìÆ0ô¶'Âvåèw‚I9ít=1]%òmÕR\[½2Ý’K$u2ȳ*'—[%‚§eC‚†&0[=p&ÎÂäs“?-ú¤‡9J+jך²ábõ‘•óUäìeÁ®z Ù/vU„aì´«àö¾¡‰ Ÿ`ûGÄáëiMLO¥Ç{A[ÛÇE lÉ{¼×ãP®&²hO ¬{âÒäfqÁyóR˜x7|xc íÌÞJðÆÍI­¶^ÏUÚü›ziÖèÞqÞ”]o›¸£ß­øà8“i³`ÚžéÁ·¢J dÝÁrO%šU¿¢º_tCsý-®ûðLÊ´Ód£³²è¾C_ÔÉUt’ß½/±^çŸ1DúâÙÚ”{3:Þ–^>.¤•©ÚÃÝYÒþ¯©¶vó÷áv©¥®]LðM“»T8Ã2;ËÎýéÁ˜†Do"‡;¿—Kò‹*Jv”SºîÑËß°ÀOSÓìõOFg’›b(jŠÃçzÞì³ÅÝ¡m¿6ű;ýúG¯¤¼ ¢û¼¥Ãb½$>éÃ~fF¿‚LæPžàh’HI>šÀù‘(Šyo!òv¦™äåUO,*56æ­åoSÌ“±6ê$~Ëÿ׫Úó¯o;齄‹ñ; $‡=»g­ë†pYçóƒYf#0—•TTf{Ÿ[ŸfqM‹´¡¸óSãZëÏÖäìµlüî1ø[©H+à“迸ÿ€Q#Ó¥Q¾¯Ä}ï“ðïªå“Ê’ì ‚"AdWZyrÏ…8ûÿM~Þa!žMTm]ò`_¨«ã~ "aiâŒÏIVßâ̱U÷¤ùUƒ{Ù‘ùµ‚´eþw§&|_±ùAÁ÷iPd<.¦¦°„$ÈÁ`ÀSµÎs³®vë§3®øù×G ©Nè¹!“;«Îyê·f$Ì&aRC) 꺛Ûó6êv8à…ËÒ.Xñ~½+ÏOzõµø çÆ=u‰á„‘9˜É “?+l² ¸Ø`ŠX k`Sy/@©xÊ*I —Š=~vÜ³Îæö5— ÜDP|š´]^lB=§»bÎý?9µ%ãð¬Œîbèu©!{¥ë{9ÃÇobÕ—£â"ç¾L¬ègyL2yM2Ê,×™ÆÙ´¦)=©½\ý͇S“JÀ3³il’ ?•§±ž^éÜn¦–¼_ÞmãXî‘Ü 0«Â±ãÞænwc(¯æÆš–ˆ¦ýÖ™ù`üþ-ß9Ðäêͱ8틬é%rÅŸ¨¥ÉãŽm}Îä8“Êõ\ª,ÖÜÚ†ºØ¸ü™mh=7Ž7[YÅRÈ©¾¡2“¨ªOªi\´ËTH)FUßYºµ‹ÞmŽ©FÝ¥¸fô¶qÔ]ä¥qñVæsŽ·C+9Q—LhŠMÄà;ŽÀL¦Ü5¥®¬ñå52GÍÄ“6H‰óþuó §3NØf),ƒ9–K;½4Íå>C£Xš¤fEž.Ýb ¿[_R;$ᢧc–IgéMäŒ0¹«Z«¡í]4ÂÀõ,E™UJ–M†5gH¸ÖTk#(û÷ûüì‹Ì+~¶Àæ YÚm·…õæ™5ÀÜ+'5·•TÉÏšlÐóTmë§ß]õÚñjd{uÄ‚ô¡cØÀÙÞjd{±OƒËN-pžF+m‰ìÞ:лMů‘®ãj3þ…‚ ¨œþ&0[Á‹~*› *¹U  œ÷$TÂybtÐ>uDCÕçO?$t½Ÿf(´w mÒOBy9h§‰ïW7Iû¸0ÕoKm p(¼ÕÉÎàƒÕV¶s±Ççë\"=ÿïVÿ}¯Í.Ö¶B{óÚÕ™húTurO¡QPÊCÎMM(z?aAÅϽ…›S¡0$8™®RjÓ§ – ù–I‡0éDäQoÃ4pdI9 Àt¸ùP3œrỨ¦þÜö¶ÎdqÏ×±`´—Å=V¨×z{ŒûÞ §|Sbä¡Û ŽQUi¡‹-ƒ°­Š‘R ËZ„W/«ÔïKÈ/m]),r瑩·9‡sO33Š&põKñ‘g©Ÿ çg­±¿ÆíµWl„«=×ñò€Ì¨*Ñc-LÑlEQ½ïÂãáIÙoO²û¯›ÏÙû¤ñ-̤Ö¡â¹°ÜU[µÙ ãOoÌßá¿‹€U@D@”æK'£„†m]÷ÛÇH/–¾qDå¡ziPve#ÂûÉÕÕŸ±êù=ŸæwI;û¬ÜKC‘ƒ—·ÒÛV»½‹h»ñŽ¬Ý•¯ÁÌž÷¢­­X÷#6[€årø·(z¬†¢úd™ãWèMŠÚ¡F†Ç“—©Üq†8“|ÿÝqÏîø‡&ËxÜEH+s"vvévn3‹M*š¦.QÒòŸÆ¡äYógÙ|û¤lî[ÝšdÄk¢×U4]²£e2·W‚ ¶]œû\»ÕKnù+y#mzÎ|Ëí\hâŸ&nµÃÎÞóÉìº/qrKÚÍg_5a‡?Õ»¹]+¼ñ†\þ|ÚÝ6MÏ „ˆºíÅçlpgŸ“ç“&´ûùµÛÓTÖžaÞƒÎ'n*DèÚÈå|pB·jwvüs᎙J£Ì9mv®K:dΤž¾Û¥T³Cw7C*•­dÙžœYø0eïvlMåæPþZ®ÌÔ±7K‹ž6½>J^ý­Ã?naÃ]™JÊn`ÌþwR{Lºï7WÀî®Ûmí]»nÜ³ÐÆÔÕèšrFå­´¼»l{ôš LýtÜQ5‰õî;9ÅO…6oî’O6’¼ï»™´u4f¾f×½q“¢âÅu^PŽ-Ž¿[Ñ6ˆˆt…E1ñÎ…ODD\Ú½ß0·‹Rê̼DY9aÜ«¬ŽÕÀÒé»ÎW9û{Ã6G¯¹š1ãLÉË‚œtd\j>ùmYØ×U×Wä–Õ—GÊkVõV|l nI*Â’R¸¯cvE…=ÍM/æGF½*:ÛG…AÈXóQ ŒÙ®kû Ír<æRÉ#)¬¶¯Û].y‡›;¨ES‰T^¾41©ÜÊoÔ0k¥åsš¶N†]Ø“½v-ºöUŒèš´tˆÆÎ75«ïf“Ûç¤0]Tó£«ÕŠKÇ5ùq ‡’Kqy†În^Ï>uW}7êkÇ̽fŠ5ø2»§yöóz6ó”ÛK§_R™™ùÖz¯š’¦¢Ã L/gaŸÑ£¿’SdÄIÂ= û¬ù•Êm)ªyµ¸Þ‘ ¸¨«™uˆ.\à¦ÅŒ¼va{YœY¥¶)÷uá†{zÍP·šY5ˆ*ÞõªjåÓq6u× Ú‹xîMŸ\É:Üãg*Ï-†5z uŒöYzvÝ·+Ó= >´Ã²]¼gVë Œ£…¢8Áa©´·w+™ÇRš5¥Jf7í²øò*еóõ[ã.·'€Í1«Y‹b&‰HþE§]¦È™‡K)Ý.n\‘å¼xñç\ ²[iw3ô—aLbÚ)(±de½×vmÓžé7˜¥ÕÀ–.ܘp_ƒ™e”ðÌì/ÉCõ[KU;È*½o¸C±º/ræ¹Î—2кšÚ˜à«Ä©,VóªÅ|vF[Š‘p¢¹“öžé烰 RÚ÷¹ÍÃÄœ2Ûj“%É)Þ»Ìñ\†¬.¸.ÚØQêëY⣘]ˆèižÁ$Ê­dVç‘^ýX™ºeèlc»ºÿ  ÇÚã2ÑŠJHù—^œÖg®dò–’äG;>,1\Û{8# §¦œî-†.'8Ãv8×MWNl°$IZ‡883vbm¬v¼ÿO?–\:“ÞY!¥ù —ºš%¼íèÇ·Š8ùÏÎ@ez·æ¹•’¸;ESÓ'GbB3²œ)£;©Š[ óOVÝ=i:ʘvç71vãíQ#G+¸È€Ê*ÈϽ;Š5#žIµNŸU‰ka/ºêÉsëZe›´-³¶UrÍõ毟Ö…$‘XY;%š5ÑVÅN†-ùᎴfæíªÌ£ÔË™‡(˜Ÿ+¢²4²ÂXÖÀ—Mß;ZÓ¥›%µÖÊõ1ŠnåkH2EwÐirv5&Ö«L¸ ÅéÌ™ªÉrCÉ òËώżË.W\ £Rg—ŸT_.ûv¨¢ªo\l•`[ò9Õ­t eÌ·V‰j{äÄ÷>ô›9 ›ö4(‘ÌZ×]އ»¥¢¦ëT•f¡“JßËÁ®ózö‰ðCÞ7︯ÇJ²c•ÈêJ 'Á–B«ú®Ô±´Ó¬é×VÛ×jŒPlçéi-CÛy‘€sÆ 8ï~=G©ñÚÅCÎkÞ“õe~NÌòÑ4öÉ’}Ì·_Á;H*d\WgX-ö<›~·Ev¥0ÁŸ#R[xrmU[´Ñ©t¤H1k‹ó$‹iÛ%Jø´½/(·V¦òð‡%p÷ ýåéâèpô‘&Pâ•K›Œ,TðÀ¾ÍýKšð8NÞIô5¦¤¨T‘©P(’ JjžÙ¾”a9]Ñ"ÀÐÅ‘€QŸ{‘Ëc ##ɪS=Èñ©‡PÃÕíu$ðfÍ=VïlÚMÝ6Û[fÚ]*ª‹ôk?‘ÏÏ(”u¦«WìxŽïÜ’K‡ñ,=òþâ28,,Ñ2ö\¢æÂ3O$ÂOÂ¥&¡dñÕás¦ÝËI ±=„²D–m‡aëÔªbXv‡×§7pß®š™ag«Cjn»…™8P/ªŒ!ª5•&ËÈÚÇ’TèƒRún–ÕZ ÁêœC¬“¬ïcÅñ¶gLÒávïMóX"(ѳ„˜,*\1dô\í ¦à# q¬ÉÁ$uZƒ]‘µvåõQ} I<³UÞÀ}pWŠBH›ç./S ýïxm|$Œ‘$oâ|ëä„$Y$[™c3Ù>¿Ÿ$Ï9! "HÂHÏN#ßšoêžø F];fs¼`>ÚY™Ÿ Â{¾òÆ¢Â"e–B¤$’¦Q³UEa˲òÆžƒP,&=|Ï5¬÷2QëjIèÙ} Üq‡ ìø¯d/±k]eA°q$«<^vY÷Œ¡0:¬°¡hò¹¨…ÍVJUVêJçJ¨±hŸ=ßc£âIðI3K%¯H†ÙÙl× Q)¯‘§nþÜëƒF옟Žuž†Î×3 l¾7%T+1 σbŒ„ûãæx:Úñôè’êÌÎÄåxbç—’D‘'æ¹Úƒ9Ò33·9^Eñ^§ñà¨Ó;µÐnšSEʼ6¼F-æxBk"òSÞLÀ£¡“ÓƒB‰*Éœ.ê¼ýºëzN²TJ'„Ù+Íy Ðö»~çÇòBÁæs9j†‡o­íÈ„»¥­ÎK§+#ºyS¬b¥5L}Õ²ï-ÆØ¯®/ÇA¸°˜U%ž&̘ì‡>I‹«fBI6Å2Žˆ{ »† ÅI>.ü/Μu³>ä½9è?™ûòç&üÉ1¡9«ps"`®êé„yACt×êóµdKG’=¨—Ÿ]¨V»åäñ}3¼xš»ºë†/¡]¹Ôr…`œÜžŽóW0zì§Š² Ÿg@6Ä#UH‚ #ŠãûRc\r8Ú¶Zª¶­z;í¨x<]Ïš~gsÖüoÀ'ó\Ÿ¸§çJ¥bžçUëÿZÒêÌÖmàÛoU]•]®ŸÃvóflÉ“&L’¬«4³2£Pß4Ñ2,̆JíÛwvæL™7kÏ7›õ]vLÌ–õÚëkÛÎÞ2dÉ“&L™ºö¬Õ¢B¤‹§‚2 È /~“åJ„mõ± ¼æQBœ=ºa7B¡¡ q:ld ºøéùp[@~Mð?3„·ñ~ÐÀyÏIïx“š´nnzM‘û††&ŠrRU)Ö¥¿sû_â?οèSýõÿgÔ~&¬™Öx/û¯?{­yè{…™Y茻èZlç ˘±ŸÇ0±ûºÈq ÷£òMQg)=9T+ˬû‚À¦¬ùW¯@`’pcÿ#ðO\¿ý™Qzâˆ'žð` Ø,XÄé‹ÅMp‘•Fü×â¾AúXl—†³Y˜ßKv s„$;†E~û¤Ò´yÝþ,óK>WŽC¾Ë[ßÅOÍÎÖ³E3Q3¥‹šP'À«…QÅò!ÞÃ)>švãvGü­óSÞÝ–Åë|¯¬Ú×JµXxÝûmzaœ²ëÚšzÉ÷LbbªÅ1T©‰…F)^ûýhjGõßSsç–ÄšNl1O/ vTèÃbׇ\Y_-lAH@N:sõú/Ú¿&šù%%nÊÖÅýBÚzÉ<Œù7ã<[ÿ5ù­qPÊ^W‚¥Êµ•\pØ„bi¦?Æ”Èlƒ¨z9šàëüPÉØ‹Ç¬-X9¡6óš‹B c¿6y¬º¼0ò\ É$Ìì ô‘Ýo©ÐgÆ7–ݳkìÌûüúÜí­üÉñâpoL§*ZÚI™šðUŠñ_"½ê‡Â”Õj#?ö6†¬d—šDÞŒÐjŸøãfÊÓç­¢œ8nW?ñÖHüfÍ™Å+ô‰IU9©ŠU0¥cV)_·X¥vp˜hP/2aá6ð]>ÙÄ ãÌ„ÆzS“Ïêµú®æN0¥J§ý'SXØ#Å´0máº1¼@Q¬_"~H 1! 83qs"~Q91‚f çå‘"@bŠ(mÅD©G¢±2½•'ÑϪûíOœùû &ÙÏ¿a_Ü~ã'ï*œŒ0Æ?HSÅ=eß¶c:†Ñ°uÇ”&›ø†4ñtŒýšvŠ×b»úÎßväÄçàÛ¿¹Ø›Ø ß6äAŸµ‡wöuŸf÷ÈpIЧË&eÒ¯sØ(phài<ÊzéêñÑÜÝsÂŽ#rbaç®ÝøìMìo›r ÏŒ0èÆä$¸ÑúƒÀyQ”í™Ã¼b& •-ÏU•’ä&v¤à0ŠbK¼<Ò<é½{s£­õ†ëÈvéèý9¶Ìåþåvw©ß# íæµÈ;ÜŽÍåqG´ýcÓ3<@‚-æ,Ù™¸g ÐàäÜòpÙ¡Üpänbyžg““›‡Øææx)§¦íØäðw+fÊèÇçvviõ¸x´bŸZ9ïs†ÅSŒsy9z÷Ç%Ö½hN¯r:¥<Í”æzt"¹1¨p–;Ì9Ÿb¸4‰ÑàK›wB½à{ï¡Ô›ªpô½)§™àa¹à“M;ù°™ì#ƒÁÞ䇰$ló½hÝ6M”Äöµá^I»57W±Ìòuy›œžu'VgVÇìû%ÃEv{ÌtW"·C±»áy4Ýï6Uleœ½þ½:¹6Ôfw¤à0ŠbK.iwÓÇ::ßXj¨ B‰®¥SJ=šK¾lôƒ¤z:¢n¢£0¢ZÉIa>ã½þåùí(Wß`Å1XWߦ;ë¶SRªéU+LI!&1X1LR%iTÇåw‹³r•ï&1ýâ)„Uta×GêýÞÿ“ŸÌ·LÿK\<„}ÕB N¬I1Hw¨L(¬ncEF‘OÂÄŠ©%Tã}§ÔÆ>Óêiþ6Çäi³í+…i³f&›˜ÙÙ_ò¹¹>¾ôˆóžûòT= yÍ4SƒfŠŸ€þ#ø÷»|Çñ>/¥ßá•Õÿ~ ãI÷déµ3aßøPò§~d=ðÙª*úlq»Ëä²àûòŒ?úÑ^æf˜ÁiŠPD˜£¤ ŠÕgÖÙV'´©×ËÏô/ö¿Äv*JáòœØ§sf4²<ÖÒ·LiSb”¡†R¹ 0²ÖZ–µøTú‚­|åÁ9Yãøþg ÂPá½Ã¶b•[ªT¢©XÛwö4æáŽãþ6Í÷éþtD„9+KÍ?ßrÿ'£“]ü‘îý67Q¿Ÿ’4K‘vQ»Ù(í—Ï2ëoæÐXƒnOPãóWÓ6èߣþ7™‰³ÞUUUbyÒ“éTùé¯r`bQr…wÕø7ÌuýLJªwîç}ïÏÿ‘ÍÙ̓ÀV;žÕ¶êFꪓ^Š7ª*s—÷€¢Úd{”|g'Ҫ৘¢û¿Sý²çýÞÿþ¸áèsvä«ïmfûW~çKŠÎœ¶YH§ÚhN@·vçsîe•;7BÝ[è"ª"­±mþþWòÿ«í×z¸¥Wø¯ÆÿôΙ|*"¥Pw»»Ÿ…Ëôb*¥>[Ö_i‡O/Ùi6¨— ÁMï«=âÄfz„ÿ9§,÷rÏ ‰ÙDYÛ9ŒÌ@Ä0™áò)Œ¡wß{ÞÌÊž§ï>vŸvI'5K Š HžÈ£ˆ²P`<³qÆ’bbƒlx8q`¡æ#Ì;0BÁõx4™\Ï<ÌÏò–f)ž÷Í4Í„=­Ê…¸K&† ˜+.’™ÖAâÒÂxÅ.ŸK±æX„÷÷³2¦ Xq_’K€¶—&G'ÃežÆÖÿ¯ç‡ÑCuÒH÷_AI¨ÀÃj‚FØÁ¹XÇ™_ UZÓâGób¤ÝSâk0hâ †èz„„á§AQ ˜i8(oJ ãTqp°jù³Æ82/@œ¼o”8pL8ÐX)t×  Ç„‡¸!9Ê>ñ—Ê–0°5ÇWžÞÑÿJ¯æŸtvîpÝ*,ƒ! ¾i9†I]k¿·Ôe'Ìä \,-k†IƒT@o½ñ¬uC¬›Ú¾nþCÊív¥ëêb§Àß÷»{Ú¹Çvæ÷½Ì϶®F›näÛ~?6šf>h<„Ã~úüèÉo•ܸfðtl÷l-¯Îó_éÜ粎½û¿ œ ñÕQª©?QU‰JEOé1þÕûø†É¦éº•7ûÏáóŸà„ë$,‘ý¶lßœîtPv=b¤öHÔL ÍÇÆ4‹k¬ÈÈîØD±lõ1Søë@Ÿq¨Õû<ÃŒ÷`·¸õK˃$U?ɘb–bY*µe[@Z „ˆ%¢ÔN`§Ûú]@ÐÌÉóƒ!^CÄä ?v.3ᶦ?Z#äIBpôöÉØ4ë¡à.¡Ì$HwG‚幪´ýÕsx¸uw]s{í›8S“ú$¤…'\!…ôñÜöPˆy¦ù1tx)5!ƒ²k?¸ýy‘þïþÖ?åcþV?ñ1ÿ+ò±úÌ~³¬Çë1úÌ~³Äcõ˜ýf?YõXÿ¾Çþ&?ŠÇùl¬ÁúÌÈÇóXÿ…ç1ÿ ô1ÿ¬Çþ–?YþÓCþF? Çû ÆÇülÆÇüŒ9Öcü&?YÖcýö?Yóßñ4?AùØýf?YÖcõŸä4ýF?ó±ÿ™üìÆÇÝ=Óç#â„ú‡ûÇ÷Ïøu>‰o¢Ã>‰ó·ç˜Éû´îÓꦴؖH–O¦Ÿx˜&)÷ƒˆÙ1²Y?!1K¥Ó¤ºUÇ‚`˜¦ ‚Y,–K%%[D¤ºY.?°>¡¼ LŸ¨âøæ>Išc"Q9*šùDòþèœúû%A¬|Úª L”›R )üsçŒPVHDLGúÔ…¤æ2CP þAx¼XN~9üOä“‘2…‡þã !º_5«¸_¸T_PÅ(• óàVi%kì*Ç‘8Béxq€”bðáÄ“ŽGÁSE¥Ãë•’\IN%„ƒˆ5…(>‘¤"NÊ1º(P<›zñ)Æ^-.(ñRqKäOÎxŸñŠr-3ŒN@:ÎåyÀòàⳘ19P¤E/šÆ2çᤨÅaY1¼H4HŒ0DHG°tqJŽ/ e-% kƒ àÐÖ;'1¼Nmæcð”¶ÀO=ýÈQþÌÞÅK$^JzÐù§õL.[Êaè@DZärfoÏ)ýM¸± à‘òcM¶ñˆeNýÇ÷c´ 7p[õãÅOJÌ9’›Y¥žÂQÒ%Ž>¾Ô=²îTå¢XE”´³çÖCE °dåŸôýŸm¾gßûýçsˆãŠ PDTOÈ °N§Eûâÿ жÍñ¤l…w܉J¨ý• B _Ë ±DŠ¢BDvÁZ„ˆ²æ«øàg‘ß9gñý ÀÔÀ†!Ñg§³M>¢œ=´ÓètlªÙ³árcg' ¶)U͇įѳMÛ9±ÍÕÍ¢É91brƒlœ‰aäÄÄG”''3“‰: ŽG"„Ž£‘Èà!ABÂ!«›:91ÜÇW{UÉÙ§s£wFí4ᢞ%6Sbl¥4R›)²›bhM‹†ïÎjÙ;4äñrnñsw*©ÍÍÕ¦šað¹»ÜÝî¯s†Ï“ªx*«’¼•ЬcÞ,x1M+›½º|G½ðÉ|åöäB±²²jű#–ÿŸ™–.bOq&!p+éOcíÄÿIT®´S¬"‰ÙX"Xã^åÆ!ðà“ü×ÿÞ¿ñ6!ŵ!JJüÌ1UŒI—Ò¬uaŒbb¡Š×üLI¥>Óvÿï°äáÃN*ãIMbÉ– UW`©H ˆˆA 2þå Þƒ·&“Ì­ù}&µ‰?ÒóHyÝÿsè}ŠùŠÇÇÿpÓì#JM‘õ&+³OµOŒ$+MÛª¢cþ)³I[#“wÛOú%Q£¹É÷U§é]OÕL>ÅvbS³Ç‘™ ”QÔ#r —GÀCa<KîPÞX ^?ŽXpóŸÂý‘ƒÉâÝO0¾@m<òê> kXõа¸©P;D‡Ÿ££ó‘<;4’TDñzØê  ¥Ên~£Gî¼ìHùÝì7Õ¿›á¶­·ÇÍ Õ§4~„=Æ'Øø=Fq÷ã>ŽŸÝ°$êkßÒG¯ÿO{ÔñŸÁDK%²*H«±KZ”¦S”¥2ˆÂc6Yf¤”©6DSRÙcL¶4QI©›FÅ“fl–-3-M–Œ©–YR‰SMšfI¶Yif̵ET¶È´VÕŠ+Z$–’㢫qˆ¨wûŒÛ¨I?‰Q¼Ljô 5›'¾§ÖW±M:0œ¶;š>"4ó7'_b¿ˆ¨ý*;ÙXCÙC½¦Èì:·{êÙ&a,ÄMÍÐÙÉVÛÛÞÝ• Ý+“ö[·7V,Ä—†(1ïoé‹m©±äè~8Üæ’±ÜñLîf!ÔY’ÎLokË^ù;Io‡Å«Ý}zRXN‰¹»UIEÜx8c¹Ž #vÈp¥IS³v#Z¶éÙ6L{ Žg)ê§#cð<’'Õ#©'ßî‹áñífk˜d9Ö\ÓÌt A4E4 V¥5!©ÔjÕ«V­Zh¦ƒ¢ƒ¢hš)¢èº.€h†Šhº¢t: èèNè'H Ñ:§@hŽz@4CCMÐ D4CAç$œsˆŽaÎ'a<äó…<ÄÒJô„óz-ºðµm[paýÔ›0Ðe{­»‡•õxRDR^­¾K%²Úõ)}‰_%}0 µ¶ 3j­m°Y#diS³›šñÂ;ÐáíäDÇ´÷˜hU?}Žûêž&‘ÀêžMšwþLÚÜ*kà^ôáÐ4k5ê#qÀtŽ´¸ìGQ9 uUn7h#+š¶läúÕˆ:v¶ÕÁ<‡ŸÑjZ"*ÄJ’QØÙ(åÚÝ1*e™JTe™Sª¤ˆHæÆïÑñ6z“ø ÃèšbEM=æŒz’<Ïœë|*Ç“L>WÂÆ1ñ¹¿ ™ ^µV¾ÄÄÄÃùºŽ®ÈLUUURRNNNOUU?fºì²Ë,,,'®ºë±Õ•ÕUUR¢¢’j(td£w‚‡£–KE»D´Q=H¥eEEUUT•UUUTE****ª¶4ÓM/AA]p–#FšH—IZG\¦ëÊç®rbb¸pÅÊš«+žJ'®‹”ÓMÊ颖‹#1rí¯) MMRé8Ã[zþ:gè·O¦UvÀ•/[mÇ5Cš¹à ʪáTWIÜ¿-°ÆŠ¦Œbz1r¿£Z²DÆ!µ … ‡õ«®u \q{§(—ŠË:é| Ð"±¨pÍ·¨è9ÎvRCyQÊêèï|îÉÑ»ï« êñi]žMŠó¿+ýâ#ÂctßN)‘–+>1`ãÍ *­Í‚&áÈ(e0ðA„T4¨™vu¦ÔÚÙ†Ì~ « iÝZÍsy†Öïa‘Ò«¤s)š¹¾™›wwwwuK"3ú:—gN“wÐÏI=&nf«}´tà»Ã-{p²¡ñ)9¹1’*Íf’i¤hM)$¥†Bèsî@œDãÝ8f ß­ó×ÃÿsO~'Ó©9)%•TAšPóg3DY7ºS­+w/Ù·O—šéÓwA*…3*fTÌ©—tè=ÕTÔ:B5Ó¤E-Ü'2ÉXTëæ,W#)î1ËY…ªr1÷»µhjÛ”®/w=ïwëD| ?螤÷ã·nÛÛºI$’I$’I$’I$’I$’I$’I$’I ’I$’I$’I$’ÌÌÌÌI$’I$’I,ÌÌʪª¬Ä’I$’A$•UURK@ÝÝ™™ÝÔ’I$’I$’Pó¹x’hCÍÄÎ]Ue80*Ö*ËYnsuLÄê{Q;«V¬‰˜ +µ` µ•™©$’I$’I$’N”MÓÅRHÖff-O™»º’I$’ÝÝÝÝÔ’I$’I*…3¨‰-Ô–dÝã¼f †LÌ¥i$·RÝÕ bÊ"íÆ.ó™™„ã—9^_'/*c.ïI$’¼Ã†!ÝÉpï¼î^ ;Ä4îä‡wã3.îîꉪà—[{»‘›wUUTfê¯2I2\Å]^^L@ˆ‰ª¢Â©LÛÕ]bQ™šf%ÌLËÌÀ‰™‘/3››´o7ÕUCÄMiº›»ª“37o&æ«rîo2¦*¯5nêI,Âqþff$‚$“o›(L%w†òò*®ÜKÔDEÓæVaFnjÍÕOû;š³qLíAzº«Yræw3e[™‰ Ú™Û»‡­½ÜÉ™ÙˆÝØªÍÙŒÜÁOy“5Y‹7wRJI$’I$’I$’I$’I$’I$’I%™™›»ªRI$’I$’I$’I$’I$’I$’I%‰$’Ku$’I$’I$’I$’I$’I$ffVf$’I$’I$’I$’I$’I$’I$’Ô·wwwu$’Z’wu»»»»± $’Q’IaÌLD@$°ˆxˆ¹a$“3S333.àˆÚª§wÛ»»C’C™—’ ÄDEȈyˆˆ Awš¼Õ»©$³9"Þ33I$’I$’I$“‡t’I$’Ifc»äD^yçžyç›jª«m¶Ûm’¢ª­ç1n–;»»¹™™™mwww›»»»UUS33[º’J"!LÄDLÄDJInîìÌÌíUUVÝÝÝÕUU]ÝÝÝÝÝÝÕUU^æŽï™™bîîï333*ªª³0fffffff]Û¹/wwš’ILÌÊI$’Ý¡UJíffff-Â5÷wwRIÝÒJîî ’b.ꪪ­-ÝÝÝÜÌÌʪª¬ÍA$’Ij)$’X“¤’JÒP’IRIJI)I%I% $•¤$’X‘I$’ÔI$–îîîI$’I$’I$’I$’I$’I$’I$’I$’Kwv"#wwRI$’I$’I$’I$’I$’I$’I%»»»»©$’I)™™[»»»»UUT’I%33),ÌȈˆïà<#yçž8ãŽ8ÞäÞéjÉ$#na*-ª¼II)D¦fff]ËKרç°ùOÐô4k“·»ÍwŒ–Ú[inî¦If$%ÝÃ(Š¾Ý»$Ûº`©ªÁâXœ™ w­XÛ«¦Û+a`·[w­›oN½zÚ«v¢uY&Z ÄCùjÏ@óC7<ôâg¥T ·¦«lÁÀ ‡?¾žQàVœ‰äçé Ž/íWJZµ[¦Úob¤KSï€êäíƒfñá9DDJ½Ÿ\±ld^QRùN¸ ý_Åõ}EoÅûßkìý‰>̬Î= ™JÜØþ¬öP;þŸø¥ „™å¼ßo,—±~ çù‘wüu{Öÿ ¯’†ül-øÓM§LÕU3[M{B5^Û’Y®Ï%ü0Wv쎦–¿}ôË-÷¾íæ¹E{Þ調ª9CÛ3.¢ ?ûò¬ªü¼Ó ¥D¥[iO¡X¨nÄ˜Ó r0Ý…Ti4¶þ™þ|aÕáåõ}àcÌ Žptý£Ü,Ê^T@D66´-jB­Û5”´©T¥L©“,¥JYI&E2e²ÊÍJJˆÙSM”Q¦¦ÖYf”¶SIILÔ©´›Sf›,²Zi›Sfµ©²ÍJ•ŠT´Ùi–Jm•-+6ZZ£`«RÖÒHÛI[V´´ˆ«$±IOßMÊt"B< ÜùÙä ñ CÖ‚æ óH @‡²y%D–R-D? "M«ñ«íÿrª­ú{‘A$’IùímúzÚ¾ßVý=øÚöùµù4ä %>†€~£@ù4ýF|iñ‡ÆŸÇ`ñ´>8Æ|`|¿/5–¡òÃåŸ(€|¯•ò¾WÊø¾ š†j’Ef¡š’jIªA&¤5-j]Uñ*|B¡ñÙñ«ã\|iñ*ñ Câl> €|añÔøÔøÐ>8|jŸÄio[m¶Ñmé×0u‡W^±:ñdê‚:Ëju¤5!}C¢ :&ˆ‰¢¸C@jÞEðE1ëiÿ”yšB$â$‘H";ui{RoÁ¼/ÀðÁ¦šhº ™2$Ì’I& 2I ÁƒË™ƒb[@5‚`™dLižœ€ÌÁ˜ubª m ˆ)µDwB§÷ˆ#ÐI'÷~Š­ÂCœkU[¿Ôú‘ò÷‰êÏ=ÏNkÕµl–Ƴ-_Rq8¤R¶@ ,]øO P´×ÑW’2o@xvfb@‰;HûŸ?¿ö¾mú¦iãåq¯³§ðt†¥­&|wS,ð&pkE™ÅBÂC$“d@ѰÈüoÇæ³‘wó$mÏˬüТy>?Æ’jýVú¼E‰¤mNçå,»Ø³#øRüŸ‰jŠÿayzeeŠáš‡ëÑUÃßωצÍñUÎH_D}.§Þxk uüÅ8’QfP$f™CmHÀli ÊGÏ8…8 cTÕ1ãÊ^ØÝ÷4å³<E²õv'8æžzvF¾ÁCÆABt5âXµåm÷pùÕ¢vnŒ™ì¹›Ÿ¡ïìñ?ÛªÏG/]W]MäMÚô÷U£U¢¾”Ghb:Ê!ÄhQ"F¿òª«*ª«x5U^]ü;âN’I+IBI%I%)'wHúwvÙœt€  €)™‡Ú«°« µ?¹PÕÔϸt¯|ÿ×Ï­þ.®Ç™ý?þæ‚2×¢ªhþ_2ÇK53úù3C±:É?›]½X.çž»€ŸÞTâáÜÝßá„7ãÆ1â”$-Þ åçN*óÏ#ø_r¨Ì¢°Š®QʪHI,”lA¹e ±€Ë”cP“«Ô¶*UF(wOr äúžXðõêÌ?´ùlä€×\Ž›†hÀ[ç]DO,¼2 ‚ÀÜüºý‹j«®\æ=gt]8þÞ8“ÓOL|DºD¤¼KúÐÂÆ©HÊ„ÛW*IɈ“£¦2‘BqÄƒŽØñ›åg Õ§GNæÎ¥³³»“¹»ª±º}´ž ÿÕý²U6{hwNSÅ;áæ½ÉãW’„Ô´œ˜¾4âì-$JËíLÝÖ¹lrˆÂˆ3>3,E„“æ$¹ —æï­Ù6áÞîîì’I²î^áÝî5UV¸á$’InîîîàŽÝÝY™™™›»»»¸Ì¾ûê|®þaëû-íÝ·Žô7€oÞ9‘‘–F@e¾­{%Ìr2º(zÒž­½ÏŸmRYŒ±âÛúSëˆC?ÃA ôÍ\Ó8MT*AãR͹A²Dòé5 ³© Ãò|Þw?o9âž•*á}=¯ºû¯µûbSì]ÓJi®—b“`)Kshκ»ºÛè«·Šêíš–Ð,€X#‘Nn@ܻťNºX.W[^JדZzºi£mÍ62vͦÓi´åQg¯Dš_=&|!´âáxIÃTçiM5Òè¦Q™®m¹»»(´i¤Š¥ YRÌa€¨ld"Cv᫥ؘU œû{˜퀯‚>–‚k4ƒÄsg)°ã bäq¼d‘ D–$›WÔîªönÍãm^7šÞ0Qâã6€æ@]æáT=~hIŽ\ÂnvÐÓ4°Ñ&Ûè÷m½Ëx­\Þ-¦¢íÉÚr`º@¸DW ÓcŠ#g<õþï².fƒæ(p—‚Ë¢¢¨( ¨ª¡! œuJHnh P°ZëäEíòø‹Ç¨iª¡T3iåà’C…­¼x ‚ùiKçú@¤¦Uó÷T^õxQÈå¨&BsÄã¯ôÿܤ°9a´8C¶*”ªRÃË2-çMReškdžwÒ¿-š¯$Ö쩚5FÝ4› Ê1c+UJšŸƒfÏÁ2zä»9 xßæ)§w8ù™ÀÀêæQ‘ºõÖàu§as4Ö™7nítá|5ÙñlÿãJ>÷ÞãøùsÙ¬¾È7ˆÙnÇÓèúß<׫~ÂôéôæmVç±Ò÷UE9i)”±nÒIZ)}ÇÓkó™™›Ï(p9 m·1>zºé¤ÒVSIi,‹J±V*ÉK>‰ë˜âW&Û× §HÖËØðsÑXˆã!!Î'Rí]weÒ­“I¤Óñzêo,lºZí4ÓM5tÒi4“¤£ AV*ÅXª’–|ûÍçœyÆeU^÷ÉÐtíþQ‘¡Nô¢HCQÔk3"5Î\xîŸæDÔŒ•̉ŠÑJî–©Õ1íü˜Ú¾ÓcÐó½/;—Z²Uò¶M¤“JVØÙ4šÊ0‰>žuÛ*h£iÌa xMfªhÆ(‹_-ævóÉÚM&!!ÙcDI,Y ¡GO¿á•äÎ9Ü´7è*ÜÊgBároÇwß{xÕÊu·H‚¿Xkª¨ÿciŸæöýn_õ>^íú!šæcB#îcùxƒñóxœÊмm¿ œÄE¦ó„ð Í2ò, ·H§÷ÊÌ Î•}·öY}7xÓ+%v0UñïÜ MõîŸ-Q7÷@=«Ýà Tõ%wψ‘í-Ÿ‚FR©oÜ..5&MÀñ'¸ÈcéÉΠt” ‚±ÛùÜœÁ{’ÉN¢ hº«!wàe¿5‘Ç@¼d9‡PxÃQLÉ|Íê='í'ßB“È ®žÑ BN)^D¨GS'?”c‹5ÏXí ôõ*Ÿ"É<㵂ñ÷Ò†¸ë–ÉÉÐ]øPç r{ŒƒŒXÛ¢¨£~;²3v]™ô¨T 3L±Ã{áÎokmk?&}AÔªœl8seŒOœ§ÉT)“çŠ* l<ŸwU‹ÜH(©4°]k¾¼ÐEÕQ‹wp÷·D×$ÖßÇîyôw‰æéîKîÁ¢~¯Äí/eÏåú‚ý¡ôu~‹ókÒ3Uû\Ë£µÞô'Ò'm&“çT‹¶½ØˆÕ5¾DïK¼NIÖAºEš,ý/Åøþ?Ñþ.f>ffeULÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽ï{Üç9Îuo{Ù™•V§šj9þ…ÇŸÔí^H’Ë;Ù÷ T]ç|n“|I9sÓ=oŽZ`[J[“Y‡%½>¢!×NUPG¹ðûþ÷Ãïü7suwO37fî"Ä$’I$ô•Cób(ù1{ ̉ ‹fˆÉ“%.ѧRWF²ºí4iÔ™)uººn×4Ü·hÒìºÒºí:é'uu+ª±¶Õ®ÒêhÓ®“§WJJJe%.ѧWk]Ô»U¿ñPøèr÷Yêüçû£3Ï”sÓbYÍc[½ÅœòºÜœ™] ¼†Û»ów扸"}:ÕÓ¿éyù·':(% ÜÂ¥I„EO#É…ŽCÚ‡ÐJçžÝHùTÚ?INô·¿½x É>]y™¹%– “3‰I‡]r\ÍÀ¨iŽ\<‡ï$nIµOX¤‡7Ld™,~TõWèOVFµß³%õî ^5ww6û0[ɹ›¬HCÿîÒ¿×3(ßZ<5‘þˆ‹üóð̇ú¹þôO§çz~qjùçè'î”ÜÈ”zk­ø†7é…_ýE4סÐpÔû'üNoêkeÿ¶nÖ9>:©ù?äGe«òWúˆcíÕåÝ’—qy‹WöU®½?]£’¦äc^Ïüÿõþßþí0Lßµ¸ÇÒ"÷çß“Ëú÷ñwšqYÈüñàI„‹Á’¬‹È†ÙKãdÐ>’ý™õ¿v~r_ÒP‹bs?ÃÔ¼øøX¬IŸ¤è`ΦSÂVŽñú-ªYWâR_ÊõZªZõøY$c#3;ñló«Ò ùÇÝ/À"︈÷L)8)@£†?H ü$„H“ŽûÏ{ï£áB‘úÐ…$¢.Ž!0 0ÀDÓx/%Ì•²˜œÁaØN£ü ­ÈD]p˜™– ‚«Zµc»vvû|ùçžyçžXÑ6õ¤BD: Ã)e©ð%Ë Q!lu¸ÿˆäÌa#»ÖõywÇtz£ÎŠÕšc6É^ec£²çA‘¸ÈÌÌÌÔ0ë:æF³3øòŽ…8ƒ¬ŽùÖ¡ÒŸ+¶ÿ¦ìÛ:wÅuœ\‘.m¡Ï´Š%¿ö\ÂCË3!`¢#( ()~r{l6ÿçÔ†Èx¾”Í”‡*”•(§ýu˜£š2–‰&‡´$9Ç2yy–Š¥Æ3™3û>^~žß'<¡ ÌóÏ<óÏ<ªŠæ+ E’ÃóKo<óÇ*™Œ30“ $ÌXY‹ÝÝç—™$’I$’I%ƒY€bCØ@f%€b@†DnîêÌÌÌÌA$´ÓM3ÎH¨€ò@ 4 4SGD4C@@tÐ4ÓG@ÐÉDk6Ü¡¼;gl×2×ÛèàéèzAÿRÛ9|k•dûY‡…š²ešk“Ÿê8xúz,ϰÈûÙ¿.òcJÇ¢EHnDþAÚܹ`Ô“rÑÌ]g%ë ›+"Œ!ìbø«âBßFQU<=±þ**¡$›4Ãþ¡¨]/0j c5zàiprì‘$EìÇŠ5£Y®Æi2>˜ùOœóìÝ®8O“M5>>p٤؆DVb(ebËE ª¥*õA/±)©>î4• "‚– "b5ŒærQ H“å'Ê* ¡½1äD¨Š–9ø¸µÆæGS÷yb¿SrN¾F¸tÙ…UТ-¬©²¥ƒ*s™+4þ2i’)8c4°`2Æ¡'—1@z±©Å D¨Ö Ͷç6¹kÔhÁª<ÚM4ÕiVW¶Ò9eí¥õÂü|‡XyÏC“Å9lã̱ijy«/ªe™Ä)®Qæó®a%%ˆ’’ŒE†|ãœ0¤…ჸ£r™Z`XxUáÐýY˜qšPj8…UžCcBÉilz+/…j̳8'š6vÝæÍM5ö0õìŪâã×^©"´®ù *YñŽPN¿&Ó…z©ÊQÊj5ÐXyC” 8äåÇ©bÒªz¯•eeœ5Â:ìïõñôî蹇²ÓH’Ò”MØMòï Ù³[J))R!I;Ö_@‰÷MÖ¤¢3âbv Åâ'š9lŽ= •SÑx¹YYÂtÒùàÇ» á§£½i>„x*¸r—w,c’<°±ŽIQ” êfk´ÑÀäSá01 áu{)·Ïw/BÅ¥Tô_ ••œÎÞïw›èÚT¤k.‰ã&Ç¥äÝÆO.^.=—nÓõ=OÞ|‡|î²x”ÒÛê‚—™Q›”µ¨¸Wb©q1wԢ߫w)žãBT1„ª$—q5OÑ,sçS$}>«vîÝ]xvºÍ¨ýVq¿³," 0o‚Ð`p¡Ê0ã Q|{·ø|!»‘÷KõD'Ib‡ ˆ‰UDþZ¢h1 ͱø¸¹"ŽªË]µíåéßžyçžyåsÉßèŽ3Òû‘åé“Èö»•Üó=Ìrsvc 0,bj: D¿EQ¥¡2â%Ú‰2(9åÙŠ™äe+f¶¤Âç-‹“5¨HÏÍe•$²K‹Y€©"cëÓPƒ1‰Tæ¦)*¤«$Cª4ó¢FRHøy{=¸8á¤xãŽ8ã…QÅY‘â–Þ8ãŽ' Ìd€a„°$1{»¿.Ý’I$’I$’X5˜1 Ø‚ÌÀ–f°$0"#wwVfffb $’Yç$UdT.bf˜æ¹£š¡d¹.Yd˜âcèÑ~DxÎÁ†U¯_g# Í8È/£òØe×’ ;a!tõväèÇ“¼4%˜F-Ì, VóÍâ]x°ZD‚PÀóëU6ï4­:<úð×øy–ßÎ9&ûïØô9ºaâÙéw¼æœz-©im±ÝV¶.»eW¡bÛ[E³¨±°ë„=‚Æx”nµ9ªg«d¤áCg Þp˜™Pn5xLDÊ­mrß¿2jøQ#ÒòL$‡’M1Î'z¸¹…½ÆÐw20‰xHXC€6g„Ýd8xG ¹B^!XÒ„)^˜©P¨AŽZ§ð ëχpTÎÁÀoSà& Œ"g £–“p¥DT¢Bk{Ü'›¹ÜÙ¾Ωٴ¶UŽÕkH¥ mˆ—„KÑFŒËhÂP%…„°XVo.ÈÂ&P³¨Èâkà hª[ã6&ó—=‡1‰•ƒi°6—da(HYkY´RÀ¢Á¶bœœ6ê°\ØÙJ› D× ‘ âk-„ðã ð?ƒ'ïŽ:µìàa¶ƒ½¸ÅÉÄc$#Å ©›S®ì28A6¹·cO]í±|è:LŒŽ®FEœÛ6OÜí „áÖñ *ÿ¶aÚ³bñ’˨Â2†òÕ-úø8¼ýЀlì¢íñŸ/¯ÛôNù´ñÏå2{cÀ…ÜÜÕýƒˆZbÄ´<ÂSŽý8ðBåê¦ßì+™·t†* а6ŽD{žˆ(ˆ¨r(Ä ÿXýÏG)ÆN1tÝy55ñµåÞüíôlÚ§¯ÓûNÛ»»»{¯ nîîîîîîÞëè»»»»»»·ºúÝÝÝÝÜݽwwwww7o`]UUUESÐ33/2òÌÌËÌÈ.]À93Ÿ¨\¼~‰¹:ª=t/êß7çO“ø÷í—º/Z¬+>#}p#÷ Ô®Xìß›'"¿£l1÷ ÉÌq<¾3ž·NÆéU¯ÆœÀë gÞD™I(pã¸DÀ=îÌùHAðƒÞîÌJ¦!ˆhä0ÓÕ-›æ"jt ¤—ÒÆ Õ}8yº7e–[³Êç?<ï}ªm¬ª#­‰6°Q'î²ô{ó‹Ï Œª†öè†Â©²Ó9޳fèBÒèuÊ…4¬r‡¨œyG´zÉíuOÉzq™nŸÍÜõwenÖ´ëpH*EbEb@‘Ib’),’É*PX(±_ãO›»T„'$¯8Q±V”Vî=˜ã(bñÇqÇ £(H Å-¼qÇN,ÎY˜Ì݆$ »»óøx$’I$’I$·H c»X0$†$`Æîî­ÌÌÌÄI$·K–€Û¬4`æf9¨g˜çžI…ˆ\0øÚr°Äëpè4„î§f!°Ÿõò.žòø@¼X†…;‡m7Ê•TTº¢ÂÉñ²xs!Â0]—¸ÑÕ—!(ÅJÆH¦2ôåV½0å3ý^ñέ)e+?O$“Ocæ/w÷Ü… ©úåz¬MÞç½îQðwR ™ÖW)oçBIYy‘IžHéG11ŠO9ù6ïí$²íÑ„ÄÁ´Pm”šå H†uG¤ÙEÎÉ«j$˶Jn`[q¦¹‘È:ð“h—à12 ÖØã8Î…C$Î©Ž¹ ÉÚXÂnT0Üxtä­[àä燄ÙÛ›xåV´ææ­Ëhº !:¾+aaÌ-, ªœQ0Ы$“MiAK³œžÇ›86¶´í9©æþ[3ÇÙ5«æÌ*Õ>€ÈK:ßGLJ¸é X.^/—$°'UQäá9§Žœ¥Ìlowo#m\Ä­œ†”Æû†rBŒs6Ôy,S:(‹lC¨™â6ƒ9.¥&´®KJJX-µ¤xLª£É‰+Bµ̃˜ @&Ú ùL3LâE‰8ZÛ&Ó"'!ÂpØØ¤…ŒôMµCÐG#x­Í.»ÝÇNó†0¯ N:»¤r§yám`tsw1Ò‡’CY¸è=ñÀ£—¸cå:˜ÇBçË–pl¹1•ä8Ŷ\±¾÷yÀ"³Ý½†âäd/ RÒÈù#'ê’HzF1E$<óä‘ NŠ“$šŒPPF8¢áÆRÒW9ÒÅ Eˆã-¢ Ü‰¹¾£K¼R%4²9n““?‹ bQ/6„áS¶PzA7:&£€Q‡•2³A®@ST˜baã†<8ä|!šÿ }Ëõ/Gn™y™•˜÷wuUUSFªnªª¢©æêffbLÌÌÌÌI˜ˆˆx.I!h Ç=yÓ­ïzºÖ·™Y$sIÅ’G’JJbûâ³Ôÿ¯þÎ`ÐÊÒ ’CMeoØâã€0p'¬É$’I64ék“$¬>A•%Bùi?-ÍIvx¦? Í ìÉ’J¤‘Ë#ò«®5å•õ86“qphˆÅG0¥ï 9\ç½ïâp8,¸GBÐQàö0Æàbˆ b¨ÁÒÉl·á ãɲa÷u))Aì0¨ã¼¬ÐÁîWµ»Éï[°'dóÈÖѼyÓÑ_SnÎ8š¿”huýy·uG·¾ÖÜvg)Ø £à™™¡¨v˜ÌfV2>^ž|lã…ŒÅãŽ8ãŽF\±™T^8ã{›VÌÌÌ$H‚ÅêªüÝ:$’I$’I$·K3»ÌK0°búû»º·s33I$’ÝŠ2($ÔÏ4Í3ñq1ÇÖ1ª˜’4š£¦Œ€i4Æ3 %#ða× ÕTŠ%tì­¤E-r:ØðàØaw䙂 (˜hJP DÄÒÑì•´|[x?{ëǨâÚÂ:»Û1åò<¥Úï<‡‹’ž.‰íìt¶µ'r·v‰ÖNÊÝÕÂ]]#ãú»­­“—H Ö¬¿×[Ä$…¨…ø!p.0)=Xi®ë‡Êã5w¹\°ðºèDO}m°ÈáSyÀºÎkQrÕÂeÅg$)àoÈ¥¢ "2)4íÇÙÛŽ ¸î™@8£ÌRÞ÷ÎO9/=½ížnìb¼{dy¨òy؛ɭvlóž×ð–&ìò ‡‡’w£2LÃD}äÕ fRÒ›†"ÒûÑž6%ÀUT˜ EzD¼ÒBûØ!™)õ *%ë¹rÚ*©K@q!!!!8‰¿Â6éHÿ;×;*ÅV ¼4’&óÜ!â98ÆŸì1PÐÀåÀÀÁ.âÝ»ºæ¢Nks﵎åÎ¥Žsœ“Þî¡VRAUPì—K±Â3Ï £Ç1‘$„#¦ba•X οWŠõ û+æª0»ò„æ~„/Tþ{Wê?Äx ;‡På,ãœÜ\.eÙÁÔ +UA\¬_Pþ*ìÆ DäPA’mmˆƒm`ÇŽ7wwVl »ºªªªULÌÌÈîà9$$$$$‘D?±Øìt÷0y*1Ês\À 0¬è÷­Réɸ^€;cÉÛS”:®‚bD@Uæ>Yx)ÙBYÃ[)I }=À z¡<eŒKW^6o„W#ÇqÇ*Œ¶3*‹ÇlÞÕA†a&d™˜^ª¯§;»»»â“¤’W¹„IÇrÌ–`_21n­ÝÌÌÄ’Kw0†b@ö ÎÐÛªfƒDtT È2ÈË"‡&ôF”B(vzÉOj<Õ5‰P^ ™UFD!̲QC±õÁ*é´†%¾ 7'_ŒÚŽàÆHRµ¯åî6I‚nðDðvó"ßÐíâ²w-¬íYÔ®œ4ÆÚP†’B€­†¹¬É `ÀÙרj5§œm I .¯«ŒÖ´áÎíz»Ã£¹Kúøî9ÛY‰æ;¡ÜžmKðK9ˆÇkG\‚õw[Ÿpg$,Ší95®¼¹ ê©»}³æÇ}ëpc$)ÛeN§7XÍßÛ]z;KìXÇkkÏ/RN®® »¤ÿ’ÝùÛ›ÃãWcµ„ìç»´G#æœÒ4íc›á™]0À³‹fÏ‘óDZíˆsN½=ѱÞr —TºÃËŒ ÌáÀa) +B¸Ý•RR$­$¤‰.¦¼J‰H¡*$×#ï*!ÆYójÉ Û÷Je`™Ña”SÐòÝôþc&ÏrÏYúþnÝÎâ'Êî~Ëž½”ô»6<ÙK×ÞŽ„LËㆌß.‰6{ÕKj’ç…Odð|÷¸îqÑ8L'¥„ GŽ89Ç]5ÐrqáóŸWCc332³ÌÌÌÌÌ̬Ì.ꪪª©ª¦b-Ö[U¹mUUUUUd“ $“’DI$Pï÷ü¥®C‰êhpM{¶mÙ» 2Ç1ª‰«Æ7NîKÃ$bä‚í¾oàúõüÐû¹ëÔJ‘(ŠBŠ$Úr]­µyŠŽáÑξâ÷+žtsÎI«$µªfûµ££œéÃOkÌݪÊ&‚½ì X©•]⥓¢–Á4?Wv›d’v&½urËU¨ô§ÈbP]¾L P?¼=ïÖï|`÷¿¯l5È2 ‚摆íÙæÐÓÜÀƪ,u0¦Œ'ŒiŒa6ƒo ¤PQOj½ã«ggŽoŠðnÓÞtc´Ñ™‘™ÒkÀ‚õÞ õã8,¼:¤wF<Ê­˜òãZkËvû+ëÝËø|øù<Ÿc:~ÀÃÐõ3¤#L•ÕÓ§àœÂŽ_Áõ¶UTîÛ»nÿ×»y·k寙èxG‰ÊÚÈõ˜oÁ"$IHKåòÁ "ªH mŠI#æšKˆVÖ!ß?—›Ðò’ò_3˵®÷h;[YqÊMçÞ*Âêx;ÝÚ­w¤wEl ™wõ2;G!Hl>I éJ9âDÜ!¨Ý´2Ý¥)Ë%<ºÞ«¸wŽ¡Úg9Ú¯w÷íÍdá‹Wª°ªW÷ǃÚáÞ8páÃÁ9[\ Ï¥rIlìÏ(ãÉ䵑7¯G—>ÆÖÖ7j¹çI´“† b’)qÆyIuÅ”X¤yŒƒ!e ,v Á :íÚ#O+ÈÆ3Qse‹–plÙ–7:Öæ½ËîÀÀÛ²%¶+&òid2é‰ÙëzÞ·­Íê+•äääääß¾¯l.xÉ6dÜÓA˜¾0¤á´] @ºzFÙã7;zý‚ížçC Å÷7Ÿ'˳є"†Ê`ÛU‘@ ðüQzîîîîꪪªªªªªªªªªªªªª«{Öµ«mUUU€‡¤ø9êOƒù:xüù½3IûA‚"EiÛGÒÃÇ¿ošª¨©ªˆ$’I$6ªJ^ó5¤!òf}|¿=ž÷ºÈ`®Bt$Mydrâ .sÓÇ0sÀÒð¼Å¬Ã ZT8‰h7ÊÊ YeV 0 'IRi&¹zz¸™*KÑ©E0LHTPKÌ=_¥Ît÷ñC¨d€P · 3;†Áêí Ì!o—*«›µx<@ñMŠHÂHÁˆ¾*¢Sé(¾ñciâiò¾O‚Oyï«J­šcɧ4'b¶íaÇeÔqñª:‘Q ž®e¡ï¸½¥õTÛ§è{¾~§¤É Tƒ×·ON7ÄFGŽ8ãŽ8Uac`Õxãël\`d™˜^ª¯Á$’I$’I$° 'Ë0bù™•‰nîîf$’I`l!É!Ø`ŒØ3$BII$‘œ¢«ÜgÑEw'’mÚä,h9Âó5y!s´èq¨‹Ãů„00…É·ìàó’ùÎ.Ý8ƒÍ¼i/sÒñ‡Ÿ<Ç;khxœS¶~^9¾/áØw8ƒ¿“¡Ý–ÖC€ÔótCO|9r¶±çK$Ø™Ô`t®‡m´g¥¤…jS€aT 6sÖh_L8T|fe¦¤m¬¤tl C5I4ÐE zÄm· _oCY×y!Hh …šh» ˜¨å” A5¨‹ªüª”šHˆË*hêÒHPc|þÿTs ˜¹g$)°ç¦kbÎ/1lÙŒz» Í8£“Á`H8ÈëôÖø@èóuÂÎʈÎ6Õ¸ÞsÁE3S^ùÑM! ›…?/«‡¦‹ÑÖßà섽^IƒÇðj“¼ù5æé„!z²ÒÄø~æ&¾sŒ©ö*ÖV˜öÊšK&ë*»â>ü]Þï{ò†E6ë MÂÁÃƱò.Wéüì1\¯Yj2¹ë¶ÞÌøùž¯éë÷ºÖµ½ÌÍê­°Ëmµ°Ëm¾ww®ã´šM&“I¤Ù4›&“I¤Ù6M•U|Ó~ A$z߯§ÅV]ݽ\Ýë bÀ±f`–oUÁ'ÔúÙ‘Meç¨ÊœÆêÎôíåÆ2ê¦,)kKNb*‚í8‘ï%Å…›£„q—ž%/dœb'dsŸÍ÷½Îç®´TAààˆJøò3àmY ¶ÖœŸA›rS…2™W€ÚdqÊH’ê†î><­Ô½ùø1Œ±Œc0@RjA5Iè©ÞS¢ýQ¨o³­Y•#Ô#®P †$ÇW¹¼DRñ¦± ¸(ó#¸{g\45õÔÆë=pwX˜|)RI ›+¯ÅSðw!ú8΢ÅÙƒÉbໂóÓ9«·qzVóÏ<ñÇ ¬"¬l®÷Æ÷µ\f1 1xª¾É$’I$’I%€a8îY€/™™––îîîbI$–âÓòf 3 l cea®þïdz$¼óð‘¨x44ðİñ pÅÀh„‰2Òú—ד'dä7¼ï†máÖÚÚNúz]¸mÕŸ;¹´?{_ýëÙ$3Í.¦óhŠ1Æ÷Á6ì.®ãÞ×:"H°ÐÌ+Ä`qƒ4j¬IeÁ$¥,vAÒ¬&½§ÓæóðÜn7ÃM»¤…Õéyàññ*€ônÂËQG #0ùèU¨@±Ö~#T¬BŠÁÏ•'¬Ä2!‰}»‰tDâºO$Ú"&wv™k8Ü êð߃·rðFÞVüæ‡Ï©ê*~"‰ÆpQf\ˆÑZöèSƒÈ ÁlâôœE<­Þ'žÍ=ŽECÄ3ÐÐñss07lênATæ<­8º³· î\á1HA7ÒkÔò{«ZÒiûe¡4_·ßjÜ`ò‚¡â µSß C‡’'™×¹îZ_Þ†îœEö|C²<ˆæoŽ„†XÕÍ,÷BÞ2Ba`K°q‘)ÔüBdáÜEÌŒ3³ÌP£YŠsFu·Žþa=Iñ3æCÖ"|SE(‰JRŸ¼ýÉõq8ô 8\‚!w#ÃÍ÷|Ÿm~(ey‰=r`kè¾b+’H¶ð“ó3=ü°’¹óØGÒïÇ<úꪪìµÝÝÝUU]ÕULÌÌÌÌÌÌÌÌÌÌÌÌÌÌLÌÄÌÌÄDC¼ÄDI$³5|¬»«™ª›»yš·‡É}óúø‹‘øÏñ|Ëvú¥¹ÿ;·éŒ¹áD ¥Ò"ºn–—¿eÅÞ¾(¤&Äź¹**Ý„]¼ùU_*Í0ª—5\öÅÅàPaKÇ„á{ÞÌÎé½óR#ÁàÁ Tì![ª.ãИ}áÍ _x‘,žÝ¼Ýû]Ýöí»»»»¼£»…žÛ#¿K‘‹4§†+£5¤Éˆ@ý=4Õ8RC¹Ù*¹³º7峩¥súótæá‰\Ü5ÆHè8‡XœçŒ#LP2ZQAEpYà­#A–œZÅQRf˜U$¼Õõ»Èw»»»$’ ¸w/áÝîÁUUö\$’I-ÝÝÝÜa˜à3¾ffnfffbI$’Æ ;€Lf˜Á“%sLó3LÌÜÇ,Nf<èÌàq:.Kk!calqÏŽ~“Îõ.µÒcÉY]ýH÷/) Ødf{70†Y’ÊkÇB| ¸²‘õˆ`KàL¨,§I¯4âÞ-´Ì˜-”ÝÉÆjb"Ó~Ör&ò*o½úÚSuHœ\hÞŽ{¯>AÌÝÄŽæ5fué»}UFF†¢jZÁJN¹X»Aß5› …æ8ê6YÖ2еbìê4ØzcÕjj^_3ÊG’ÄT‘””_2ÍT¹qïAoJKêªÊîõ{}4UýÅöúŸÊpWÍÒF~(XSYèÆÂiîÓ&+;LÒ¢¬Ÿ+Kš¤«'¿ °Õ*ÉàÓ©*ÉMf%’•f›º9SÞèÙ™ 7À©âìVz#ö–ùÝ—ËíPëƒ(sŠÁŠESÔùÚ}llÓï±…{ŸÃ‡Ø;Ô¿Üy½Ób“Ìô2³gõŸ!l« ,¶ý‡ù.pÁ%ˆ¨!o\Òe²ydV@îxÕêù¿]o«Úö¾lxîA$‚I$Iø<½ßzo3wwwwswwww7wwwswwww33332îîîîîîꪪUULÌÕUUUS»»³Áfüúî:ùXé׎½+¯^Û»·¹›»Uy±u^ x =¯Çh¬› 0©ãUgU~„eø·@>å,€ØÏ pÖ:ƒÅ>`ÇÂbe ƒùß”Sc™:fLI1%Äê=wÚôµÙgØ>Ëïú7Ü{ÄñÇÔ-ý€`* T¼¶«ŠÎáiù´T^ ãp^€¸Í¡ÈX‰YYYYYYYY]Ee%eeDûHO]uÂË#c‹VwLLS999,䥖Y5’[]eeeeees,Õ••••”!àèP|ãàGÌøXŸyô%~Ë‘‰Tø MŠŸm h²©MÌÄ£þ}öœ"N̼"?[LU8`êùÙa0é[µh`sQ¸ÄpÓM/í:1äy^ÓÚzií=§G´ù/ÁzŒó»]®×kµÚïîNNNNNN÷{î÷{½Þïw»Ýî÷{½Þïw;ÜÝÎçs¹Üï`H$ ÖÛÛ”á2Mø›œõ86†nr¹vàç ¬(6Ð2 )*‹á¯¯>HJõåa¡;V4QB#‡{}6ÿëz‡³k¯Èn`‰JóÛÈú÷î;0dÈÜQ15Æ6»¦YÒ(§Hpá‚Á4,tôá!‚¨$ 9lZŸuò8˜Ó6jê±³ï+›u}& A ‹ýOñ<”ö"­ÞÞ½ˆEh±t7W‰‘uf¹ÒlÙ,çešÆäàãfêâq2.¬×:M› Eœñ¬³op^N é |ß3qph5á¶lvÒõà‘sFƒÙê¯`XXL-D¾×¹²5«Ä¬·¾?Íu>4t‡z ugÂëÝÕ‰Jš›ªƒ *ÁZzz€z†‚ÿ‡·w\ÑuñMÌÆì…æO^h÷'±ÈpŠ"þ½b ¼vóº'<éŠlL 1FèŒQ0]u¶5˜Q¨ƒåš~ß×åÙø‡eÜèuýª×YI0LÈ9C¦l¿£ïsÓÏÄÅŽeç›+T"8ezª»¬»%ý¿I/ðY̼›iÙ““ÖK1ÙaÖ¢¢Ø1Km–ƹò¶ªÖüuçÝÒu¼Ÿ+@‚’Ú™¬ÛZ!â T"ÌŽE¸vyk½tNݬÐ1ò¬*™ èNmÎþ:4aëÚáâ¶A»Ú»Ã33w0¦6·q턉 q268èÎídeu—–gœ€†£$rd‹·rÀ{:ÖàÐ4&D¼½Kõ‰OM“lbÕõ§ Ä£Ä>‰ˆ¬öðX¦s .Ó<Ž[žX[ \tìH$’Ei ı"úf—n”¾½Ú´¹˜[-e¬fSûNÐH'L$Cò ˆŸý¿5úOÛ~Gµ[ß+?]ÚÝ I,Ŧ¶bÃI^FVmÿÎ)®HZ ª*H ¥®îèá;»«öå¿/¿ê ƒï–÷Ðm»0ÂÍ¿^¼H  °ò`5ûú+îèEk÷”"TºA=pƒ{Ð5T}9ŒýÆFØ ãÿfT\ËK ^…jÔ³ñè=8¨/(UÒ(ºˆ€! +›õsmºmZçÛÞWkh-~,ª¨¹nD%m†ÊF”ª‘Š1„TM_B“õ¿[õ¿[õ³ýoÖýoÖýoÖý÷ä~Oîß2~è~G'÷aþyýOÎþ/ôÿÃþÒýçùÿþóÿŸø_îùŸæÿ7ù¿Íþn¯åúÇñ:Aû2 ä‰BÉû/Ø~äø³óij"~CüŸÚý_µü>?Ê´„‚T”Âò[ï.\Ÿ QNúýF‰ñï8Ký±óu}ÖëeRtÛ}§Hü>T… ¾ÔPQ¨ªeVÍm+d­mÓ”±‹Ib;‹Œ¬‹•vÖ£q#ÊASíOÆ2;¥ÎàÁØ~©  ˜¢)ø¿ôïúû ÿ«^óí³\nÄ•·Ýù'Ï~WÒ¦z¾ÆŸ©’iÙ*‘«ü?µøÍo7ó&þ ¦œ}B’S@}ñGûw%¼üÞÿ¾íˆ´^Fø¾Öô>ß\ÿ·ù|ùb8š K²ÀO®«3$¥Z•-úó6öhQm²Ê(4ó´óÀžyç‘!\îsYêõz=X—ª8·¢™ü|ý+ÕÞâ}>ŸVØ€©úG•ò%;AšU©TÁ—¨ó"þ'3€’I"H²I8N_?4G“8‹ †0SŒÙ5ͯ˥6Lc%–1b¹Ì:bi¤Nw:^w#?6ú¿÷¿Ð¾rÊÆãŒ’“¶byMØ».µ3ÙËËů4ì•HÕó¹yZݽi¹e.yû£xµÌ#¿ÓUÄuD8! Ä~}«%múm_Îoi—LjÞÒ¼¬ýei« •µÒ‘ÝWýûc’n¥eH“8üÒ‚ˆtMq‹¢„×þÏìÿSâ~¥—0*„ Ÿ,=PÎg<ÉýÉíþ¬ý[g2ØQï§÷gõgüX”þ÷øÏí¶ýÒ#øßË}‡Õ4_ 'µ<£‹íßÌ~ «ðµ¥”ELRVÊKlb£¤¯Ü¾îý,ý/ÙëZÑ4Ÿw.~áa\ßKÂkZ&“‰sóÇçÚ5úÄßD J»2QfˬH~™Â|ßUòîJ¯Ù+ýÖÓdTþ³ûæ9?š®Fœ=Š›'¥ÃøNã²»Ýí?¿tpæÆ7JáÜ­•É»þC7zú4Ž®svÏÇ$®Š¯;gGrn¯ñ_ß«úoê>ýW r‚ÿXâ8쟇dübréˆÍþ©îæØ§t÷ ¤³Ÿ8që7‹ƒÌféQÊ108Ù zˆÙ+ãeÂE;ÂÂËGÄEBw€lD€p‰a»š¾†œ4úZ>§&í>¦ˆá²ŽÊšO©Ñ»wØæÙ³’uce4“É“ ¦åuT±ßЧ‘­}fΡÜÜä£e¥nïc¢¶cƒ³Jx4ô¿c½^ Ñ»uœ«ÀèÖž ª£› ÓÁ£¹[7SMUÕq±ÞÝèTB›šS†ÕkNCfÌlñlpæìòtr8ryœ$lUJDU;U˦ûkÃj73 G·Û–[mU‰ðˆzg@#Ñô¬U{öcD„†Z—Yù½š*êEÂnŠ”ÖoE*êEÍ´¡–ÓE¨º£-’Sð´:ÑKh´) PY$¥ Z‚¢È‹$øbÄT`¾b¢„&‡G¾:4&È„32ÙTh…D‡ð¢jÒt!–É"I˜åTUŽ)c‚¥-’JR[J[y{Iz¥/Q·%7®î»»Ž)c…›fl¶l¥²P¤É']Ç—w]ÀÓ‡^©$¥{ÌÖœY^M‡Ä<„ä8$äù²‚C¹Õß®{¯çžÕÜ^K$¥¤¥ 6d”–IA¥¤¥’Y{]t”¥)JT©R”’IRÊH¨**Ï9?Ö4Ù^ Wö³nœ•²pÿ ¡D†‡BC ‰ =!Î&·MÝ ªÁÃr¶i¤›1\ÚbÆÇ%L0Ç6<ÍÚVíÊ­àpÇW&ŽsLraNU1æ¬\læÁÿßÓþŸôÿ¤¸'ýD2Ì¢%UUQ1ñ ÂjÈ‹d•>§±=¯ÀüLz‘ðªsUW[+wÎÃv˜Åw>4Ù\(…TƒqÚuþ/a-ò£û‰í]¢TaWãuëÛèÞëÞØß™î}'FÐh7«Ài—Ðß;Úìñžaü_CÒþ,~9k2ó”›üÍZÑòÚëŒjI5šãžóvyóSÜ7ð33Úúb«ïËs /ÁZ$¨Û$“à”¤ÔhØšÜ7d’I$Ù­é_}ÝíZùV ‰/±Þ}ï­y)£$(¯½î’ E½» Fe¨ŠÃ,µ=ã÷[¸i·Û~GØú]\Ú6MÛžó$BsÚùLm ž@°b¢‘ÃÆ;ƒK ¿á×ßM °;Uœ÷8waøÕ6£uþܸ¬):ÿb†Ú•ˆ¾×aÁRoË{æ”9 • )ý¥©û÷_c8ÌùibqeWË}Ó{Îó<ò<×~ä`‹-Ð;йû3Ú#1ÜÍ=‹lë£<…ddgi²Zh±­V–z/<'8Æ©@UAƒdøÇøÉ¿»>Ðs#„ƒ&(ú Ö'-œÙ.:Xüé%Å+¯{Ù!ÎæŠ¢€(ª( ((« ƒË,"„#cßÇŸÙýÕWõ/`´~Öšj~ÇÜEüHúý'ÌŸ5 _Éü~@øRO• 0°ŸpD @=²*¿‰Áýˆ~F¯¼›­¾côò-úÏÉŒßúšý¯ö3¥HýŒ914âIwy忏4j ïu–N×¥“ζîë\lt:º)ØÞo}kîmç¼Ä‹ÞH»D'-¸$çâôoÇãwëuÄ9×ç¼âèHQÒêTÜgxrz·½ær±BùÑûÞŠƒÏó'J-‰"‰ @‘‘D¯}ýÜäB 1Q T ¬”QRL’$ ¦ÑÓ§þkY³4VJº÷7óO¸ãéú9ú™Ûƒì f¨?•F¬Ýýïf«gþ;žŽ!¾˜nðÀÊZM£ÆFN”<ÊœjWöE–€hJHP (@GQ{Œ(@„”§‡“àxåX­«BaÄ›¨ª¬æ3Þ’Ë™XOú"lÒïPÄÂÒLõŽðÀ`âa)ÃsÉËËvÞ7ý¶‡O:ôi*’º±&¸ÆtÁ8urÞÛ*¤ªŠ¶ÛUð)’­[,!Èm¥&¹1Q(¶ôÎSDÒ‚ t…­Î‡áÅÎÓT8$cý^%·§¿¿—üÿÐÖú¬j5ŠÌ7òÊ×Q¥UŒj5ŠÌ7+]Fšùh‚, (ÿwߺÐëUaÜ•ÐZ‰Õ¢Å¿Éc¤2Êás+FÕR¯EUÄ×rAF0`ª ª‘6ÓÞÌq˜ùsG$˜kŠl>$×]Û+…a±§ÎçÓfœ1…cß+ô76J+s–ŸæéŠ!s\КÏŽxàðP©ùºl§PÃ(“1ŠÅ)†ì³»útÒN[Z‡''B”Dm9vlL†ÈO_¡ ÔŽ[•£K%Z•L1Ž‹T„:ôêF Äà9ã4Giúî†Ê&aÀA2‘Æ4ªÑJLUVÍ4¥4Ò´­*b°Â£µiOõÉZiŠl¦*±†•TçŒlÂÍ–å%"b&w‚l½©¬ÁáßtÑ9)\6ßv͹·ÙÂiʬnØÝù˜ÿÆù>GøÉýþáÍö1Nê|µ2åb–‰KE¤ÜµËRVKJYl¶JÉdD’Õ$–I}­êò·–Y%’¥¤«zU»¤Ú1±›D”š4’™’’’’’“%3.W‹s—J*ÊQi7-rµ{•$aRDª¬bCUJ‰² bT¢ ªR¢T¨•QU,‹jÔF¥*HŒ*F^]ko/¦eäææîºÜç üËçu5 uB—Ù ûÄH{â÷[ã~ÐÉ5 °QÍQáéYÖÄU6â}+å’•ù]_­o_Iªjk4©R”¥ ÊS0 ›,²JPÌ’I PC!ihI%)&ši¦d$†Û¯kÔ’÷xyy* …ÇPÜǸ}ª÷^=v^LcÙ÷œ¿ˆ>ñdQàíDÓ›sÞ§8äѤå9,‰Nm͹NS:³«:²gY'_žaú Î3wK3&YŒ2¸Ò2HLAýÖ]¬Xp02v5rÁræÚ5¯]ë»Ýç­í¬ÕQS[ï½Ýaªú‹üÔøCß„sÔõ)U_J©Œ*©§¬ÓLlLFšJIKRY)JI$­©$’J”’I$¤¤’IJ²I%¤’I$©I$¤²Y$’ÉIdÒkZJRÙI%$¬•%d’Ô•[I%²Ii)$’’ÒYK$•’J’’JJJI$¤’ÊR•*¥*°ªÆ6DV6V6V+r°Ä1)‚ªˆªQU%TJ¨•P”Ý LÉ¥%*–òêÛ¥%)d´¥O…º0ÓáaŠR’”­"–êY,–Ù+)I,””AÁµeÃÛ@¥Ïè ëë9Ë­ñß2¿“5L«G;Ü凌g0Å#<¯CnÛÒj<È{TˆœpþNcïwý=JóÓPš‚~¿ûGÀ£D…ºI À½f†ŠÆ¼\Òî^óÞ×™U19¦Iàø?éC²ˆj·ãf­D¡P£‹ˆÈJ.j¶Uù/‹B£–|Œ|ùåÉ3*û-žçÙsê Œì‡ø§wµÉ߈ufQ5sš‰`\`€rm¤S’pf:çÀ&¿Øþ–½¸Å» ÷Ò1BaýÌî*òã6-Û#M÷ׯ5ù¤‘Ì V—Eó4β Ä4h˜âY«–¢µ<ÏèÑÕLñH˜ƒ•¨·„©ÍŠR,-H2aú%^{ÈÕ‘µe)lÛjÛÕmMJ©™ ÜaB¨Lc$UIª#ˆŒc‘*±fTh¢±F1QF‹,XѰE“cFɱb cQb¢¡+0*64kUŒmZ-¥(ØÆHÄ¢XÐd€LÕMH(¢- ¦E@Yu¹:X˜‘@.2å#·Ë~‹m¤DDDDDDDDDDDDDDDDDDDDDKbÎÞÒi,$i͆JdÕ¦îÉ D‰Z(qG]ÔJ¦ÆHnp4›Mi%Ó"bÀÄMNd“B¨©M^›:ó“pÈ¡BÝr¶6ˆjt¿™È“5y>ûÄüo¶œÔï«ÓŸ‘æaÜÙÇüŠÖí˜Â±NþçÜv8WsbbŠ­+½]Ìaûb»6w£—½¤±Êår¾+†®’I-Øj™MV[ ^*òlᢩ)Œ23¡ðõ©¬²£Y̳I¹k“kÂX_kï]É{ÉÙS¹;::½^&üž¶ç%zïÜÚpstNƒ±]Å4ñz^/'¥„ô7WWsª½n®N®¬=*wº¸;÷gscác›ÅŠ0ÇF˜óù<¦NLxÕÙçÊ雸SuJÆ6uyÞNîœÞ×$æó8äwÄθ4ÐÔ¤²…žƒ«g2…TUêb¤ÐÝ&Ñ*lÙ%UT*•³¥T*¦¡Ràr|;f“Е=*•M*JîcM1$v{ȓӵ‹^—ê;9 zUºiÉí¤éºw-¢"A!¢š†„ÈiÉ4Íi2”Ð4CVkY£öGcÚ=¨LƒsY3ªÖi*¦ši¤ÅU%Rª¨ÅIëmJ©Uj+£™8W=«Ô¦K/iu)-$ÒTnǵF’hL"lô,ž éux^L{[Šõ@˜Ðy‡qˆ<Âì!r¢ú†ùïš•¤“V3Ï¥ô®ïµÕâ¢$¢6Ša‹IZMh$ß•šé6Q¨£h‰(«K-²Ôzç‚sN„Ѝª”áRaU"zDž'7 y”yä9¬ŽnMÝZMÓy-Z¶­Þâši¡o+¤¤®ºº’ṎtÐlÑ=zêðf;ºa—¦Òé—33 iˆÅ*ŠªU*ª•U³“HÒ¶b0©Õ“8³-»V]YÃÏVÖíx6hžï]^ ÇwL%og†ÍÕ*“¨ªb é]+%®²’¤¤’”·1…Pnp®h’sP*U*¢½Dª¬ra<|]ku’Lv8HŽŠìÆ•NÎùÅ‹Œ©×)–¶AìSÁ'©kÀälˆM ™ºuIº—% Ü63{§éþ,θ|>§¶d B¥¶I>oi³Îè®AØ¡ÉUǵîx>ÈÛŽÉ„Ø'šçŸZŒvLR½*næìÒŒa6Q>6þ›uìv î8pÞn]•'Ÿ³êt;œ70òb4"ÑD¢%r”+Œp­É2çÔcÓ¨#ÁGüÚp©8QÞÓ¾V›¬ÑTªSÅ)?íñÌÏzÐ_Æm¶¸#âx¾æž‡Àžc}ª7rÞ+™¦jrr*ªª¸1‰¤¤…c\ØÅQÞîl×§:WG=Ö­[¾Û×—Uõ±ØäáÙ¦žŸ¸ðNJJ¤Ý»F1]ÙNºÝuÒI)k¥In’J£Lb©ÉŒ+f1FÇfÊlÇF“¤H;žÔnäâ:¥äÐèLEOC³eUs}ää66S6i^¿GBw±>»êÙâèè”èÇèlÓ¹ø6JªªèVcM:6UZ–ɪ*­K}M0­‰1ŠêÆ•^wääláXªL.(ªurvpݹTªæ+ c“QJB•"ª*É ±¦7c][·nÝTá¦&Ìb©TÙM=g±7lvrc« ÍNc™\œ4ìñ{Û¯­S“«w5Rº pä˜dÃz|4¨=a¸ÁMŽžh™! “Z»96kSoTa¸e>{¤„$êU)SïzïÞöeùÿéÇ ç{ïŸÄ¾)&äñTØÔOú¥ÐÑXš¨\yÍÞ¦<”¥4ØÆ4Æ+M2M,bªŠÂV*¹†å+fÍØÆU÷?KÏéýßìéþV9ÙþNNW½6ýïÆÃ¸ù¼Š©âئ1^M*lÙ³¢aŒM•+wó›¶Mœ8T œFE ˘ˆtí–„8¥ÿüh¬8팽èŸ.ÏÇh/N–œ¦¯Ì< ôxžB0 ˜H(àcv¨2==1Šé#ës(ýË®·ŽÒÒÀ1\€¤«DáQ°Ç,Q± I9zÒ€pw±Uíx'&›Ÿ;†9ã…4r4xuùÜí¦çš‰Ô’Wwrò}q´Ó¿YcôªÙ{—8Ù>›1Ž™»‹±Tã-´Ä;·g<ìÙòàI6Ò¶˜–L“ÆH3É*AÔaÇ)©²rr)ÄÃ&w»–öš,é¾. ÔÂC§‡7pÒæÛβèæã0fYc F0¢—®–âif­°HD­qæ9d4 áÔ«Ò ¯RŠÙ¸^wßÃ8ìxh´½*Y²»ŽF 9ÝÞÛu©$’º;éÍAŽêGNZBÔ$˜h‡‹ Ü]†¢­¢êô;˜MðhÙ/-æ2m ›á5$0ÚXó”'ÜDKÉ0Îýã&…—ˆ&äLK@‡»¾VdÍ-ó 3¡.ÙnTÄÄÁqÄšq/\OКݡ q׉h–Olã1ä†ùå6ó ñ\•ì³N‚¶ñ †´jš&d™&€ë€hŒ}ÈØš3òAÔQfZÁVL ˜ac'àÌÏ>pŸ``w¾;«ü3*ªÊ§Å©U58#’£Éa‹$•GÒ*+ë6zßì#‘ÈŸ‡æþ¿W­¹ÞžÄÝWЛ%õ}+ ‰Rí¸‡¤•^ÅÛ—.+5êUäÕù')´$~¥L•7Óz«q«‰#,*¢*§˜(¨“ÔVw æù¶6~C¯Z–¢­Þ1xaÔÛå¶Î;Nè °uH@Åq$Œ„Œ’H%‰Gÿ—c÷ê§Q* O¤md‹Õ”;Ñ$l¶Ë#SaŒ2SmL±*¦¦dÕM5GµûYë åHá§çùËïòh´^Š[aTûªM5 £î>¡òêãõýÓÕõ|ÛU•î?ĤÊļ´§aà$"B€@ë'î Xu`hA`/~…¤’*c@„e¡”9„ÚÊÈš·éÉD;öÔó0/}Îrª¢²Œ4K¬ovø#"O/.Y8¨h9>6d„aµ20½š‰PE¼g£p䔊±Äçz`ô@u <Á]‹w*»ÏþÒ/ïq õyH)–5˜6sÏviœó;¸çz›5kFDK*DJìòÎ5•EOVäKBIZúô*ÅSlïä³ Lca–ÉNHmõKÞb¶´"ö’+ Ðaœîs*¼„ŸÒÀ™©i`ˆüßW—•ú›ÉÄý/¹]M#äí°4ü~< M»—.=\ø0èîœù‘]éâlPÁ6n,‰©ŠôñfF4¼’bs —ȇpâÁ|^‘|`Œ²>Gëôƒ¸~òqª$ÿÂä6MÑå'¨ ±ÒöKÞÄ(;Ózþͳk ¯‚ª¯àù Ù{K.Ï%!¥P8<Ø=Î/B—"Š®bŠ„û©ŒXB˜”`s&¼îÈ>¹Á·]ª²¸Î¶ïR¬=÷G?Bhت8ø7§}n?ívs.¼Çp’’Š7–WèÄgdÄ’È7=#ΰX¹KÛj€…¹ËÖ/r˲!Är³²Õ]07ÖL•VÉôZ½Ìäîw¼ñÀWô÷–º§Æ1:&;Îâdôd¢j2:AµÐÈL 'R­åä*µtˆœÃÓâØuË€MàPžà”rJŠôŽïr8}ï뎰±#øG¬ñslùÐDýè‰'òëçêj—‚@N Ã)ŒÈXp¦2Cpy¨o§as :Â( (  ^Ê1|Ëð¸d;ª¼Ý üë aÛXìÞPî$!¸£ÔX}€ßg&#‰ ‡ü%%û}zM•<ëuB©?:&HÂádÒ†‰4IÏD›XZ†Â›–$\6(…4EX\aE†6 ­ÁÜÙ¹èî5ÊÜ»‘N·(€@ò†…çÕ5É‹b’¦®¯z>hkÈý™á*ƒ¹¼÷UâîPÔEá pƒêB”èKW@Ø~â™g‹ÎÃøfÒ*JÊž‹"ÙÊ’#(‘ýÕL²-$ŽÂ ÂRERCU$Ë$‰ßÏ÷½Út å’K-‹Bªw¶r?º«>üP!XQŽLnw°lˆˆˆG8É£‚ÍD=¢®vÃÕ=Ëš*y“𡼾v†ƒE¼ŠôQ•Xe{0Ê8Nÿ“ 5ÄS$yöœÑA,?¬g\m¼r—¶R›UkãMø Òx ¯“tÉëÀëfgŸ1iqÁŒ"`DÀÀ»›Î.· Ë×Ä(d%dR6LÍÙc½îÓ€…l!6R”®X­`«ÆIÚµŒŒË)ajƒ(•äff\ÊacË( —̹…ï€}²ÙðD±‘Æi8çLñãgçQRCvmÖ«„±mzÖή;4Oyzµ¼obª*~­ëzÞ.n' ©Þ–:Nç6È8 ~6+Ø”Â@h’uÈÊY$-A%„ò/É-ÕÕX¹ðÀ¬ªfXáÅ2=Â¥ÅD(pd˜¢€Ü/ÜÁ‡)Lf4a@Îk1q8E‚"ÞE®šHoHÈM*©Nd$ç‰|çEåÈî²8 ÉžE;œ‰vã~ÎÆÍñÒl‡¨õ õ6rØÑ¯ê›y×]·ØòpÀ-K*H 1D l~Š3Šý°Tj’3r¼1QðÀ÷ ?sT£l‹FªZ[ú*C•Dõ%o¾6[åø ]/õ¬óÿÒþ©û ûk#ë,G7¯$I>þÏKÚô8iîzœ=è~þ¤¡™¾Ú_±ô`#Þ÷µÄ‚"—ÁŽ@¼ðq‘2ìg²&@S@¤£Ã…qœ¿0¦‰9ÊvO™Ò• €øDÄä+$Œz˜Ê4”ŒF°Ã…5æÊª»Í‹‹Ž¢^*·)}\›ÕËÕšÂÀEð‹ DxEƒ—머•ƒDa WZq²*¥Šú`¯cÊ­ (8œ˜a-/1 3•`òõüçOÙzc”Â` ¢@DÈ_N¸®Bb‚Ì áŽÿVÍvžEæàÁ09 Rk4.J«+bÆ—ÉA4—ˆ‰…W½ýkÓJ,10²ºrRqÞņcc€˜wÌÖ(P¡tÀŒñ`Ð ÈH£$"²-Ž„ÜthtÓ«÷04RµÝîõ½£ßI<]\-ÚGuƒc{c 3σ06 ÓÄëÒ |Ú‡|¬‚6}g õ “Ìøà#p°ø>gàÑoyµóÆi¯#ScË•4Y‡¥»Òô½.>ûÉ^ž¦‰ÃÑüê*Z,d4¶çè´<ýÛ‡àN‰Â ¸NßÇó°èûJ©1§+ؼ>$´$%ë_¿ö6jBBuųk€rŸ.ƒ&CìÑ’½ç§›êÇNº=/lçÖv QUAQtj4«6Sšg9GŽ36ËãE"BÆã¶}ñȧŽoó`.<ç11!®}¯b,$Œ 3dÚØÖÏù?ƒ®µvV-4К`‰²l¦M ,)˜fI¥"”¤-d©jÊËm5Pø›1‚¶V"ÃFe­®ÏZ¶@H`1îÖÝÝ^]^¯„ºòòÛ«®’½µøÎ'"›•# Ãëb«ªŸLsæ8WCùœGÆWDì|ÿ$<¦é÷¼Üÿ“Õ³fÌcXc¶Xˆóg‰¨ƒ½²4*¿¤HúÕ#ulô›I³ŒCE›½[ý¯¿ó[~îtD™ñ>Sépl (ãdÝÖ•PN¶äRivè«orJ¡3;=Í­ÿkÁÑBrŸ²îѳÛçÆ¤«Ìš¤jZYó¿ÐÅh›QÍ3ÒO,Yn㛇øçî\Ím‰ãZWéžÞ‡Rv@ÔXÞœ©‰8’á/‘{sÂsŸ` ‡L’I1¹³`ñÁM‡E°º §Ô(kp'¸£¿¤ÞsœFãy ÌÄd÷ uãýb¸,[Ôææ¾¯¯d4Ûi£_¿ÛïÄ£ =ï{äúJ‡LƒÇîè8zd$†Ü;Ù‡±íV#’ª“Í‘$j^¿*O+æý}ǘÏXó”D`E„R"ÁùÛ®óÅæÈòc{ô4ǃ“x“^F…üUÔf]Q5›W@êˆð˜†åAâpò_TeÌ熌NGZ_‚ uT8m¢gQ ê¾Ö^ªª$ ö,Í!óƒÒ þeÄ|AFD&€f“Û>ÛCì·Ü„\õr3x]î­Ã@i+¼áç Ã…2Š0b9t²ð©öeNÈ¡¬‹Ç!!£…(¢q8ªç‘aì}sÙâ=tý·à±FMêj³7Ô¿¾Æ”…h¬“)¤IA’dW0"ÉC +½×pÊùqx­8nìâº7œI7Å»[Œ³‡|F¹Ÿã8¶Ùɳg'&98sTärr98n13+#,l^)s1¤pÂ÷»bñr,P\»wm˜ÜÙ»vç'''#uvpܹ’Ì‘ ˆ"R…)DŒji¦4]£¹*w¥Iî¶É>V˜Æ1 ÐÆær¯ì{ÚŸÜÙŠ}Ë'ñ\Ö7É”å\Ì/+>ùlÆIÒ"ÙsôQèÔjŠ}/†¤Ês´âŽíÝgøž;C5"Šªrùr“ÓK®Ý@Ö6ƒ¦d_@!Ö @õ¸Næ®Áž ÏÃìéî| |ˆ„Hö  Þ˜œï Ì;‡)l´wŒJyK‡†!^Él<½ú¤…«f½U”uB\›z—(DêU¤ûR*¹â”ªÄЏÃÄc%y˜÷Ï&ቈ(À‹È ½Ï3›î¤EÐ$ºäùß*>‡Vi4JUÜ’‘ê}Jî{ì[Ýn|o:ä MÝäï&N¼íag¯áïËÍpz:Ó¯0êÊ'9d1•Šn– @á<É8p£Í'0|UWe0MÄÏy1rLgbsÎ}x™QSa£*Å>eš‚ømIfl1HKK”QE‡€0N¿)Ñ Î{[¦Œ1&/­Þ†4õw¶_«Ét¸¾³ê’$XIå@©[.Þ¸[h¨$ Jxˆ_ÂyŽ=CÌ;¤à­MP9Ê&Ñã—¹?%χ8»”®¯uåð©èǧNu„I¯·7Žé?€ô½ô}ÅUXYmEkÚq¾X€È—ÁÜ0;‚rõ °w–Âffffw»)é"q$f:ÒÅWøP÷áôÂ"~¡¼{UùRÈ;D„æ¦êýh"Y,"&ÿ°önÓšJUP6ˆHŠ‚râ÷ó|É݃•Wd\X5·« È›‡ha>A0`Ì9A6ÀÔDܨ§ŽþÖ …*)×:S0åeQ<Œ+qqçFs»ÞÜâxctá:'Dà-ä8ŒHdA÷—ã@L&ø dSó6ö½›Íäžñ[jF†‡ÊßdM’Í“ñ6])7TÄl§è‘¾Iúúµ?Æ(›©üúœÔґı;&å6±64dÕÑ£& ÀWƒF1µ[lš;ØØº&É©aÍŸ³û½_S£›ƒ¡„  ,R6(‡\z?q¬ÈyŒ„Äl»¢&‘¤–~7ãúŸ‹»Ðú_à|IòëÂÄPª(ô¨klLjŠ0r̨ ¬¡å°'Iݘm“¨»ÏgîêS¿$+™Û÷m‘™aA,g§³ ¢ÏT똀W¹F¢àiôèìd& Ë á1â ÑÆ€šÀú™a/µ·Ö¢KeccYMgÑâÜ$VDöÏd•[$/@d gzD  *@ÌÓI5‘"eÀ15&)tòÖkUm¯+#}î¯JyD’O9;:»c„!ÙïëñöÈxk'†õfÅØÛ5Ô8Äž^×¹s±ûWKJ'<^Þ4Â=>êrUuF)%ímCž¨Çš;{%z½©©ïò4eI… õdTIÉe_€)%3"ߘ…ªÊ/Øp.qÓL!Œ ;¸Ñpu}-LÎ<æÑMÕ2gͧ ÷jMé¤Ðé,Ø)sæ²Çg|íe¤­sZMEËšmÃ’·›ôL§ì8émWdÛK*ñGäó\G^<6XØîx!—“FÈâ7öß.Dçð\.ÂÀ¸"XXà{˜}³×©êÃSF/&‹=Fl7AóÉŠDéIEo,f@ð”àiAA'@‰/U¾øÂ˜pO¡ð{Þ÷½G½îz}[‹½SD¤ºLÈ[2ƒ3 Ég Á‚Ý38 8I(½µ·’æff´ÓG’yG…/µT<¢$}•.ÛN °êïža¿ã|;‡z9WVžÂ¢œ§°A{jÜé€w>‰Ê'IÀx¦ÙE6ÆQEÔ uB±:æ±~ß­dÊø?Úæu¬z¬l:ÙŽ ˽8ˆDIÉhú";|²þ0ãßb]þS]Ùïü¾„»Öõe“àÁ‡M0ûJó C_…¹PŒ•„-M#Q6jÇúq1µ23îÜ#ÐÐ|ꦃÔRHñ6c¨x9€* ¤E=E[´=mݘ֨P`7°pÇGk=/#+MT5•û_â~êIïîûf\J¾Ùíù܆ôàªÉ‚¿st(ëM;O ¾™‡%󇾕'í¬±”ÚácnØ”ÒÒ„¹· 4–6Ø­ø­º¼íÚ¾ˆÂ '\ 6÷á¯j‰NG©CÈH̘ÙGža¡%ˆàV< P*hœ¾pEÑC moT_©aî “ë.´»"Ç[8Rþ$:1åe“ÊHð‡ìhïè;‹Þ÷<¯Àóöt;Ò>á¤|Oâ`þ"¿ŽŸ×D²¤ÄÙÞØ{0²Œ´¢¢J‚I&3.ÞF÷þç^¯R²âœ5ÆB`aôˆ`7å4•3íÛA†.&(¶¹\­±ÍʨÖ5ŠÑœê0^ÙvñÎn·7*ÜÝ*@\s°Je਎EÌVI$ŠÀVA-¸3 „ ÂÊÇdRJ*ªªª†––ëÒ‡Æö¹¼oJe¡ñ>½ÚãÁÛ7µ‰Y¤!ñZ£V­c—±÷ƒ•‰cÑÕ8é­Ú&Jó>r·É³eî¶¿ &ƒ‚#ˆ{yxÅå~`¥>G\'þÇ¥¯e½Ì“8'ƒHn ˜»ò^¨þ Njê³…Ãqu™…¡TPæ{ÕoúN¯ÄìGøêïµaXe?îU?&bÕµ_©>“Ùe’ìA×d3 VSvV¾i¥{›®eqŽJ K¿7–Í‚ÕO¢`&ã3q¡xME6“Ìå®—’üùe…qbõM†âÀ8ž=žã5º¨åß{6=ÝBq"ªšI*¡"èd”z³]ö›Õs»øyòÚ`3‡üž«„9URáŸN‚Ч«ôHE:Õáר‡veùd|Yërµ,X[äëQjÛe¶ý¯­¦íØ+ƒ·ó-Ófêb›Á$ `ŸÁ™Ó£ å^å=³¼ òÛð=>)¬åAWÎPA ¬ÈØ>ñÁÕ.Èk½ÕñUÖ}p¾ÑÕ<¸(¯t01øÊïMá¸: ¨¨p #Aë>X˜‰Üé¹W.^›J«PÑüEBÍ`$†{‡6hÞ¾¡ÊÆ\;š5Œf1¯Þ64iê{âI;Ÿhü‡Üp¨ …((EÚ€‡ço!¯ÓUàû€:¯gLó¤ÈæjõåÖ 0f¶3Ô}cä@ú¹ù¾Ï§ÈÌö-ò¸)æ£fŸvZéú™ŸÐ³jÖ,«7ök-¯ÝôÈzOIï4úÚ[Õ+Ëy/-å»m½Z—ì‘HHHHHH#þÏü_ð~ßü¿ð×Ù}Iyù¯»ÿ®÷ÿ$­•lé»Ó§;Ó¤'!8g= È~’Sd²ç˜é–.]Ï“Ùýžuyý 4•}-3¥Øþi Tn6'ì£Ý–þmÍ©Î꿈øÄ¾þ’õ~=_v±‰$”(‚ˇnØx¬?x78V…¬¥¶Á„’cܼÕ50úÈ~ºiûmÏ‘B^ùêã> ˜ý(•áûÊó<¶‚¸=ºl_ßÑõÐSB*/–£R7´¢ ˆ=Lg)MMÒ¦³Ë¨*íüßz 1‰Õ@+Kª|åŸfE`;ȸ5î{¸Êö6©¦å”YóÝ݃A†7Wñ}Ye_•kàM$Ɖœï2@g-%\S$"|8™ƒiÛá÷oÆ'Iq X`ü–qq§ ß~Yóç0G !âS¼ƒŠ>*nH}FHíª Á.ž¶A# ¥š`8}É®SUðƒ2Kž÷·JœÎHL†[rá›G­²²IÉåo=º,=&¹gÀðö3xL 0Š0nÍSÌW“†¸Tô6vÇsä9æäˆ-ÇcçÜ'AgdD“gO—eyÜO)T¤\Ìw*~F-d<ˆÉû¡Nuèc;8²çÌZ¼Û÷ï;c1ÕŸ7·“Û iب‚æ|µE·ÁÔ"jˆ§àê÷*è{+üå7ôÚ>Zx®T_ïüÀñÄIEÙó|ËÊ÷)/žÃÏ%ÓH ;DzâXuˆ}"º¶´œ#äñ'A_•áü›ö¿¼ß²×å_»õr¹ÍTbwkc[$Ú²›j²T¦Úß¾õÒbÕFÖˆL–Ö´¦ÚÛ,’¶Æ\®sUÚàEFØÖÅöß²¾ª yèøüH*ØAú½`ïIÔÖYìU^Ôš­{W˜cD!ߌ# ùÒ½[ÚF'Úø¾ŽÌàã¶®MŸgã)}c1èCfðélªýöCÔ!¡˜KÊ¥ÿ_dõw¬ÍŒüez‚ŠÏ­$y#;³@›Ø‡†n8œøÖBê÷+'g^Ø’Ãßqï5Žú}z‘E“¼Ó§ôÔ,ýg’*Aqî¢Qz-м8 3 yFZú§%ÀPO\ÎA®#ÄÝ ¸\lˆIÈÃ÷Úu³Ãvʆ…ÈaLýUï°lŠØÃû~UäˆÝÃFÊÅ}ï7•ÇÜÝ?aÖ‚8Þ¼_¸ Â2I)OâœB*…üMóý û ±6Û£mB›M[ïèQ¨*oñÕN©8üB¯ Æ>Ä3³¯IÂÅó£d †@$ 3îôlÚ¨#&R¶L3Î]Õ¨¬jA ‚’¢20Sðâ. ÔnþÇð::gn áÏÈl¨ ð€»â) §UBU¦’R I „©nëWÜäɼ±ÇNDR e ¢d‘¤üJüںߕªùµù½yW©ÝVb‘‘d’ ÞþéÆ6¡7ú“É9O¦ÇóñÕ,-´BÔ^Ù‰ý¦¨ˆú•øÎb¦Èu%o6–½îÙÄïx¿/[*c„ÿ#“–´þ+²è‡´Ä\!7dn4<ÒÝŽuçET‚Dœ‰ºRH¨¨ITJRIKd´•–VR¶K+-¶”’©-%”¶ÉI[-–¶ÒJR•JU%¥–Ù)+ed’IIjJ’ÒËmB¢ iÒª¡×ÿ–ÂIÜâ쫚Eùð¿—É”Ôj25‡eþ–ÈÉ7Ie"–b^…кö+/À\éÒŠ©b#Ù‰˜çÄÕ2åøŽ "Ô¨*È´`Ûl"p•¤)I6L2ÁI*Ô°Ò|ç%Ù“ŽcÆ1ŒcÆ1QQQQŒcEEEEEEEEEEEEEEG€‡»õçÑ!'È@°¬ƒÇÍõ9‡Wá=µ‚`x˜èPŸ²á\ß‘ñ~äÑþTÙj£¥[†cr‘¢°DbŸapnÍÔ·»°£×*&•) Çùoÿ+ß²'Dÿ¥óFûo=($yD8`>¹A_xÀ8=sD !‰‡Â;¯ßÚÉÕÅð¿ IìUXc(´Æ®]T¶ïÁ˜ÏF¯’˜É @‰WŸ……%DÂ}ãÞ Èæü€>ŽE¡*\aD᪋#5A Ç ÓóÄ>Åú#p ü\ª_áÚÞ=å¨ÎØæ*‡“(øÑød‰²ŸÝãV<¥µýO” é{(¨¦³¸yöET H9 PвùhE:µßè*Ä=ðÿš!Í08lû£|ƒúZÅ?þ¹èãÊ>9뇲(¹hÀ‰J«%•b²A3æé¯²«“þ•æ<ÑÞ¥Q¡b‘€ ‹X’È™fB¤û¸%–K"–K5*Vl´ÒÌ¥5ï«·iM-5JËSi¬²Òe6ÿÙÛ^Þ[;Wm|½»I•^nÛ\ˆˆ‰µÕÕ]fÍW]Zë6ifÅÌ1sÌ@úÎc˜ Za-†jFHÆI.Iƒ0`±dó°ÓP†¢˜pÌËHåÐ Žh–M˜&LddLŒC ‘bdÈaŒL 3$À¸‘FkvÕÝÓSSSRCY­×UØÌ’&‹)e™‰‰aa™ EPÐÕ*J€Õ%%R"R"U„dÈ™ä:ý¶–ýד°óIõÇn :Óñ³Çàÿ Ú8´¨{¥ B 2(GŠa\‡ènØÞ$’ FçC$à üÉd«F Ä4†z,4Ew¥—ý>"Ƴµ u⟪n"˜‰¼¡Ô$p€¸ÊØ`)H}?éjýõ|¿-^ßgº‚=07u‚'ì¸XUO¿"Š æï¥b­)õ k[ðàÙUÿû/ÿOß„D?øƒéöìSBÈXâ:éëÙA2N ø@Ô ?áÇðÉP²NpV*²aŒ*˜»P¥-p¤¨c*J…˜µ>‘b‡"`s(Š;|6_ôq¹æxÇþýkèÏøšÏòøò?‡IUP‹$‰!ý?㪋évǬ¨§>ø%œ,y'„Ãÿû s½z§p[šß¾ŠF'P#Ö”Ÿç345)¬ó΂Ã##™×9Š(IkI…H¢‰aOË”‰–Ú«¼-"ªÑU€ŠŠAÜ6)Ÿ:w½:GµÏÓ8‡‰Qç:ÙEøÏËJPÐ4À=‰8?¶Ä(ÂŽò× ­ ó òÅH~—Ž=YOáÕD~T6¦ä<ÁúGü÷ň“_ðŸ2B¬$_•©£Xg†âôET òˆRˆª}yâIòXŸ!ê3í¿–Å,ú'ë·s6Gì?XŸRÉ-“*+†1†eaX˜Ài­ßCJ£î¾þ>‹8b«" GL,$,$2öÏ@üK‡x‹üµH¼pÛ¶`U€6ƒ1"𨃸ÜbÈ2Bá …ÊÃa£ä0xËÉ,¡aE5ÙÚ¹&ØvV"œÑfÏùϹïÿŠÔø_§]¿ÿÔÄUõ1POL„„$ŠÿÝö¾:x¤~®im¥32dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&""L™2d`*AC¶Axb X“q "´Æ*¦0É Uú…B?Ûµ•ÓQúöOó-–~Ûï_Üþù¡;Íœþû üááOèα$vžB‰'Äu!€¨¦¯AȰ‚|…P=„U@ŠŠD6›„6Š«™´Õ¬ÅAÑÚŒ°DëIŠHÄ> °8G¶p¤ þtŒGr 3€û§ÝnªýÈ–Äž‡ˆ’Nä¯9ë9¾OAЖ*¢%T¯…ÚÆšX«*–AêI!Ä“÷”ED…D…"#PãC§qR¨dFµJ•P‘a5á&Ž’v€%³“ÐÿD'Îm#eû“bRF´L„ÄTØ*ÁÅŠ!"3!óH6"âzpfC 4Cœú§õ,ù¾å~L–@¥Žô<-R,3Ž18®@¨®È6"ÀØR¹dÁÞ\ª"˜FÄ ó§C* аäjI©bCÁ»!UÓ¥¹¥'7”iÏIœí]–ÚÆ(·ÿޤu´Ž9¶'2°®þ™æ|“gtÿGRNå-Î]ËUêWI7á¯ä¿èÚÿ¡.ó<½3Õ»<Ï40 eÊ[“2|`¥)¡) Q&ô”M$šÑ¡TýÜø¾ö“ À€H8Øí"CÁó…nW«üoÛF[÷¼Ͻò?•}¿ÉÍO1 úGpìãólqsÜËçªþô €šÏªZ•6“x¬Q+ <z²?¼iþÚbgf~'ßÉú<™ìˆ%ð©¹1ý;Ûù:ó/Û|Ї "Q¡Å¨2•LJUýy ZÂu/¼G ޤF ªþRÉ[H8‰(á‚z[˜w…!u±ˆdXýÈ]y‚áCG]û-Kìÿ7ñ²ú)2 mê…ZõPªJ=Øâ.EÚ—ÏÎúdçŸL1€ë‚¯áAñþ  {¢zÿb”ªÔÐLi¤Â”Æ!„”²ÕÓbÍ$”&›îkÏŠ×Ö›{ÚÕ 9Æ" 3ÿ?ý’Èt1CàD*2I$‡gøÞ_Hj±ý¿c눉!Ž«H•;*Ä –oeOÌÄö½€[ýïÏÿvß/áWéiÿFgðul›3 LŸèþ‹ÑþGúkѸÚN´d¢¯ÍßÃóÒíÙç(…û5Nz(‹«ÕWȧ¯ë{Ï{ÄPxú@ž,JâÂŒw¸:´Ó‰ I»%DÐÂGÕýûKH!Ðl |€S?)é)à­¦UV–eWl+r¯ÝÌJÄ–.w?%ß½ OBU{‘Z‚F¥6Õ²ÖUZb䟷?+û[ "£÷j˜ü¹ €§'ð¶;é8~* Pßr°ÄDÿž ¨È_F[ì<x“.óÈÜÞ]×5Ê:]‘}ó´ˆÆ7§zº.f]³ÉùPãã!D>\(ñ¼L +èÈiQŠg/–ÃmòeŒ°ËnY6`Xæ¿ñb`Ÿ¾ÊJ÷y ÷އÚ{¸ÆÅZ+b¡¾ã¸?'þÿ—ÏþQµâcÅû_ËýÃÓäóÿÔþòÃû?˜€xPýqUDC'­ö¸©éú%}ïkø}Fè"žòŒÍ³KE—ñ¿™é¯è‰à=1UE¥gÃiéÃéwï~k/WaUWùïÿçþIʪ¾ŸþŸòú_Íý¯Ô}ïkÿ—'ôþ/ÿ·¾‡Ú¿ÿ~ö“ÅÉû¯é~òü]ßö´~zü+ª¿›õWë~­ÃÿéþéüãuüÊÿ¨þaýoï_²ý‡é«òç«ôÿÙ'úŽ~¿øæf™˜OÔÏó0Ÿ¯ŸÈe'Oó=ô“ý¾Ô’xÖÿ’ySù8ß=®ñ|þçÞ‡ä‡Ó‘ö¿À,‰ùAh=0£ð©Ÿî~Ö°¼ü" Q2ŠI¦U…ËüS?‹®Í7Ñë®úÖ¿ÒÖQ_Ó]YÞ^§aj8ëéþ»3óÿÕýÑü™‡hJ”£Ü¿àHÇòÄ>‡ä6"*ÿgòþÞ&QTI ¦ïÞß½D?ž`@¬.b@?þ¤N…ÉÓb û»ìûjzŸGN™ò«•UBìÃ;êÇL&>¥³kO(g¿èÚ}Z·ý_øí#|Á_Hþ~ñÏý0¹üSÉ!bŽÏøjÓõØÝUÍ»ÕÍþ£†ŠÝøß²îW#Šˆ’ R%$‡ñÊ‚pbr’qJ ÉJ EÇg5lAɧs›ÁÜä®÷‚¶W{¼ìì@°”xâ²r¢ÂR"‘%,$ IŠLNTEHüàÅ’X¨™L¬d47(™Q÷h>^9?H†·n?¶Õ÷XðŸH}V~í‡Øü“ìk€#"sSxÚv~ߨ_ÂH!&P(9Ï–’"òÈX!ûKûÏ{üæ¡ÿÐó<˹û?þÉN·™÷¨?J—vç¥é\.XX\ÿ¬Pé®O99Wû÷Î>Ä÷ŒNð¡£G£c ¦ÌVé÷TzßëØO‘ÿløæŽ<¤ÒT•DR‚Ä"Å{†Ÿïß+wÌñTH±#þ^C†#†%tbBDvWføç$›£þJƒHpÿ–æÇJŠTöŽd7l(8€qï1³„$d„c7ZÿÅ­óM¬RM¤ÖJ¥jOJ̶”•±$ÛÌx±‚›Ö••О¾'êò¶¥Yjú«´fDÙ„¤é­Ò¹·eŽmu×VèkfÌÌ–ÕÝ­um2SªlµYLÙ“Q ¨’RBȉ%4˜™JÿŠŒŒbĪ˜˜©…µ+”„Œ“((¬Ì°® ÛD( @Œ"F2 >£Hîô²|çqI‡°¾¥=jøÆDÿE4ljMÕ[rcC¥dD›?u’ >Ë$ÞîÄÈäá©¡…c'柕`Œ>TpOÇÕ"GÍK=cM>yö¬=Ir¤yÔ¥dU'eCVBÙk#Åfë$U«݆(zÔ1a²Âqm‰XIV7M§ë¬ììø]ÒB~“Ò»‘¥1¤òUS¤’~ìNj"©ò(ʤ¨wNânp*)%Š¥Â}×ÝvvtO°NLx¢½÷bÏûWBxIO´ÓÈóÔ³ªv8Cs¢4•=J1CÍ*v @PñQÿJîl« ï#d:‡ÿ5IâæÁ±GáŸÞÿà´ûd…OBœ>V9½iÕ8zà#!&x²Iëi5ŠV)©–OƳd²ÆÌˆ"ª T©²°’¬l©ÓLH“ =òÈ„G5ˆÁ쪖 ¨‰U*È6i…r$Œü.¤ó©ÑN¨| Þ¥U‘Jªžë'4õ˜î'rÂUHLHyŸ¦²(e • ð»ŽÌñzCƒ³†è©ø„V’¢UJT‘)U,‘;šm1à…G¦ÊžõPE‘I4wµö#è3”tMÖ8$_èzÿäýï½ùq—Ýùît²·î>ì’}é&ÿ–¶ªŠ#ëׯ>µ|óJ¾¯ã #ylÛš4hÑ£F?ºñ·4hÑ£F4(Ñ¢Å44cÁ¡, `K¨ñãç\sçë{ããºþ>gŸŸ³õ盟^¼úu[ê}K~,‰’ѱ%ѵõ&µÍº×à[¾¨¡o¹¾æ‰³û ÷9"IºÉûçÝ|ï ûå~ã÷EN¯¡OÞŸ£ªé¯Ów<*¾ê÷«÷g%ô‡Ø?aSï›Hæ¥RcÎÆŠL70(±AAAFgY}cðþÁ=‡gÉ+¶¢s‹«òÃÞ~cîùPàÐZÔ.|αî…ߥ –ÒËY”¤©JÅ–-î¹EÅü™ê~2¤"Jç±¼ïïyÅá#²dˆx:0Ù)VIJi&1"EŠ–Ä:]Y/]›N¼¯:¼×1UÑ+%XYm1†Í˜m ’–6˜lÖ¤¯škÔÛ%°Ò«ÐºRRÕ›‹&¬iK„È,¢UšÆ*SE T7aÕø›¦ÍãcO'à$+¨Ýä°†;‘øPî#Ì÷Å9¹s¶Aº¥X“³ZUÔ“!Ì äXD›ÏxúþѨ«OM1ea¦’bˆi`*²AÑLiˆŸÿÿݳÁáçR¥)R¨TÊ7ó%ÖÇÜ”>™é0±Ð%Îpȹaä¿~í½Úk~qrªµû4d±b-Yª<áCQdÙ2e’@裄–bÉ`XËÂÆÅo(›R8ÁÇ$=Å4ÝÙÿ³äØàõOø‰QêmÍ¢ž×!†Ðb:ÈqB@# aûÆ~¼¯ÞttŽO$Ÿ=#æñ0W5WGÂØ=öîÅV11ÿbFŒ0ŸFÍâsNy$HÚ§F”'TÄ:’&”þ»ÉøSñ%J¥’ÊT“&“I(±d%UUŸgAê?±‘:,ceJc¦Ï‘4p“wª«úèå’AUKJD––ŠE*JT¢TŠ(($•Sg#Ÿ)(!è’½-±et$*?¢ÑG™]ÅT•:$§Ux¨Nä|9ðY6Sš·nÃei\Å|m±4ª²Et) Ø|­9ªrY²bgÓ4{怒ĂlŠ˜S¼0.AHDñT ¥Z²&ÏÏ GEFÝìibMÏÊU*¥e‚Û²¼Qü…m9ª¬r ui4hèiK#Ì| ?Ji„ÝRU’« _­]ŠÑR= ‘Íkª4ÒLIâvD†Óƒ<ãùƒÝÕ7d| Änª©*Á]Ì&Ê-JE}ü[VU#aPa(Ä#þc m1Øi*Õc«r“Zm)–öºë)T©TWë&í-œOÀ¥4p–VêÅ#¡1H‡ØôÄx8`x“ÚÄD\ÆáÜ;O¤yÁçøTzà‚.IÕlžÌÂÝ–aU¤ÁXa^,L?ºVgêüóÓ®&ù-¶Sš±Uúò·S¡‡©úóóΓÞèsj °«1232bÕ磽&Ì™lس´Ó²6*b¥J•¥c‰«ÓVrdÚ+ep7UaQEm´Ã0«…œ Xá°Ê­ «X¿ÙÂ1¼B© ¥âË%X䱦Œ¢Ê—pÝ­$æHnÑ4‰S åtÚ$‰QRn­XÇÙ‹$NkŠÆ™›#þ°ÝBÅ–º5Í£$«"–%"ÈIà (¥’¬m1ÞIµ!¹b¬b¡Á™‘#x,ÓZ—S$±9´Æ—‘3tª*+vÒ´èÁ¤„§&ÍÍ)c{&&XfìŽJÈ‘¤Ã¤ÒnÑŒc!V1˜ÄªÑ1bbÛÁ˜Ò²JI‹**F*p©&,Vˀܥ‰Ka(1."®EнUf¹/7R帑¼nl˜¥*Ì?£üƒÌ~þî ä¬)Oe-ÊHJB¡$ÈtΩ…˜AÄA6ScJÅ•©¬F¯Ç"—ÄÄß|xª«Ä±¥J³•”’I»f„ÑR›Ìû퉧h˜´·1ŒR»1¦LÌ“’ó[6Õºe†JвˆÝ…sÔ‰ãùèöUá“ä±ç$:¿N{Î$zîÂÍœØÈÅ [·qp0„HÈÅxø FÄJc(ƒ€‚#JB¤ªU%)$á&! ,–JRR’’É%²[*•P¥EJ’úÝ4ÓBàðpE?^Èþ6¡7CD“¬‰=©*>Ææ=ój’¾Â¿ÃVê{x¾å¡£}‡ésL‡Øü„¯¶Ó˜­‡‘¹³sD:Óò>ãNóÉUJ)R¥*¾§Þi¥sB°¦í’#d+ÉJ7Rai%²¾V̈(¤$K¼Ùâø\Û*£ÌzÉ<ï‚ ÿ3„Û_ï-Y[´jéW2³1ÙM–2dÒÍF§6i³ÆŠá©XÑlÆ0–êl÷b'E’¬e]šb=JÒÉ2Ã’8–ÜIÑͧ¹’n:¼ÉÕæSÌU=-â Ú7 7Å9»)žØw6l£d=I':½H÷!î| ¥TªÒI6h Rú]QèHêÇ|'¦špž•}+|.áìVž…(÷ÔÇ‚#ÅC„aQ,*|ÔèTƒÛ)1FÏS ¡X²FöC æQñ•'zªPòT˜¥R«Ø¨øýä¾xN&í='±’« Äõ˜³ä]>”yÓÅEUR©%J‹R”²–YId¬¥e¥¬–”¶’Ò¥R””¥e)RVT¤–¥-’’Ò¥)R”¶’VZT¥¥„¥$ªB¥W²I:DZøÖZVH96ó¹´ÖÉ.ãáRPéS „ B ]òù…DW÷3Êx{PœuêO–íòdXy qì8#3ákËÔ""˜]üô§¹7rupÝ»N>—fÇüÕ4ó1É\6aŽl6WW¼èݳ…Uvs;ÚM›°ÇFŒL7,íyØçxQ&6rÛF·Â„‰ ‰jfO“,©ÂÔ–¥qÂå„¢çœù®MAD¬ê©Ô†eŒÍÏ#ÕË#rÅ-bªqE:­K—²å,îKÊܸâ)Éc±4‹VX»Û’jÎ8áÃzµÊJäadè±Ã§Vd+›†žg[4èÍI"<,áéy;::;ñÇ'GÇ £ª¸h²hn.(¹‘æÃxî."‹°ÜQµÍJb¼$èéà¦EFñ…‰Ú„xY«WG RŽñNö&æ#½{¯%AØGƒ‰b¨‚™ÀTM …wŠQ´(3‰¼ÉAKG ­4fMÎŽ…J¸‹ âÀU9…ƒŠÝ‰ÜÛusiŒ;œí•»9tŽg#fóÔêèñêÝÝÛ\ãÉ®›êe•Uººº;8q¦Ý›ná·{†ó›t;ìJ­IÙŽ®©ÑËbK»¢_'&ŸêÚx»Ûº:s-µ$âVÛ#ÿ9¸O9ênLˆ6"*++q !RøÙhðåŽÌ€¦¤àò6……ÂŽIçx!£°'WUvpé>³'I»}EI†‹GŠ¥wá$Ê—ñi5€>¬´* âÁ ¦Ç´Ú=gFíõ¯AmmB‡¹VPóÞ Ø.ZhY0àÑa!ßžÃDSC3qc„7;]®ç`by ¶¡Ù¹¢I&Ga-]Ž ÐEËM &,$;ìpY… «kb1>p=€€4:)\6i³e4uu|mœœ9´Ã#™&U¬¶cJ)§2cGe¶lÜ­”¦¤Ã JèrnÓx•ŠÝ¦5fI•k-›8kg' pl®FGÁúÖrHž¶'f#³³M$ÙGT¶"e‡Ò’FM)QVi»²H¥FÌ1)D¤ª©*¥b¦)¤°Øj§WqѱLJ…*UH”©"8%åñ×U|Û}ç÷ßbý…ô5òèi€ «*ªªªƒ¬ˆO€õ'CýÁ~ö¹½÷ÜzšuŸf;ÞÇ_iûJ’ ÜÚGöŒX÷ßqͧ:?xäõ*Jÿ^Y>íhÝÑûe+ådİÐÚy”i¢O±îláÉ>…|T‚~FÏPügGµ)=Vv{é_i5®Mxðâpäi:U”¾P|C²½x€ÐVºåÛJ(Q „Â'²* –IJÃ4BÉyƒ6Ãu^-y^Jí)bWI%I$—W'‘KyReR®†’¥BJ’¥(!R–RÒÉ[kid©m¶’ÊÚTµ%•$´’ZVI-)­´¨Ñ¶Ë*µ$Û¦©5¬–ÚZÙjÊ­66ÙeV¢Ä›f®ËIRÊ©e©Z’]µâ&›Vm)¬›l¢ÙmJ‹ITd*¡U*ú8zßcg’ÈŒxBª Í>T+Îûÿ·ÛX’¤J‰FñÖXI"ʨ$Z²%T¦²É–Ù•6ÊYL©YRÊšÒ–MµšÙXÛf©'7ÊÓ©ü½Æð÷*pN AGį1ßÿáï¾yß²±óÉcØ~ƒM˜ÐÉUZŸTI#™b4ðp]’~“ŽÄZ"Ûe¥±?1gDÖã#ßÂ2VÌ7’£{Ô›%ÒXnüŒCJäŸ#³ÐJ4n¡ð©éWÎ~ȇØIþB>NocÓ™©ÜÙÜøS±§s*{çèc²Tø¯äf„Dm ó§ÐÏÄÝyIœ}ˆPȱ)8JCÂYͦ‰ *´Ä%”©h Yi"bÄœŽÑ4ùe“[èßB«æc4´•KZQ‘‰€ö Šuˆ½‹ ¹Ø00!‹Ô'!7ÁÝ›cL±ZÄį¿.+I妺˜ÚbÉIeEÙ6;•Nç±l©4ÃBõpÎQÕ:º&TC¬¤´pä³"[6KÃЪîpò}ÙºRÏžäË Æã=k²Ye–E(Û2Æ­§—jíš%,¯ºÈŠóÄðäó76Ió·É$&(èT•^…{ÃIVIàñMª6+E—…Y%Q%Tª«EU)7žƒdÙ爛>AêN§“ÏÃï¤6ï-ó¹°ª3xšö–êÕ$mµe´¾ÞíâªÃšªÄ¶³ebƒ–™íX&û°ÈcíY¡¾"Z²­U¨Ì[!µy&Ì‹D,ÙÊ4iÑŒiÒ¬ª#SM˜dl¬URÊÑ„3ÖYFD“k±¥À**ÜÌÓ#’뫈T \×,ÉÕÞR×^åtÛô »Ri&JXµVEØ©ŽÄI̱)6ÇÑ &èx'D$õ¨~'”‘¥ÞäM"UE>Ê1bOyRMWïÏî™´¥R¥=ÊÅ%†*2Èo8iª vE„&(º-ˆªäX„zÃÂf`X‚ñ\à(¡X X° ÁUIL!I±±Ò#ØzŸÕ!éK[«EŸ¥Y)d,©$;#èS<ð©-’C…J9,Å=Î÷Öù›'¡²·xåµÓ-ª‘µ$Dä“O•²Ê(á†Å“E‰²éM³zÙ>e›“•œPŇ≠ÉZÅ]KJN®#p¨,´XU!ÙUq¿¹³vìbá72?%êTNªn”[tÌ·œØÙÆÌw;¤Ã’#eŽwW§—ކ®ÛI^Iu®/^:»ly,®—¾êëß%¶J¦ðänál;JªRT©Qh²‹$JEIb W´ŽIa7IGqB£Á9'x‘6i´c ìaÑÌ¥O°ûÎ÷¼8v’E|ã'ùNO7DÎR@ÅA$že’B6'Õô´[jËe«¥²`ýc¸÷,Jw±çi“ÆOxó½i´iwW ¸5’ÄÉdU’«vì1¥{Èh= šyÕ‡#¨U/ªÂˆÂ! ‚„AX¶+XàvOט±91Ba³²%r2L„b’£PÌ=f(”'3NNÚc‡F“¹Éº9¸CNÏ'Tæœ)wg5NåW6:bk‡6é¹ÙÌÅ4pçÉÄÙÍÕÆ7lvs.LRÎŽ®®Fé»›»ïÄ7çÃïhÅ9'fÐ۽ѳ²¤Ý¹ÉѲvnèâw±³¬ÅŸm¶TéÈ®n†¡Šê˜ìðãEÝØÿ›u<8½ Ùn4ÙCgঈC;4¶uW7‹\çG2±ìwm[1³MØêÖ«i³¸ìê­4ó«›cvœ•³›ÅÁÙÜïw'6çDäŽóêSß>W¹²lWs‘=>µ%K&ˆúT.ÐÙÄl“d•=ry+½£Á=N­4ÁZÅR±‹$ž‚¦¤„ø‚r“½‘²¥ˆÅAŽ%ÄR"ŠB ûgHá¬VÅþ)làäW ï+Á*rÙd$‡*‘-B eM!î÷Ó®Iœ[‚¾ÆM)ZMŽbw£fí½Ì™ µRJUûvÍÒÙ%+É[ŒalÆXŒ¹a˜ªùšb5rÃ*UR­“ÎûïyȪT÷“ëx»ŽF l+ÛZˆ#…1Ùæ1RNmå{íŽùá\VW°â?PTTº}>ÊG]=Y$<ï’Í“ØùL‡¡êIäû:½Í›©U‰Ìû²C¢ªsaÊaGä|,7q1àð¦ìU ©ÔOŽURrQVD˜¨•R¬òRC%¶ªT°T£aÈâ4§€ï FŠù‘ó(Xˆ¶9Ê”¢½ÒyÞ$$&<ødøþÔúÚÑH²ÄOÏüKˆGåÂ< Oz­‘÷Ÿz)ð}Ð¥iül~ˆünÒ?n þ¿ù“øçê±:¬®Ô4•* ØÙ‘ÅLH‰)’ªAM1Yº Þ¶{lĨ,­0Ê*Š`T.¤",¼ÿþ?qÉ|9‘$N„岯‘äï¾b©l”kq€RH°X)/ˆ™í;C$A'pþ'™_ ¹H»Žh„ˆ¦Õ@õƒî =GŒyÞ'&í›67nÝå6‹¼‚›È ‚‡'ˆ±¶ä6óhñ˜œÅ}i;IRH•ñ7UlĨöTB– –š}Aá[§Î0=Ð`d¦ç!9• Ýa‰Úbi Ñç8 =Ò(wˆ8EW"ÅO}D­˜cLb¤ýúˆÝAûèx<Ñ#G­ä©2¦ÃH¦»—«M‰$%+i1ó4ÓÖ§zÂvW°äñháÉ2"uwÈö*’”ða1ЩÒ¶Á©$BT“õÆfd!¹³ÐØrm]i>ð"FKºÚ|J­\,²¬Am’Ú¯•k[¦µLØÍ´Ö­U&©L…S ËY#é‘ZïcïBÁ );Ĥ$,Dj?O.ÑÁ¯B}Û$ðø¤‡üž®«*Ô²§eŒû“Uú¦2‰T˜TÙ^ÄÆI²Â¨0 ˆ®"" ÁÖÆ6ª÷—[Þú.Í$yt÷ÎŒ„ÀÙm{ïi Wê¢Ùsôõk烮ˆ2 QX•SDCÜóÀÁbIJ‰QJ§¦„ø óâ_òå:NˆDG¾%v7ƒÔHo’•UeIRJM-•~]WJJ±ç•Vƒâ `,!‚£þä<¢9&ÕdsJ’¥JR”èŽÄn¨’`p²#søðÀú$ƒ£gR+“èl›£ª1$dIû€yÀâ{õ=ç)$TïrNHÆ?žÝÃí#©ÚÈè“öÆ*)IRI¹þ}~7W'ãcùöÉÔ›8W ÅF)ÈÙ"«Û«ìةλgœcý ç5<Îe””’Ivߟ¶ÛäWá^Úªá77ƒ´7}Þ7ÿùÛÛ¨‚§”žÚ)»õMU“á17i‰…DÅ•aV Z"%,þ61QR©E%"Z¢Ä¨*ÙëÃm7ÔÄI‹&EU]»RLK%XÙS)ŒƒY%“"õ%×—™uÕ °O@=/sî»@$J¯—¼•m‹¬Mø>Gäînì®æbÔÿcæóc˜aÇü 2 ðpl¿ÖËé¼3@§–ºÎ‘È)Я"“Ìô¼‰%%O:DÒ¡V"äÐ/ÇÐO« p}%CLáò ;”A6›ªªŠ¢©T†Ìbi[µ¬fšÛJe–ÚÔÙIV(¨(¨EY*ɱ!%*”U‰«‰T…XJÆ$cÚ¬QHFƒÊÛ#q?¦_в©î&ÎJu}ÔàOÖ”$Û&¨ªQ1 Ù)-³Q©›l’X–ÛŠÖ6ƒJm%U¶6“[QVÖ)5ŒÒ2’6 DØÑ­2ر[mJjÛQ¬T•‚¬J’D‰´³RŠÉ¬d­±l–¦jÉP”ÕmŠÖ6¦¦Íh•¦’„¢‹)IM&µF,QªÓ53¤´…… (´©dˆ,“El–²–lªŠfÒIj+bÔ•“ckK)’IU2Ò¥¶©6Й›e•6¢Š€Úm“X‘-%R¤²*š(’Á¦IB¥¨ZUJ«%}ÇàöSçSTAÈä­4ëaFÎè©÷ßCܯyq䪬PÅ1R´}þF¢&ÑJ¦Ls*i÷ØÇTTÝPüm8uVÃu*£“¤‘êN#·‚”ô»8>óúN²&ÅŠTá+_,“FɪY*—ЗIaU%BK$Gin°óümŠðoð“ãrp›A1ø]FÍÐì¼B“<Šá¤©ˆó54‡™d«¡Dœš‘³Ð~…BJT¡RHª¨T$*IBˆŠ’‘)$ñܲ#ÉísV5${QëWë+¹ŠªªªªÓG'¾ï'ƒá7cØQößLö|Eþ—ÌcÊ>ß^ €û¤ÖDðEïÁU•amY-Hm$CÔá=i÷{ßÒ8hù'‰õ>üùd~÷ù}×¹o²M7‡wŽ5«-ª³orö ¸¹2H™‰LKˆÃe|ðÝŠÍ4˜Æš6?QbcEŒN ¡Â>âT}ŠÑï¿|I¼Gì0ÇÛ"H>ñ$‡ÙCêÝÔ™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L˜ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ9s—"""LDG.—+¥Êç+œ®QEr¹dÉ“&L™2dÉ“&L™2dÄDDDDD™2b"""$ˆˆ€ˆˆˆ€ˆ€""€" " " "€""" """€ˆˆ ˆ‚"‹»ˆ»¸ˆˆ""óº"""" ˆ€€  ¢@ €" €€"ˆˆˆˆˆˆˆˆˆ"""" ˆ€ˆˆˆ€ˆŸºî뻼UUUUU«UUUUY UVBBAUd$€"ëº..îë» ‚ Ôº].—K¥Òérç.rç.rç.rç.p¹Ëœ.rç.rç œ.p¹Ëœ¹Ëœº0c0c0c0c0c0c0c0c0c0cËœ¹Ëœ¹Ëœ»ÇuÜ^»€;€À9¶¶­áÆuŸ+øÔîv;Û©Jx·yØlSÏ&4Ó *c‡ìÄUK$•6rp檩ý Ñ4Ul“&[ÐnaÈôJìU*¢˜¨b e¶6“JZÆÒmùÞ•¿ |—M=Œ‰4r#‘É"?i]“Å)7é!ïŽ$Ñ6sRVÿó”’OΩVH_©çiý¦2 1…_¸ª£,ÔaM5U°t…¢"…ÑJPðƒ‰úÁg©QQìr9’Ÿ**"Ÿ‘QU0+î°ø\ç7rIÞ^×¾Ù=ÒRÂÕKOðR¿¾Y×ί€ÒŽü÷*lÆBV“c iRS¼þýèÏCÒùölõŽné<²¢¬EIéaÞ¦êØH§ŠGœ›¶98b”y?+†Ãßra9©½%ûàëIÜpH©3â*Äý3CγfÃa£öOlÿaéô˜ñ}Š›*—ªHÒÂsƒá± Õö“ëdMÉUÈ›¶ÈXhoE†Blàò„R†~Þž-ëpuJS¡ÖGøN’uJŸ¶ÝšaÜ’QJ1G÷ïêdÑ^)÷˜LO3¬&>ÇF5ŠÈbXC«#†&X˜áô7lp݉±[)²R¥i‘Š+&*¤ÝŒŸJÉ7TMÓ q×sU¤­ŠÖ,ËV4VÆÕ¶ŠÑ­´mU±±kb#li-‹k¯kµ_s6Õém¯EVÊŒc±¥‰tÄÒ‘ÉXæÅ0ù[?°þÙ*|*61Œ1Ññ •dô©^×»²OÜq‚hÃ’Y#ÚîdWV;sÔ7S½†Jpɇž*J’ª¬òÕÍî®ô§˜öÄóD°Xƒá!Â<‹Ÿã¼d;¥'‚d>TRæÈA;„T4 ™]~ä.TžŒš•ÒÅé“àVÆî{«h™KKaىٰê;rhí¦:tuXÉÍ„‡&îæ¤}¥uloí8g=œ4æ½ÇÄîW$Ý·&Æa-HP¯…ðºöß ï´6©ÑN÷ M“ކŒÔÈ÷Ú9«ecfšif4ÍÞ,‡‚ÊìäÒpäî·—^]/…ô¯+Ýz‚DÌ‚"–!Ô–2É-šŠMµ×j½¥%l²M²¥SFÍ’Hy”&âr’HÈG'1ŠÓ÷3߃ÍŸcÜñ&>AÈ䇙$W ΞȔIËÇØSÞh{Í1ï”óˆdŒTs±)¦$Æ+š£¥|Í'ÇÑ;qýZDnˆ¼Âù6H«i!äñSäGá,{£iUQU)`ª%, &5Y6É©-R›JY$Si)+%Y$«d©*ÒY@ÅÕ’ª–k&´˜ÒZ#&ÈfIY6“KDdÙ ÒJÊÚ©dŠ‹T±jÙUfˆ›I¶”©6¤ÔÂÚJÙö·´J¯Yñ »álŸ‰òÁétnæG¥øÝçñÁ’h¡Í>'Ä’$ö"t(NÉC JX=å„;4ÃLŸD,Q¢S)BG­‘HÂJ(e¨Õ¯R¯%lšÒÒZ–’kk ÛxÙeg]H¿MY‰TÆñ>ü{h+Å­çTzUé|ÌG¥ê=Š©Ãg"ŠN†ä³á{¬øGȘðN"D‡ô•<ËJ;Ý’´QÃí·§¤#I»jñw>‡±ydw¾¢7TáTØ6b6IŠ*˜1jÈÃÓ³¸ø‘䪳 ž¦blÈÇg'RTÝDÂ%H’¢O¨I ‘¡¤Òiä“sºdµR¥IUEJ¨« H¡LC”==°¡ùIßë2sT zSbÌ0± L›‚O‰6G¡&%0²7aƒ½ÒI –[cc –6*D´©!ŽŠ™R‘ºÁº’h¡J¦ìHÂY¶ò¦ÐjLÚÊ–õJò•èY¨na‰Â¢ÇjSMFéÃ_ŽáØø6Y.4Ù-)d²Ù^ûkáKÝl¬(«Í޲“R*E°“e6|Ó×íHHB|=Cè|à_à¦óP¡ðÂÀÑø‹î:êüO[šWÍ¥E×L˜•A‚©ï‡é:· ýôV­@ûº=ÿ³ÚÔ€lù(Ũ •àC„Àà‹{œõ»x>”OÁ9OÿP1àô|X>oè`¹']?Â÷´xŽ?Щ ¥Y-[*•R6>ûò)ÂWÝcl)>ÛÆ´4l­+LW) 9¡†õ&T•RIÑe* X…›)šhÚhÓTÙM1ƒK ÎCëÂd!˜ÑƒÚåíeÜûiÄLmGÉQçïûgæ¯ÒÕ"]GT+!ÓŠ¸èé†zþ@õÿ[±!$«àcäg§Ÿ¾üÕîN¦t@üz®ŽÎÐúI*!õà Â$º_‰!L>5ÁqŒ'Îi°UZ"®I ENÔDÄ?™‡pc€ã´x¥ÄUÀÉÁ^2B¤‘úO©‰ÐœùDÿRv'G èӑæh›6a?®ðp“cºAù‘U dOp²?§ =xET AeªÿÅ æ‡Úu£êÌ@2"¸7¡Æ^‚&»FÂd± ¡eˆý&&Fñb6ó˪º»¢)´±ï:]jQ§VÈ ‘f&%#”2ª 8r“0­‚b›Ibb¥p~rn¼½i2[j™ª™”Úë¦úÝ·—•ºJí½î“%å,šZZÅŽ†¦¢šVDªæHÍ›F¢©ˆê:Ë׫†çU‚$£„è¦6Úd¤„ªÔbÔÙ†,’®œ¡(м™p’û±ŠÕ™™Yˆµ´µVº-N?”tYŠmtŠ’)U)*X™tiНîÖ1 ²c¼ÿíÓJ* 5"bIE$©FÄM+K#Á‚i[§qÜÿ+óHŽç'"EHÅrEr¤cdêšPªnÆ"ª¬Km¶ÔªF9ñÊ7yÉ=ñÁ•#¹*p§>óù\Dê‰d%ˆöVÿó>ÖF·$œ¬ˆ% ð}™BÀø@x‡’?ž‘#æz“ñ¼à6V0ý<ôýÒTu¢¡?œ®â¿žŠ¨ð1¦7÷ÞDxBHþ2±ˆó4¹ÇÒðKÀý&+¹ñ·8<é!üG´Þ9ý†ª”﬛#`Ùf¤Jµ*BU‰²¦ÈÚB¶ŒÙ\58Za³I¦Ð™$æÃúuâ)û~ x,w'ó\Ó…nÄÉÏw4ÜÙ$“4°á»w›Ö€„Ùõn¼¼¼½×ãõ'4mØ®n­šNdÞFŒ¶Úµe^ nV*×^–NK–1£urH»ó<å“ñ=$è5䤩åÜó«cú*÷’“^Ù–£U,µElŦÛRDƒB `"½%LO(Ó™ #Y$ZM±V>•-¶¹Š4U K$bLT¦ri]!"wZû^–¤ªrLyÞRMæûn÷!ëV;ÞièEÓã†ãSØlN ð>÷ÆIäGˆØfrÆ*l„Aå!‰ºb~†ÄsTcò>W­‘é6{Ÿ*¥rQéS´Ów aéf•¦˜iQŠªÇ¼ú˜ • ÆÍ›h„ ¢žÄ4;Áù¾¶Áy›¡¡g¼¢ª't}mºtñY¦êÓÔ ƒ±°k,*N$E8NñL†ã#Å%…‰5*OPêâtrhieµm±È(±bÍž%d—!Ð"¢rˆµùö#ª[S_]2Ú½×ÏjøZNÉGh’yì’8 NÌn䑆‰Üæáó¸x·/5–ãdøŸ Møwµ¢úXúdÐÚ¹u[»W8 œùÌ!sa}gŒgδ0DóЭ—Èl)¥hWgŽæÓdßO166iÀªÄµ±Å…OÒn÷i¦‰&îL˜b•eV±ÏkÍõJ»­83ö?ZþÓÄNŽ“™Ž%;›Â*‚™±ŒÄ4dhË@Ù ‘!D¢F‘&¶Vê¶’ÕS¦’Ê’²II-l¶¯³~Õ¶ûf'¯¬Ž¯ @Gúpì:6“r}MŸi„ü©ZFÊ•]üФ°ž…zÊVì$‘Àp=Äœ’³ì,¤W¼©:¬æ¯­ŒnNà˜¤“fHÂ8cSNNpÓ©éd‰Â>Æ: <&$ì§ŽiãA²R£uOÃúXM*J©<ÅcÉŽãÁå$ñRȯ&0 Ws ?¡¤žFÞ)Þy’nÒH#…‚tTab–¬ª¥% KšÝ-I²’iRUÕÖ‡ ”h²U‘Ti_Ž‘L+ǪDyÒ¶¤¾ l7K^ ؤ!È«ä²ji& S \É Kj"ɸÒ4&¯ÜYŠÕ"-UÉUÖÕ9uÜèºd¥×t×Ò뮩K«­É7YmRs¦í%-Q ˆ ã˜f à„¢ ’gu$í %tµï·šÚæ›1‰'y`'ø Ï1©|?£¡úǵ¤ô:½Tè¤m΃¥°¶‹Ø$ªJ$f¢É±n'¥þ¸æÙí+ßJ¯j4èŸ2"OZ‚HвEQ*¥T‰èXB<h˜“ 4WzwȄҾêŽ÷xïPÅiÃÔü/$÷Þç)k$ð1XÄÉù$AC$Æ:ª©B©R¤>eJ¬4† JŒÙd˜ð`Ô?=Bض-%DàÓÖI"M§ Ñ“LcôÎf|%ø“ïÁ8su2$=ÏùLi__eꀆH‰ÿ)dGWZªyUUi¦4U0¬Ÿ±ü3Mno¤µ£ )TºÄÄ󱕲³õØÝZ–!…„FlÅJ©¦G½†¬Ô+˜ÚâlÙŠ£RË,î•$Ñi¾?3L7ÂckJ¤º{•·$Ót¥‰TݳSMJ©¤a‹…ç4Æ•3̘ª›i­)T²ªË1[©r•$–ÝÛ·m¶aº’ ÑåÊT³ ¤²¯! K48‰“MX«ÙŠÒ™>;-I²›EŠ«NiŒy·ÈCJŽ2E*•S†$Æ*±¥hÓ&9cTd“f2¬dšY“JAaQdA³j "ä@(Ì1#ª–ÀîT†˜FʘÓ$F¬%iŠ–´t,ªiµ×+¡rE»Œ±r‰eâK$*Áf'Ó"-Æ oMäâ19ÌÅ•ãU¥­†…”ÙÕ¦’UU-iR©=8ò²5;ÔÑÉ„¥}÷8ݳhªÔô"°Ó¬TÁçãXkžT¨0ˆ…è `üÊéölqÀÒøXÐRòžj§ª¡ÉøNø]óþÜwkèßtf‹+Üò+,GÂ2Í)ºQ½«Î3/gkP}}Z·uZij3R10–­Ú¹µV–oûÇ/3U—wv¸á$’I$’ˆˆI$’I$’I$’ÝÝÝÝÔ’InîïG3ˆÁoWNf$QV&¯&¸›Nü+âì¨Ä&ÞÖ,Z­bWz´Äî]EΪ½×¥’ž*UUÝêKwwn謌ÌI$’InîfffnU+µ˜·wuÅÚŽ 치¨DÕÍq7®ü+ª;ÂOKRÍ­J«7 NfeÎMVîí,´ñ¸ª²ïws3IW’ÝÝÕ»™—jîöïm+»»½Û¹n!óˆ3$¿là{~¿oÖ1ý{™•ƒ HIÓ˜à%‚ÒÜÌÁ™$$éÌ@€ðÁinf`ÌÈ‚:ˆ€ðË%eÝØ»ph§t˜ˆv°î]Ýݸ 4@wIˆ€ð2låÕUS€Ã ÇÇ1À©º™!‡8œq%¥oZ¶ÀÃbonÙiF›Ö­°0؆æ÷%¥½ia°Cs[’ÒÞ´» nkrZQ»Ö—fõ¹Ž÷¥Ù½nE#½évo[‘Hïz]›ÖäR;Þ—fõ¹Ž÷¥Ù½nE#½évo[‘Hïz]”-V… U¥ U¥ U¥ U¥Ëd¥Ëd¥Ëd¥Ëd·-‘Å’—-‘őőőőőőőőŒ—-‘őőőőőőőőŒ—-‘őőőÁdpI„dqdqdqd¿/k5èíÜyzóÀy5¦ü½÷÷æºÞ,jɬY+,ª,jɬY-}–1Or±C±Œ©lI#åi’HQˆŒ#EF á¦ÃeMB5!%?¨Þ¯‘Õ‘J&$TrTÑ¥1!*¦1‰…Œ‚šY³£ô+÷Ì‹GRÁQSÜr>òèòGߘ‡Ú´WÇ!뱈\´ö_ÃïJ=.æ4¯I¤L¿OÕ~øÙý؇H‡¼‘"‘ÍHíPÅ0¶ñIyM¬¦ÒVéU™&ÓJ‰‹U$| bÃö ÞNVªZ ä©lBK®L'šVCe䨑²¡¥‘0²&¤‘(YRªK!d‘[4Ö6É&+K$a‹2A¥OÚXj¢mF(b¡ÂÈŽ,á*nÒc &‘T²$Ý‘Gñl4Ö *)X²F)7,E*´ÆThJ¦ŒjL?ZfQ’™¬cM%JKd¥*„’Jý•0£ÊÓ ¢È©h±*’·ly–Å&Ê)Yr,¸¯!Aø%€§3M Œ ”h‰6CcER?‰îNrn“‚d‘èDæ0èÛïG¡Ùd²Ä©RlÂMHÑ…JLPv°”¢ª-,Õn“i¶ÅJM¦ÚkikQµ¦Õ•³T¶i«RV†R˜ÂI‚¢”@©R¨"¡*ÈH¤1U8±¡”aRdI)c×±úñIg¥‰*vrwt’œ±--«Y›8“’ÞÍÕ*QºéQUV;p7Hæ® (á¥"º8)=*¯2~Ú~${NlLUtE3  si ¶XøúŸoýoûú˜Ÿ¥úRI8¯DË,¯Œ’`QÀtJPjëÀ€,ž)©ÔzTˆó¥4‘ò+NL:ªIVÛ°Õ7R=J0+üzìDÚÏ—ZÛ[ï÷Ùõ’""""""""""""""""D$ˆˆˆˆˆˆˆˆˆˆ€Ú«L’I$DDDF#Œem­zÞù®½­º¾Äs4cùT“’£íª&¡¦˜Üåò<vïé' øß2ć㥖¢ÈEe•O•Âìiª°ÊU‘6­£R TSSU…QQjÖ5MLh”š˜`nÙe>ƒ)H¸ ;@ƒ‰¢7 ¨X‰ MHK" ¥’l»)-ʼnÑQk’©*ˆÂÆY²¢•!6,…SešY •¤Z“Å ‰vlÕ4O¬,"lŠ*5$I2Cc£ØdM"‚ª)©©(i+dØ(œáJŠg{EIKR’ÑY$Õ¥­$ÖÑ«mTªX HJQHE®•% ’îÒrT¶èCPÚI,P@DAÈ#xwïÂM´ð®À˜a€¸_ï¾{ $1ï¥u;O Ø…Aw°ƒßˆx½ý˜÷BÊŠìœ@pˆwMƒ´÷†cÈX:Bƒ¦á'&Y =bÈÜß}Brsm¨”ä«9±©4Äbºê±'õ_cI¢ÍŒ¨ä®•4©;²÷½\°n¨ä•JtSL ¥ V)0€bf¥+Úïzñ¹|®9Cö?§‘βGì&y8*»ÎiÜÙýê½OgÌŒLzÚti‰=G#£›ë&OEpèdsÜtß+¼÷W=Õ<Ÿ”Ô|3ºxEÑYço{Ñ`¥I¥ZEwÎi\.ËŒ× è ÚqøªÍr2C†CdQ)l ‚Ng ‚c¥ª¥+wâ>U[X”Õ¶¡¨Ö’Ê䨯:ä…)‡!ˆ*=ñ  T}o"½ Á(€@‚¥%\RY'¾ÄšK UY!"Ub&0êQ¸FÌ $Iî’OðŸØ;¢0'™bR‘*Š¥XˆóRZd¥¨E¢[ùßåälª§Tò=åTôÄêTWÝÈpx¼ÏXÙ:$ÜŸàT+ÐÙCÙõ'¨u{Ï4M%‚Èž„…"T‘ÕÉÔBŸÄó;ä=˜¤ÿjäñR8~så~ÒSý“ý‹¬CМÒO[!ä‘OC¸œ Y…I0ô•ŽI"†é¥T*y?i„Ú”‚¤J²¢Ä¨¥T“J T1éž•*úé&*«’¹©!4©íJÀÛÚUÝÛt”“~šëµ©-—®Ò‘5¶””²[Ý-ÒT¢UDL| ó)¨4¡ð¬˜yÇÖÓf’2œ£ÁaA‘Ñl”`wbÂELR†¢½öò¸ÓÁ8Qò×I= R$R«B告һ»::$î²~sªnq$IÍH©J“ARNqîLI5Il-BÔ’U…’7ò12I7zžûÕ}µu6›™î{íÑ'ߤdݼ à¼d¨A:¸b,&FÅŒ<ºä1"ªÜ˜äæ¯[sÓÄÆíÜ4Ù†%l¬‹bIŒ`UGÈV• ¶lÓÄÄ£Jl”Ò°¨Ý_¦­÷q©ÞäØÒ¦ñ&¦:1tVÒ’©V–TSw©%JÚCeW,w„b24¶ÒT‹ZÉ%–RÒ•e±m‰X”èHy‰èuFâ½ãàupQvWB€!×?l]TãÄaªh%‰R»ÝéŒSJÅ™ MT |ïïÒ'©õ>§‹c¸ô'ÆïOEU*<“Xž…U…SÒ,L"%c*Õ£E‘#ÜO9)Hä÷ž ï†&)Œ{AÉS`ïliºÉí:¥Óg¿1_S >FÇ"B¦À¸*QGIæ7 ÝáTÐ÷HD„S²AR„‘ Ò£‚QÉ¥["¢Dʼnf4™ ¨P*”d•R YS c ‰‡UC¿ÃWЇ¶Iï+ì£tŸÆð~ƒ™áÄ“í$9¹CÖŠ¯*ê`ÅMžñÁ4˜Ä^©è#ÖÄ6œUêÓ œÝÎ÷>÷“I(§Í!½NÇ6ï1U<ʘ¦–G›ä?s„œ<èðQ]ì„R›)éjlÙ¦+©±ºÊÞG÷I> ЯQØèš'°­”Àõ±Ä4ˆiºU6Å=œœ¤úG­ötù]R«gõ"d›.Æ17RïØ½×€nAÀÈ`ûÁêÝGÅ,'–yŸUâ5QÞÅA‚H©J*Q0”bHIP˜ð2¬Çª¯à䇥ObT"•™,Z“Åd²I El ˜R&…c ’R#šÂe•£iJÒ°ªL\–- 0¤1S‘ƒaF$Ðl¢"ª©"¨I6MÜľ±7|'à~$NãázF‘þGÂ~î7= ˜Qú¾.É$i&Êù?¼I0ùa+šEbÖ"ªÔ©d>V'Iê%×\I-¤`Œ !$­Öù//j¾KÖ½ªN‹#`¡öÚTÒ¦‡˜’ÎÕþË» ×ÄyÕVEY"¬$ªˆ¥%&ßw5«îæß5zÛ¦²ÒYTô¾t:2Cõª-IT‘l'­8œ$?ŠuOÝÄØïTuV騩L•<ƉØÙ’sW˜;ž.‰¼Ë3Ii2HÙîaÙÜR)éW¨9º¸W¸nÉ8c¬QW‰éOîd>"yŠb‘æ4*ªDb”U’©Ìè‡I=õÂ8L'³\%‘T•UÞó¬l<ç8+JTŽ÷g"NJ‡t”‘*ŠB§ÐöüµjÙ9œÞ–:ÔÑIà~£õäx¥RpäìùÞGƒyåw«À>’ª¦sökÙˆö1„=É Æ$î$‰ÞIˆ¢1 ,>[T˜²‰\ãHÔ“J¥y+¹ƒ…>ÓÙ7nö4Ø’´=d¯ktÑédlÄ÷•d2D:>%y<ϨòW‹ßi¦•[¸Ui&c¢Ÿn"á Áò¢†pK|¡€úR ÿRÀe¤ÝÉJŠ5$ÕÓEE2/µè¡ô¡Œöúƒìúf–PЉoæ8P‚šäö5ñaÂÉ„©ŽD=QÍl°¾êÄ>1)U;)ü¤õ¨R0ö ÷0É"°Ñ@×,ÚF h¨Å‹/[ª­DŠ"¹¤¶Ñ«®¥Ê\¶„­F¹RPªÁ&,Ï©!SE­Ù•FÌÜÒcv›)vDa*ªÆ$”1Ž ‘¡Q[³¦lb³ Ô0•…eEwm£J©7”ÄÒ­×X¢’Ëd¤Ù]]¥»WbÚÝPŒ©¥SJʲSJd*¦šf¥Védš šbl±‘fÐȘ¨™J¢cÆÌ’R­^¯UÖy­t†%šHÃTÛ2h“)W]^RòÊ‘o:Z¢Ö5­FÚ¤"Û+uif«N¨NîÜCt"¥'K9!r]1•lºŠªÅi¦)ŠŒ,CƶóÓQo$Ù) Ro #ί×aÙÛ *¤EJ31i† ÆY J¬UÆ–DÒ Ò11>Ô“fѳ½šWÚfÍKj­-DÉ[³BȓκZu%"-’©¬Ìªéknj£5©5Jø÷Y²Ï™}z·—k$™L›_3ov­¦ø|“I¶†lTÊÄC,”™T–[«I%æ·pÙ–Þ¯-«¼šM´0‹b¦V"d¤Ê v³M)T•B¨E<ÊÆ« Άñ9¤7$7jIÎÈàÙ»vNÆìm7RUIVnÙ¤”›Ûd”Ú2ID ˆçjÈ^ì$y]ÁÑÑzІއstcgtHý¦$áˆÙ}±ûê"ªmÈz\“’&ÒI9*DU"*’¦•7d„Œ<Lnö>º“©Hpœ¨ŸÝ4æè¯Üs{7wpvY‹7fIm©,R­¤¥‘Tª¥ˆUª¥‡tü^·5:*yÎޤ~åiØ6T¢É‰[1ê6”˜ª2D¬T¨É$T?;$ˆÅT‹ã|1ZJÓ#ò4SD1h)ÀšÌ (‰¨9U­¡‰Ò±VI‰˜Æ¤°ªM›2ªiK³T³á|ê®MÜ”pœ4É!ÊÄhÜõŸÁÍú$n蜞­’¿CÛ÷9:)J}FX¶T˜¯ ëZ•*©Ux¦¾+kºl§’Ç ^ ‰0Ø‘+’ÖÌ‘µ¶bè±Zl­• “e6Ù‘&*O9󹺪p÷N¯…b¤Ÿ€{ÅH‰8!1#ÐQâÐøñÍ-.&d²ôu•d`•J¤¤¤¶Öù/}"¬m¦m¢ÒS ª"ŠŠ©+b²š¤ÛjIIZÈ«i›h´”È*ˆ¢¢ªJÙSfÒ<ê<ô“òËm\•ñ7RJ¬’[%Im&½¥k¥T–žg7é4ï¨Ûgà49+’§¨ª•…’r„®"x,ˆ*RDª©Hž¤ÄÂ¥•XC¢m…Hª*•dJõ1ÐWäI%˜‡í&#Øá„Iû5ˆðJHÒŠÕ_´¬J­=ò¢¿¶¬'‰ú­ÄÑ\>ð´p¤~wê9.óƒ’Dú+Ô‰ N‡GB’%R ”T’JDUUJ’*!ñîÝÈêv&áHÙIˆ›«Ãí°~ÌköQƒÚª©+ñÍÙÍ"œ…‘^`œÅ†¨¡È……HŠœC“¹¦Ï'Ø>4‘œ½NW¿+ÔŽ$±ß³ˆ6¥ËUÞÅÚ&j&¦Ò¼›·oOÑñÛÎö³}:jôaVzÝY'Rœš<íž•læ¤ÜæÆ)XÆ.IŽ|âI±¥in6W­NÓÖæÝXÑ»fHÙb9!&‘HF”†Æ˜‘¥‘&ÊNÊÄ©8X†ð¥‹-é.[— LrO¼ÄÊ­ [1§8ÛšuqѼäá1 +QZaÖM Þ6Z0EIJ‰°h ˜ Fw:61Ó0ä4²ni)%ÑaÔûU<ó°;ÐóGؔϙàlÙ¤”¿ ³dÒªžJä²¶6i2CöÞó±±8)Ne<ó4ˆä4]؉C‡ÄáÙÃ&‘]^Y&ÆÎ/[VM¹•¦¤ëôâÌ20áÚº¼Ó|އÁ¹·lšPæQ‰ÃÎçÉ´›±»]Ž#RŸ}‘ô¯¥¦£N‹\LY´æ››<î$á¶›G¼Ö=lnÓ†)æwºÊnüRr”¯¡:jú.ʾ©q³j™Nê9Æ’±Rw&' ¶•§&ð3h™[-WQäÑ£XÙ®R;Þ áéTá¹Õ´DvMØlÜªáŒæÚ•6m&,”– JšZÙÄÇ™·z›TñÝͤÕhU•3lUx«Ú©â²låɦîøÑ{Ü“IÃecɹ97ÂÄ­‰ài6iŽ“täÝlŽMØÈÇ5b9+‡4aÁQMJñm&œÜ·pèÂ8§&ÎIMÇÍ© :ÁÔÞ1ËZ#5XV­`ʨپ‰©ìÉ›³PÔŽ6›ë2˜Q«¤Ù§ w7zÞ 4ÙŠö½ŽmžOk¹§e‡ÌÞwï'/&»"˜ÞiŠÆž…NMØÙ¦NRÆQ ]H„„Ba\u²š4Q1jLC‡»95‡’¼R¹%z}O2š9:“†Ž>^÷‡ÈÈ9žŸL¨'ÖZq»Šf¡HÂÌ&BE$ÈÇ€‘‹™&f9ê`ó=}ß ï7<âîînz©—ô Ú±»ÌæÙ³g¡ènS®Üq”ÿÑWF'À{ž×¨®\¼˜ùoFîÌ4­Ìw< 4ó3xø+è©â®‹²ª¼:ºgCNO3½Óš£t4{Žg»rW:°­˜Æžv4§r·> ¸hVÎÌ0í\—:õsfÇ9³Y7TÓOJèòaÙ³ô'ÓÞ¡k"hÚC0DЉYA`¡@(8À_/‘H¯ºáªp,P\±¡e:$ÃocK_B5¡™µ»GW[FʪÇFšpÑàøšnÝ»véŠUllÝ+²´èÆÓųJÙ³d¬pðóCägÊw(ªˆx*IU$ TIõìŠs8=^¯ãz¶+åîö>§µuóDxtøü™6aÅoäÙ•)7”M’´­Š­Ù³F+vm7nÆ7ci³†ŒiŒSøÓ“M"Šå%H‰ö„ûÊ•J¨ª’©%;¤A|LIúJŸ[TY…XÒ’~w€îž²Îçg{MÑ …ÄÔ›M)»r1URDØ©ŠIÉù•4õ =jžS½èL‘Jhx,‡¶ÚOÛŸìðr%}ðŠ˜W¨;¡¡$d‘çBåLª~ýÑw¦zZc 4Ò´¯#¯LIX™THÅB±‹œ=,iàóÊMÅISÅ£¸®*hزNGàPô¬ÝWu …°Ç´9±ÐêU`nQkÆU&!ÞÀL‚´ª*Š¥ƒÉP“r~Ì*{%'æO1çs_%'5ì©%)†Í˜MŒV Ä¢ …©‰FyAÄœG7‰$x#uÜèÖç1Í±ÐØèèÑ7YïO—døÉK îWd›Ø6l÷‰§­Pÿý±xpstI âÒ8ñx±Ù1Q!rlü­ÜQÞý 5T³ßY•b\hÍ=ˆÙ“ Ì“Ð÷ËWà _ 狸ý·ÃÊ}nö!º•уÂÏBÇÆêc“â{Z|Oy¼DÅJ”ª²¬•Šö¦)%X1ú ÙA,† H°p l*­†\¡ÈƒF±Œ“vµ+¬ˆ¤H©[,°š2Èâ®ơ 0Æg 4”›¦íÆši&Êã lÝ‘6n›7“vcy$i4ÓvÐ¥%X@F@]§8¦GAÙ6+ßÐã‰ßl¼ä®ŠòzÑSgyЩ´‰ÜEh dã…Æ$à#A†<Ž ‚9§zw»Ó’QÀ䑦æl-„̈/!ÂQŠ"©-…‡1 ’ªƒ™FE\в¶„9ˆYÖ*‘Tà”âJƒ z68_CÁ¤îsVIÞ¬&ÎÍ´Âëz‡·}[E‹´; Xƒ`Þá 縷£'«9jŸÀDZ³OÔb6:¶i¥a„9J,d@6X†Jæ3ïak‘Õªµg=x®{NöîNÞ/̪èã»79-^»L*-I&7œÛ?]»g1ÄÆ—!ŽÍ§s«›NJAù|å6iÙ:º•9$”Èå4ÖòVñ4:¶è¯¾ääÝÕ9»æ£Y­5LÔJt2QêSf g°Ãb«.“½­sG3†!¼á\ÎY#eibvðt7M»Îœ“y§>¼u+‚ÎM•T,%dŒBIÉfuW&›3†õYÏ}Ý·lÍ]q9m)©IK#‘õ°’BsVÌÕ›¥mÞfíÝîÇg"Sgr±²upêÚwxõcÁÏ“Mº1³š·Éz´Çf¼íäl¼‘$1‹ì×DÜáŽDóîi†ó|mÊláŽÎ|0Üìè±Ã“$t9±SzÑ©L+³››“£NM˜ÃIÕÐ+IŠÝTë5g ˆÅá®iÕŽ¯“etrïiÍZŠ¥u†)Û³g6Í7áS„°Û±4ÉÔÙϽÉNçeo®Žm8TÓ«4©É¸x¶soá*trtvn×N9]ÒTl94À8˜ìï‡Nͬ˜˜¬LS¢»Ô­æ&:¥<][´ÙÌÉiU1ïø¶x;8uGTÓx›9¬ª+ljÊÖb„ ]êËD,£Ab%¬Í,2J'©%äàpÞÇ®ûµtl3ZÕxDB™MZ€¸©v@Ç*.‹{Ó\ñµ‘±NIU¦¸MK˜ÚÈòÿ_Kë4iímuε·rZø;;ÎGVÇsQÖËm+–[kkeí/¢U±¢pÆï3ެx7bcJá°æääÓ‘ˆÄáR4ÓKl½%å*ÙÂiSJãšï«Õ»Ðí›Ußdc†ÊÆ:6g_Îá¯[™™M9»æ:«Á¦îÕUø›1‰4åþªâ"NKâÜѤHªÕD“‡ mÁ°R7%r4À Pä…I:ƒv „ŠƒŸ^"tx±Þ–xîÃNkÓWWgÒá«M§6³fÎjï%Ósv(Àu{G‰8²30ÜP×G2¦xÂÀõ åDV„! ã&fóBf„ÆÌM,-T” ¸Ú§Uz–õìä‰ÎH¥{]z—´»xŠ<\£¶×ÂU|kÕê^öô¬ˆ9Q!C9É™¼y8ã4.tVïÇ#cgäÙÂi³JÅi]][©²Û™Dà šh¡HrR—$9¦înjl+½²I'Y6&3 LÂF'åšb¶­’ÌL‘%Љ•²J„K0Ä’LßMY dJ,s:wÒ!:œlîÎ}†¤Ô̆"6ÐÕLÖKžW^:òw‡nut–i®RÊ3Ôm—;Õ#h„þÇÁß“øuZxÄ¥ô$ïX’G¼ô«ÅLnìòr|ÏO#Nj¥ZÅaV²lÑ¥b˜ÓïlÎEL? F4ÜsI=jÆ0iHI³½QûRX–¤(¥I,A'—®}I¹7*(õ=ÇžJ%RX¦aÃ4½.å>wÐó¢„*|h>ÂBŸlÙzÝì[“3 –ÈS¹ãäÝÐÑši‰I¤CQ„n ¥ˆR¾¬Ù8 ¨Šbj+WtSeÙX٦̂i¶Æšj¨z–l¨mUS!±…8 HªÒdr7M©M“ ‘*ÈŠÑå꯱GQͼá\½šù“$õ•‰\›±Úãfœ›NØæØÅj|.‰¤žJ©RmYÙädv@GÃä‹$? Â4¤Š¨ÒÉVIJª¶BÑIÉ'oé’u®ÚL6cUe’Ô´D‹H4•<‹¥›*rÓ Ú#“!ªNKà¬F¤†F–n’G‹Z)Ê 1™;5—MäŽM,G6ì»É.$¥¹$²lØS…8+‡Rz”é ± ‚Ø©D¨¤P¶!P[©'Ö¤&4@øN;ló¸I"NH“„y$—)$²²¶I6Ë6“F¤ÒËdjJmƒm²©J/¡QPð*»¡K†2 °ŠS²´Û:#ÌzÞ0f‘X¬•’Æ*W8wÈüüÛîx¼›½å‘Üø™â–…(€‚c¢a9ÅcH{oÄú“d6RG6< ÷ÓLVÌŒþy^±÷ž¹=…\Ë –…(¤²¥šB†,¥`Ê•b¨«²Sd½õYÙP¯¶ÂBÉôÒBökVòš«‘BF«“U£Û­mZ£jémsVƶ-¢Öµ£bŒZ“aKk_=+É­âµ®–æ´¡¶Š¶™¶ÑìÞ¦®©eÚÉ lLVª&*#KTlÛ¦µuWKÔ«¥’¶ÅIVH‰¥’LXÅ1QCýî²ɾdHêtŸÊ1Þ—K$ø”ÅWÊÙÂ8TðC³ªŽR'Èé[p²Dðœ”ÂCÎsJ†CÞWD¡zùS¼>‡2¦)n;ÇÃuJÁ±&%b“MŠ”æqð7éO…É:º6.–VÏ™ÛctÓ8}.¶Š”¡ÈMnÑU¹Xw晚VÒU‰$XáUwSNö7Y¥ª’¬Š¨1w±¢Í,ÊUݦEi‡%1M+Rrc )‘a‹½L¢›É&ÔŒZi²K[Ý=Koê´Ò”jyÌ]u]md dÅ…LÈ£JUBmRK¦"T•³ Ù­c1”©RÒɲk§JKJT¼—«Ë¤°R§{šb¢ž/•ò¤‰I™¼Iëj­ˆ<˜i]™‰;E‘I"pïh#dÜæSßá9'Œð…l¥Yªy–F”M*b§®Ä“JˆªUiRUD—óà÷ÕJwÏàty¼ïÁ&+ÌT)!úHb½÷ñYƒ¨Ånªb±U^£¡çt‡ªDô§ ³ICêóI&’¤=¤¤‰Ô˜ÄIö!ÕÔá)÷š0J4Ä| CI8ˆ‘vdE4žgÈi&ï"Jd*W'±Í‡‘»½Dâ¥JSbm “Y·)¯¾ÝRDI*Hn¢&¤ï}ã pÛM˜‘©j“MòAª•*)©“ VA’Y$X¯cNzÛÓw Ý%6s“Új­”Ó'½VÈ×)Œ¬S¥J¾†™ÑË4Û†“’Ί)dŪrSÛ;4l=MäéFÏÔw¬B+›’˜†ÒŠ%’ÊÔ“`ŽgT’ló5kii­cjÊÚVÈÙREU…UJ…•!Mï'|;”p©äÄN‡rNò§ŠnïAQ>:_5ÔSˆˆ”A J¡!¡ºÖÒËUvͪSS"É2µ"Q£¨ÅA–I d†*HTKžŸs>E'‰G­a£*,•¦9<=nLæ¯M$« ¿ï?zb®ùÑØ~‘-îè–2 Ç2HJºIORD î}L‡Ò:Èb/ {Ì0‰˜Ìz%| *n£VXF=1¥Y-µI)1³`±H±)4{ì{R½I>V>ÇTÞI$UKbªJ¥UR>„îEäc"wÔ‹,‚(¤Oˆ“$§‰’H|ê>‘´F,ÜÄî'¾ôb<òF€ÞI”„ØÄd|oØ;Îùå'x„œ†ÕB"§Ç:甉Q,”úÝê^ÇÞdÒ#Ìž VªI¤•Štvþ_Æ´°ø–™£EdyȆI#>ë¡î«pÇ'¶`½Ã3­sœð B‡Ç"t ·ž@<ÀôŸÄÙºÈûvtlüj Ó‰*ÈùàŸZYŸeI^f¸ŒSJ˜D”EMTÉ"zÍžPÛvÄ<éÊObü'¥¤Ñe*>'ÐÔIÕöúÛ¹Z#æ+åt1ð«I'H„ê¡d;“˜}ŠÓLŒNõaò›=h©çx”䨫$~Él,±K,æ§¾‡¾nÔ#™ÌäväYpª©þº9='k[²&l*±Q*(ª’ÄDô$Hª{ÖñÂlÑÃF•Cèaë|ÓÅèD“öƒÁ´\ôÄr©â|“ÌKz~äÑ!ò>­)#K,’«ÉZGU}Å^‡Úµøœq5Æñ»¼$’H$’[U RÅU™“•KTDJK0ædLÌæ$’I$’I$’I$’[™™v±nI;íÝÕa:‘ªYµtŠ¥¶3(-©›»T©æõZWU°ö¦Ìè4Ñ“bmâªw6TÞÕkÚ[±Šîî«jr©%˜±]ÝZÅ™& ¡jÙEöq>>\!²"Ä81N¦âê­n¶ÜÕTîFFÅVEÌose†Û’Eñ FkÅ>ÎSUÌÍšwºyq7UR\YÁñM¼·Žmun–ëTÖq"ÅX®ë«m±º ]jÚFšuT‰rBB°îFK0’*ˆ–*Cõ^lÆžSÊw?Èô¼çê’£Úüï‘JNª|~×îáRÍû¤Ë)˜Ö[­Öº¤€ú*‚°Š(wq3 ’F˜½½¼ÛZ6e¥$¢6j›I›iIL[Só¤¿Aï’FHˆˆˆ€ µ¶äVe2©E2&ÀÒI6𥦩Y$ˆ”¥-iIIIJ]¹5"‹ïíoÜkß{å/¯6ô2 ÓJÄŠ†’§š‹D˜•<¿y‘4°üe‘èT󼟬‘?PO(Ý¡"8=Nnç¼llªR´ÂÅ[ŒuhÝ¥ccEb¬ÌY0Ø©M}MJÄÒ–L†ò6)Uè14QûÍ@ìÆÎíOÐWžO¢&å’lH/&tJêêð?Óy7pžw$œñ¼“AùÅ4£“àØóîûm÷ÒLÏDês*ª”¥QQË´û_ÔúBêòrA$Ÿ”û&=oZ«¸Æ‘ ûs“ó‰'ê«èO´û]då9DŸ1˜³é|æÙnwŒÍ` £@EG¶40q"@ô$&Ž"z7iT•DwÙH)dx[5ˆO}Sš¸VÊG„­*9*›ã²>vAºÈªA7A[dEUï°0 Â,=sª¨h¡öÛ…p60 §Œ*V= ª";9Ä|)$ô$]Ÿ¨P6žÌ=ãÆ vÑqÕp¢‹ fÅ>‰Ÿçù3ø¾èøa]1ЕÅ/S2,Í*Í3I¶k©²mjëF‹%•}Õ®Ûm´³VÔÚË-‘$Z@´ƒÇû?ÙÆÉÁ¾—Ö[¬Õ}ÃnÃU¥•©ž»´³LlÓ4ÆÍ1³LlÓ4ÆÍ,±ŒcÝ]ÚÛK%”ÔÍLÔÍLÔÍL§¥k¢Æ·ëîñ¯+-KlÖˆ±fX½9ª5E_¡´¸X¶XÛi[1M¥–•”Y”´³Ħ¹SS6c,Ù”®mÚW6í+»¶[Ò×YY¼›u–šce˜Ù¥˜Œi©š™©š™©š•⺋6ZRÓKM2lÒÓKM-4´Ò™fÆ" °DiÄ#ŒB1ÁÑÖl9Sr;Šsƒ™T™‘H‘* C® lªR¢—vßMn–,Ë,–dd(©E,šìóúýIÂ%ñJB˜Â icDvŠ…!Igaç”™xEéï> ŠxÊ’#p¤7 eGÛ¶1‰oþÏô´4L¬Üà#’{›ŸlÙ;’IÞ¯žÀ† °¢T«!m´Y%¶•-VYM¨ÔkRÊ`pý‘¬k¬(§¢b³2>Qñ|‹0ÃÝ0,{¦1³"É·,\lÙXÙ6Vë-´ÔXü)X‡3ƒõ\Ór¬è²¶pƘêÄ*âU7nÔnÓ"m¡XªÆíÛ6*M7f1¦ÏâpM Ý[7v~FéÉÍ”S„Æ$®n¨K,.²iÍ¥cˆm?;vp£fìNN¬cfÝ›9ÆÒÌb$ÝS›f抲Ud›·TÓf&áTæpÙTèîiѦÍ'1I4°ucf›««fÍLsaVpºIiµpŸÆïcmÓ› §F› &V£¹šFƒÉ€äeA3«m#–Š;ž•Q™’po’ƒžsÀ¥e(lÝZS ÙM˜Ä¢¤Â•Rª¥G 9´m*UIèŠìWwdÄ…nyÚ;*Cd© Ñú©¹°­Õ„Ä6‚ízeËA_DæO¦5Ü ¤=C¬x‡d ®@ÖfŽÁ~C…ŹÒmí~Òf%M¶”iVš¤–Ë*SI2´µ¯¥vÝ7ÛS<ÎFʤꓪÂÒÂU–_iÕ…ðº½Iì¤{Q> ¾G-<ûôÈUÈ€‰ü|oÞ.à@Ì‚0Óã^}Bjõ° … Çó3CÉAP‚¡˜À¹“º}½çr’”›á¨ÏêC…/N˜t÷ßküGè§Ì&ýýÏ•í'€×õæMü¿ýOõ?uÁUÖ…QRb•†**F&ŠÅ梊¨Ò±ñ±U *©S©VHöG臚¬Ünª’~2M›6yGûO‰“ßQsG'›ç—'0áNé¼D쓘H‡¸{ÕOîøÕ„è”FDíå—‚Ú†–)!ÿ´©Ãõw& ¦†¦Ïô?ñø!ðn¼ ©í§GÞG ‹îV}ä„™6l¿‹`þNŸ‡Sþ§úÞ_ÅÄm˜, Ûüÿþcþä_±øøáŽ8þÈ~ÅîîæbfpWˆMÕ_Þ¿üíþ¢ó§^½:LD™™™#©™‘UÿgfHrùÆñÄÌLÏÅ?á}ßNqi':0•ž¯xÎW¾ši™Îs§¿ýoØý/úJIçž{÷½ù2ßCÅ(ßþ¿õþÌŸÚGûÜRIïÿZ!Hq0,1!’eZƒ(ÐFÙZÁrö¥²!ÔDà]Ìxo ÆELÍEÝÌÀ™™™hˆs•—•333æ ù„3¯ù>MtÉ5VŠ9ÎÂ’fþ·÷u%þõhu9Îpˆ' ðX¿]?¿W0E8Ñ5 ©]HŸjl±'U"HHŠç#œª¥'âTx×4$ÿþ^ö<_Ð-ÿ1ÿ)Ÿ‚í"©UåÙñ¨¨*(¾i…oá.qÝ»vï&pÞ¸{8ãÒÎãÑâxŸÛþAúã=Û´N©Hìü ŒÓqÁD ‚.­–`þisþsJ$È»FÉV’ªªª®yAoû“ŽÕ?õ?ϨZŽ÷â–°HX•‡¡Ò<ƒõ×@ýZ;Ò?ï4qâË›.\¹rå¾W©Y_ŒSš›fË’úùJ Û#"^:ØsbgG£0û_ªÄþ묽SÀn*_T=šÎŠFÏçÏû˜V¬G>|ùø5¾šO:ÑÁ}‡Ö;Xí³íZÃ4-ú.]KaýüWæŸÉ k¨‰îCdDú¬YO㨊s¿àÛ’Y98÷°jêêêò[û³¨5¨2£Ãà¾\Hà H½Ìo?‡0ááááÌÑ‹¾# –YeÃß{QéE×þ2¢5ESFëxÖ…ôXV¡“·ú®Š¤UUbŒ&_j>&>A“óÖE>Ò¬NÜ>ð§Qô¸þÿûý¼_ë/Üñ—ÿ,Ÿôýóˆ`á‡ú 9? ×JMC‹þOß‘ç j7ÙÖÈïá%#÷ƒþòÄJÿUÇä*]Õõ×Íí~·ç»øðä’_ŸþÀÉ鯄—ãÐÛ¿Q‰VD™S¾ë‹õT›â*ö•”à‰=æeŠ,±côñyhðxíÅDn {O@ß7Æ?°¡í73ýó¼wŠÿ§2~îQ’T=¥üµø¼et7Ë9ßÂA“ûXëû,?ü*|•‘}/CÐË~5ëü‹: ·×ÈDüÿô‚Q°lú‘CguOg©•È=zf勾µ²*Y„€|x8þŒ'‰ýzMá™G¥Ò±ýI&ÌSÕ¬ÈÃüoÚ×Ï¿ÿ TÊ½ŽƒòŒƒ‹Å]÷å¿‘_‹ëxðÉî¾9rÀý<\a©lŸßí’Nò®BdÌŸá.Ë#æ]ÒöóÙþ:ö÷w ˜þk½ÚÉ g˜B¾¥“þ-¶d™å¤°„ãÅ'é5O8 !ÝVIã0ÓÓí¸›5öÓÿ[×ayu$â?¬pë8˜Íma òuÏ4fqã·ZnI®¾½™M+Œ$žŽZä˜Iȹ œÁóÕ“i¸g¯»zLHnbxËäΆòñáw̼ŒÃªÀa"BrÈ $žQ,I⃆¦ ë1†~Îh9ãe„ o»¯ùtn÷nÑaÑÂd=Ÿî/«OœOûgy–aû5ºQøÞ—Ãä¼r}$z%¯:}íO["†øÀ¹p4ú¶×ò-Á{¹ÄâN _÷ØšÈIÓÆÜô†å‡iœ{^åó‡äއÀ¡àìã¬G3Ð@X–Ò}Šx&+¯X±!ÞiÞ§Ÿþ†®|¨z¡Ä 9ÛžÅ÷yçÁ>5õ÷2£Ê\xú\{üDÕã:toÍé4æAE£Ÿù„ ¯‹¦Sz8~=‡sÔï'‡ÂÖ[Î}þúzãÎãg‹‰^Ó±¾Ô³öÜë­;Ÿ}¨†&[ ¾˜ÃO$ {t8¸¸ëÍž¾]+ÉÜqj=Ãéé•ÅYìzºWÙÛ}Žb«Ó ã: ªŽ® InþÏÏôø‘ ðùçÓ#;=kjÍa{×ù_Ùg¬(lÏiøš…¿ÀÜ+rµj0ÿüº×ጱ‰•EQÊ×Ùx‘î]º"«Ì\ºþó§á¡ÙìuQè»1‰DµCÓS’sW¦òziž…‡öÅ*9XÙ‘ï’@vÛ«fSYa$¬åT·r<ÿ½kZõ´-[(‘cÃôëS??ˆ"–ç€í¤W¯è\yŽ:ž ¯íkPm`‡?ééª$Ê¥We±¶/Ï(¢“ª`QSÐ[ƒw²>³öòéWm±Éý¸U¿•"?©¸³æwtã2¦Ú²¦uUGÌĦ]Þl >y5s•¹^÷À†Þ{Íy$tÛLŒEš .åyLD‹&.Æû¨U%Q³«]bÅ­RuM2ìj¼J˰qŽV  ÷»š±» W¦_×Ñ_õ_Ÿ¬×¼ÅUDWo™ÒÙ·e”Í¥¦Ùª¤­fÀ2õÆ­òô½ðaÑDFÿîUc.®W¸‰^û‚‹…ëµ`´õ/ÛAýLÎ/_@Ç;ô@õc¬À$ïòy‡ÿfl«?çÿ*sAÿçN÷Y£°R¨Ì8+b þ`a[øÏ-ú¡ïê˜À#ÍCÏ‚š¡ë“À5ëyž"÷—B&úqy:Èå½´ëUÊ“ÏÔ|œnMíž’Gv×ö_ûªo©¯Ñ½³ÁúÚIo Ïp^·ûn³&,ž˜zMþ¬„VKì*†ß.¦í,evUî"HÕ@ä`‹Z{ß*  FCúq¨Ø¢A‘’Aëw»Ü6ºn‰*ƒá°Ò áD SH/æd¥ª@ H« #‰°ßJ~³ªðýòZu­­õÔ6ŠzDM` •Õ°NŸ{µÅâr@<˜cåïöÇþhòêVé›3zonÉP®R\ÄgkaÅî!ªCiþE=&úöäч—ó¿ ï#2É\3$!Ì(0U˜2}š0Â=®/;UÙ‹ój¹CÎåž<”îä^;WŠäQs˜Ù$’ÔU }tÌÄç((p9mò8ï}5“ƒm33Å3ƒœn†¯s‡ÿ/²önzXL,Ý%¤¢¾M­eeê¡sãX|ÈàÚ§Á¶¡>IŒ úï€Z}·k9$XNÅ4$FBs0˜=n>¨‰Õˆyñj+C,T¤´H R¨Z†hËUÆe¶ÒŠ3›j>ÞÔEî¼»Í{»w¹“ÛwÔq¿ ½ctT‘¢¢-P“ü{^uÂA¼~w™ðC’|þ,óïhï:È·â ˜!”Sð¹9N{Qüh>?©¶»¡úíYuãi„ LS_B[©†(wެ.x­B¡ÚƒÅÒ}¾@é9˜ ‰²_Ñó£Ãp“\[œfÒß¡ÞzýÍç”ò_?¡ë¶hƒ#ƒ=òVgðHäãQ) šGj]'áCpÔ8›•Bg„®0„$Òbã²Òâ¬ÊÒ°Ã(?Ó†æ\¢­lëü¶/ÃwutI5—jÉÈzIiú Õ®­y<¬‘©H`F×­Ý…B^·ï‡ßhÿ$¯}Y'õÄ Ûþ({ø£ØÔƒ¥>†æÇv»aƒßŒðÙMUUCå" f:¬\—=5öª“K ¯Ú·ñ5‚•BE%€9y™©‰ïCiÆEwŠy%}Õ¶Eh™a‡Ë?ÿ{­Ýâ9ê ù¼r|¢ep=÷d3k1‘ÿìxd×öò»xÉÒ/Åd¥2q7½%š.pëÈØz¹£ 5zŽŸåĪkNÑ,mÈ"¨«R£*4Û¾M¼{ðzªÏLÛª¶¸·¯ÅŠüÏkµw–ž9º¿Ä¬ž7¤ÉLØû=_cmœÜú®ÔŠ 7„ƒÅKTµ=_ˆzÿ²Ï¶›˜ÒÍDRï)­³NØ¡*/7ÑÚ¤—¢ÇvY§ñ¯½ŠÌÛMù›- Ôƒä~¬6•ý¥‘ÅÕsâî%'QÄÚæ²t Çš‡{Oþ~äëYcí{\e¼é€JZLÒ?7–”;×g/|P³Òd/Áo1÷g*ߎ¹’í»>º/<{šd¤ªMì7dóñ¬Ò® 5ÒøË§ïøvü©ðÎʵUl§»³iÀCc…ÔÉUt’à½/¿^ï«1DûÙ‘Ú´›3ºÞ–^N>´•©ÜÃßYÒþ¯­¶võ8!v©¥®]LðM“»T8Ã2;ÌÎýùÁ˜†DoICŸáË¥ùE•%;HJ)ßwpèxU;`|7ñõu3%—%6ÄPÕ‡Û|‰,ñwh[DïͱlNÿ~‘ùêKÀj/Åå(ÎÃF´÷i1àÖµ}B?.X'@\’HI$öè<È–"žsÌ|Í©¦y9USÏ M¹Vó7©çÉÚ‹A! =M~íî`[¯o;óa"ünãA0½ÿ'Ç|ßO«èxï\3‚Ï8œ2Ë1Ïb`̘ºCáüŽŽMA}=Ëõ!Á Õ×à~×?ÒÙº#ú8ò¬d ˆ‰Æcݬõýçå}ƾ—,žd—aTŒ(¢ˆUIUW¸sÙ´íL~Ã}þ|ÁI}TÕFÕÑ*¯¯¶ßf¯_?M{xûëõ’ü~æ’ãDô…-!Ös£—־ț<<@§·Ã˜¸¿åyééëI9Ù9r»Ž×9ÎÎ¹Ø ®œÎ»ãç].¥;¢ädC&wWœóÕnÜé´Úó¤2¾»©½¿;n§c! ƒ5 %_ŒÞ•ç§Ç½zÚüsãºÓèhuïnÉŸ}l² ¸Ø`ŠX nÇ5& H ¯TVUTxõDM¾c¸±/Caq!‘ÇÉç0Bmš¯¯,B>»rçbŽ.ǨÚÒó|ÕÄÎç¨þŸaÚÔË«íüÝæs®w®(üÝO<‹žù33 =äVò4\Ë(³_g¦â˜äøfötx6]Næ¯ÊˆjhmfÅÝ ÔùÚ½Í?–xv»ZíˆÇÄÜFÑåà }|ŒþjËÏãèpùsLKŒ•Ø´Ë&žLìÓ&¤#§Îçñúî§ . gÝ ÕÝÃÍ;–F~ʘ$WÒó¥o‹Åzz>ã‘IîÞßþîí—&Íëçj75^Ž§ÕŽÛqmRz<õçzŽuµ<²QY«™®ÕLër{±$1Z•ªóÖŽíÎ);_–sº×ªµ>×ÏEWóî#ŸwRÓZ¥ÔêZæs+¹¨ÙÞ¬¬9z.m“¸é¸#ð“©É ù¥‚î(Ëd¬ŽÝõkNvîHšù’ü޽aTë0„ðÃ1IdÒY,ñ~6™¡Ü§ÎtkT€ÌÉ<|/ÏýϵÎùoW/ò䟋•ôî;Ri*«Ã/·huW»”½¬ª¡ú°%‰Šw-ï¡eZ8šMÚÒG¿yu‡ß–rLÙ½^Þªö>¥•å¹Fg=ÊVçî^»Ó~ÅÉðQ *pî“tùóv§çÇW½E„uÛÜQ¹÷ýâ^Uãö¶3ÇÔæ¸^ó{’yø›Vñ³îËN?i:{=ŒZÛ´\æžH_‡JÓ‰mêÉ3U©÷.*¢vz,b»ÍÉÉ V–ÜtÊåz2Òä'twÑSì Û=} ˆ‡ÁÖž~XêçgÜɺ‘SÄC½€›Þ¦^ÍVsi}¯nwuüòYwšÜÞBœj/Asô¸àõUÀÉ+Œ: ¨&ÿ nµ\éT^Ï”C¾zt3e;>­É>×H¨e!é&¦”=Oʸ8£?9 ÔèL$ &k”Šk§ÍA~³K$ØtƒDäQoÜ Y$NH0.=øÎ9pÝÔ S\ö¶ÎdqÏç¬X-%ñDÏcÕª5Þžã?ŠSÕÙ¹(@vË#”UZhd²Øa}Š‘R ËZ„Uêõ;Òí¢/m]),r瑩·9‡sO33Žý\=RüdYãïèÃîövr˜9ŽÜUvÐ{‹Eïýrû(j( ¦‹ÑhÚf‹b*ð~sí?+ñ<£5×í?èsù†O"ÑlÊ@=µ%͆â±ð÷È×ò½Î>f ¼‚ªª"§,²|Ì$4ìîq¾Þu ¾ÂûÅ–š«~yZ`vu$æ>úvõ§ï|?'éüïcË. x÷™¹«K‘ƒ§àën+^ßÇ“¼]ùÝ•›º¾·›ÎžÿÌ‹9»ur3f¸W/¡½CÕd5—à$Ѻ¿“6+j…[N[Âã v“„ÿ‚ãŸåzêúÿ/yþ§¤ù÷ÿ¯;;¥1àâºín¯C¥Ë³e'§V+1UÙôpt>G³üYý•·gk‰õðŸ ÅÌÃæÍ_ ´àusEÜJ9ÖÓ+wùq-ë—ûOge˜§¿ìÚËD±»fãŸÕXkcWJŒúÞ ÇµÍùö]0yŽÏ7‹LŽÔ_§Uâ‡cð¯qÛJój\siö¨Øî²oú$Û-ËìístÑÑô5z¶'ÚŸã×ow)ɳMþCÎc·×!ؼÈå„]8Üv¿›½çû/†j¥+<é\3ÉW%ÒÞŸ—²šŠIô·*¥š­æp †e+Z=\™ÞœÍxsy<' óèJ«³`©‰ú¼Ìx²ú mü®w#ß¹¼iò uÙœ¬½t“‡ô:ððA§]«òðgóáÇÙÞmíÜ/oK= ÕÕ^£Ñ5³ÆõÏ7zž¦üè ä¬Ö27³¸œ$œÅÎÜ)ÝÀíSŸ_¢›øøÉ'›\³U÷õ[·­©·‡SrýÔ„ Ï–¸ñÞGÔ5²n÷»¾ÙºôDC°(Š(š¦s¯=ÄÚv~1‹ŸÉ­ue^p©›«.¾â;_ I«{¦¯7"u6ùŽgSaÊ´cQµrd¦çO1‡CkG¿Ëï`'6'NÁ&BŒ‡TSßÛçÞÁÖU³Úõ3z±ušûYèÊ™qådq»rômçΚ‰ØÅVZóåm½˜ã/Y°Æú®ú¿G¿{á›F¤¾§s•óoU•ÍFMFÇ«ªv;”[$e7Vâõyñ{ãžÌî¡1)ÓUÅ• ªyùÎuc å^(ôUΪ%ËhC7CïÕݽì«%›4÷ÈÆïMÆ=šý-2}®ÂsqÞuuý_——§6\¦l½Iofö ýN[–¿¯Ë›«Uï–ý¸û¬Ô£o›™ÝëÏ·¥Ù·¦¦ú]<|”ÌÏȾ®Yê¾js‰µZ8ŒŠb{;*ŸK-&ጓœy!ᬻ0RèÅüóàáÛ=«öqs+¦EÓrÿS#`ÙÇŸ]õ’n•Ýk›ü--ȦwÞÞ†yíð7‡`i¥Þ «ƒçVÖK·u8w×ÜE¾ ÷'Ï3j-Þ‹9sÑ5Ã2Ûå*6——Zýø­ržsù”µŠ÷h8ure6…ÈÁZ£(á@j±¼ÏxÛÔó:Ü.=O<nÛi\çBíÌ#Ȫ*ÛÖsÕp“•®ïWÕ5'#…ZæLzM¯ÖØ”|³u¬³~õZP–yÌó÷ûtG·ˆ2õsê®%Y.\/ê?\¸}| ”k†?Ró2=pøæÕæ¹ææNp¬e§ dKËÃ>\˜àæYe›Öù:ñÆ^š§î6ÃYCË«\#Š”2»C¢÷.­þ½ º«bìíìæµ{]7$ò.Y›쌙Vú¤Ÿ¸é8„ŠÑ@~¯CRO:GYdŽÎIzl0„Ý.št§Á©ÇY«†M¸zþÍܰ¼ä¿~ëgH+®³ÅGaspɲÔ=-Ç5 ­v+§$w};s3xLRpg½Í¯MÒsú—\j­9òñôüÆ•â·^öÅÌiì-†˜±Ÿ4WW›Ç’0¯uky_‰~Mg8ˇR­»p¹·²Î”5nptõüébÇ“åüÝ3R\ÛSßY!°ý0Ù.ßuôØŸ¹òKŠ|]nÛõH ¯Vë>kÐ)Y+ƒµnOLž é ô2ÔÒÄkb¦ËLÓÕÃD¨ó1ñ%NÎ’õ×ÜQ#guØ× ¢¨V«+rá¥ÅJl,u5dá»?^ß/ÆçSy‹£Û,1,øsq¶Vl¥5[‚—ê«–ˆ¯Ñ¢ÞÌpSsæ™l%ïÕ%ë.oÜt4sl†jO“Ñ$KªæX=µu˜zŒclðÒ¬Í<¦lÅÚ¯DŸg½»x˵kæÔ¹[«uÝ+ ÒääºK*K/Ÿv.&ÃN&Ì›—5ëÃ1ŸMYïH|˜b–^Åíë:XnYVηԒ­Š%ëb…²KG9¼úë¶¼7ÛEXø(]á÷²NèÜ…Êǧ—óµòb…´]{æÐúaŽ^I¢¼û®2ì±~\nÔ©÷¡‡a§®;{œÇVäöÕdn|šÜ»ôC›‹fœŸÝÑn#ŸŽ’æ|´B]38ƒì+%£.¬¸íɼíˑ٫~4.í\ÜëŒPl…÷Ê¥PÝs¤5Œxâ+MyË$º±Ï 1ßžI¨˜Ã4và½ÙŸŸÏ¢z¦¢é ùàéÞÑ~ç- )-ýMÍ‹ÃB×javïS}Û¾ù÷:;´±AW‘H"N!UP×dFÜU¬dÉ%x¥W׌ÓúÙÄà¶J…àT*xªÞ—û ¦ލUµ›mŽ?‡7¾`ÚÔ]íݧ2hÅ ê´´Ë'S»þ!¤5— ˆj*%j @31z<ÝW,ö§´uR«\úW£†\–· šæŒÈª0¨€ª€ªŒ¦Ó»ï¤ÅÖv—è¢~}û•UU}ú²*eÜùßCT'u;;éûb ê-ChTBªŠ…jîÎ¥ÐÀ"Y>Η^ëKÕ•×Lù‘–ÖóMÏA¾{“`=ÿU„QÖM^P95gR¢.*|ÿN}„<º±¼MWCé“Á˜O4õ[½³i4tÖ®Rh="ª/׬þ¿?<<¢QÖš­_Òyž9ãm¶\Óê×I‡ÆƒÇÓ§mÞÐ58ƒ§ˆE™°ÌÁÓÄ OÕô½5rÉã«Âô™¸ÃR$èD%’$†Ò îŽjeKÐáÛÐ|1Å}üºje†uœz­ íÉÚ…ÓÄ{Zv˜<&0`xQâg³ïaŒã·”½µeaÄ:É>¤ð±æù[3‰&j0.Ý龎a¹³g 0XT¸bÉè¹lï ï<Ûò:À°rÜÎj-™]ºÜ‹WlIÅëcuj¹Õ\²7ÓœTö žB,“3Ø;·%ˆÏÓSp°µuÞ·½°³>,xGËÂÉœÌ&4G11Uâ@²$'%¦Ü‘›…“‘ Y+­kÒkS‰ {ßS!Ÿz˜µì ‘¼EÏ v\œ—†]ý€A#Ýfü/ÐËÕðý=ÖôÞž‘¨æ.~eßO¶æ7²a2õ¯åÂBœqjKÔ)©‰Ž£àÉaL6¦Þ0ƒ éJš×ß>¦‰úû˜^ý{d™ܨyc>í= 0šœV³Ñ³3kRò£%U5åÚ½i*ÄHV¢¹ÓÐ䯙Íí†òªìÃUµ|¿CœËÍéý}·Ê/Y~¶­8ÓŸTZiîìïWQ:õÙÁÉæÁýöéªãÏîU×ëQUûýžå=)êy/Y‚¸¶»'¼W}3®z±s^c·Ã£ ¯„þ;ëG©TçÛ‘qUä¦]Wâs¤hl0;YnbÔÓºtzgFg™• ¶Æ¿ƒRl‡zk­%?!<ÂÇdv[óá×v ^ýŽ¡ðàÍ¡ÑZ#’VQf]15¯ËŸon|’ùóy&ÙÛÊ­ÚŸÇséñÏã[ÔT©–ïJOêݺè7gÅÕRì^Ç.,þgÍï]/r­_#ÚÁ½lH,†ûÜý¸ç5Leáf¹ºìÖêÍù/6ò·ƒðº¡õõ¥òø9²ë½ÛÓZÖ˜ŒÖ]ÐH¼<²Í›¯õèT³$¢çsµv p\Y>;ìÖ[{ä»Ö›LïëMCèU$1󬸌Qâ„&3–ØêH}<½Œû·v¨Í?K˜ݺv;žI°ÒK$¬qª,=&¦šµãË? »X­îÛo·õòàÉ’[Ò^±eç.ŒzS×\sé™iS‰Ë65b £Á¨,{ñØÅée¯F¼iw•Î9P“‡ws½´;È'º–Øn)ÌZ5Ú0ÛÇËN¬±¸Èí­ÖŠ"îM{ (®ªuÎÞ¼²™ï€S)è^IΟլþ'z«Už;î;™èžËà¶~¨"oæO´)|Ûwˆ›í£¡˜8mŽÑr¾³œž”å©(Y”M“ÒNž‘V Lª—œ–qÒÒYôS^ÇK×úòºŽ{¨‹¸Û^[Ì!îtw4®¤Ì8ÜÍ*>ßNi¹HÃç¾”Ñô9ù'zÛNÿ_çËx¾N¿»ŸsA#"É'´l»Þ¹ òHIŠtbõ°âæò~˜Úø I"FõøÁù^„ƒoW¿Üø}äý·¿_Ú‰‚$Œ$Œótã=³NÑ¡~.“/‘P¨5‹Ÿ¼ø^òÆ¢Â"e–B¤$‘Ÿ eÏ®Së¹ÇcÕÅÑ‚DQc«Ø:hÐ7ò%SbOzÜ‹òÃ…Ä+µs^Ð_bÖÌØÐv"öd™h•çŽT$ô !8[,¸l›>w¦§vžÜíÌIÝÒÖÒ3*â<=®lëy'p“S–¼:=q ³²Ù®4¢S_+NÝýàQÝ ˜ZFŽÞ9]à05YRû/ÉU Í$AëÚTe‚ª*‹òø´ÏÓ¸²³±¹^zEÔ“OÖ™)è¹Úã9Ó7?ƒ«Ð%|‹GÑó:Ÿ{²…êgÁW†Â§ˆÅþg¦`ŽäæsÏM@QÑÓœ”àÖQ%C‘5‚ñçÝ÷7ë­é:ÉQ(œÐHÝ+Ñy =‰Ê7u<¡ØºÅÈ¢|¥TTn …¨(÷(^_Jo†"óÁ‘÷;_èù!`ápD@ó9<Hr!·¸VÜÔ´è±À;«‰;@ SA‡¦,»Ëqµ«í€B ôn &UIg‰­&;¡Î’l·šÜH„½>!àBÎä=–ÝÃPb¤Ÿ_†ÿOúÃï6gÝ—¤’ƒ|ßt»Å»2LiNE¸9‘0WuŒq7ާ3UŠRÑãn%çÙÄ*¥%äïúGŠwµxšëx^/=µWH£A ùl'¶’"þ"þwã‚ÃA|Ö&. ˆÏêä2åY®£J¦¿c%W+Ÿر³Â8OµÑ„ʦ¼TÖ…†¬_ß2­ù®šɵ¾I¤ ³º¨È$íE¶…]¶/éüÒµ—<ÃôHsC‰?`»!_t'4D?u°üÉ2;Ghí£°vNÑÓ½Ó¨íT"§À*À‡N˜ÈÔêI„ružgûì_wÐê8†·2EZü=ÕÒ›¬Ù/ ¯#V­¢m p ßh.+^í iáoL;ñPÖ<šx®·Dò^0£·>K,ay(eè*Bäh Ú4E9ÑŽPÂS&\©¼ ‰aRÒ̰‰„°8'j‰9Ò€ÚvôK°pUåb³ä’ûFò!XÙY5bØ‘ˆÕ¿‹2~.bN 1 \“aúSvéã·Áµ¬ƒMõ¥r[T’I$–­¶Û˜ï®³‡}¬ÃÑuP»ãûÉ)Çh‰‚²I$›ú’U¤„àwFጜHä†¸× XDÉ,,ŠHI,”lA¹e ±€Ë”f0’YbÌ™‡Sæÿ`úã0öÓçW>Nº“­ìðå’DDá \²L}p±•ψˆ‰/ÊìCØw²öù^sþÿ¡‚ B>?*A=3¸ª¥>Î0Q€äD°7üþÓ™QV€š¢(âeìž²¢_¬“ã'U=ˆŽ›v"G®·¹de(—T æ_ó¸ÑiDööYäšÑô§‚ŒÖë¬æõU•ú¥Ï*vÜkE•Áˆ1…Ì*ã]1!ª`èÒôý÷÷5Bæ,‹§¥×’I$’BXî…ZOZö´žÁñ½ßÚõþ žruTøïÌSæ5¾z˔ſ&Îj-m'ëÌNˆ.,„“ %¡b~ÁIt¿Œu¦8: °\Z*Dçø½n02޵.ξ ;a“Å »Ç„UUø2;gÑcÕ'ÏSî¬ ¯òs×áw{âýá¢!çûKò­~¿GD!­ƒ:f÷•ÌÝV¨W:mÑ„: ·ˆ‚/ dZ¨ý³Œé¤jDêÜ<†ERûN·sJH~ç2Ç ½$P>«¹õykÈ̲8؉–yÒLÈ«¿~žüb"?g{5ü êsåmÄŒbŽ’æVŒŒIB\éOJwæJÁÕü€šc¸}^Žh»äòiOf’°5÷)0-½‰[6:+¼|=³¼¬+ [ïÑj´ã® ø˜¨Âîí—€>ãê¥úíWaòÔˆÑPØTe""¨ª‚¹X¡Cã/òþ©å½½¨v“ª¨·}>©û<ü;“gZvyõà§§wѰ%xX>TˆÃΪ<ûè@Qʉk ç òÏ·¡<„-×Õ)vÀäzT^+ä> 5u“1@µRÅá%¬|nvîªç‘”/KÏ ûqi˜ê¹–[ˆ› !ôÓܳ¾#ýfŸ}TmD¬Íêª]ó½BÑr‹&ð·Éü²m3Óö!R£¿+[âEŽmh3ÿcèõü¯“ìSYïóò}wûþ~]Üå¯ÏùŽzñ§–î)µvµœKØŽ„M¥ñ~ë{OµL^…u\RS ð­ìO¼÷¿¡ MN$F'8zÝÔîúÊ`B¥¡žæõîxm¨{(V*é'§wÑÚ#W†ãƒ%c9»’{Nü¡,4ž+«]¸<72ç˜^¥èö¥¡k˜ÂaN‡³_A B*wŠ{‰ÑåüŸzâ()‘„‘ƒzìUD§¶¢ðñpû†zpù÷O=ÅRÇJÐ\r+ÕN(y¿} „ì¨Îâ&nh=ÝsL‰­ð2:ÖE9W~Zº§9M÷Ø7Â0ÝË` !U¡Ûz‹h»õ YóÑ]ñ¡ÕÇÃøGÞêi»‰$Ì8BúöªS——ï" ƒ$ ÈRß3»Í¶kZCèÃñ%¡4^÷3VÜðT8ÅGÈ€)Ù‡–ry´õû¸úÓ§Õð>œ‚'šƒÌ*±Ís3­|ý3R³=á€É&E™Žj! ›Tƒœ<Í5siô)¬KÅ@|¥òÕ=ÅrŠª,®d×AÖ­ ¹Õ<¯\Òöù²𨠎;à?˜'Ä÷ý?tbùêf*z1ØG\SžÄ¤¢6 ^ˆUšÒdÄ ­ÉñÓTáI ø¬á^öû»8»H±$ª=9UU•Þ>¾Nj*‰÷WÓæ}çÒÞ½èIPCLw“ÑŒ( ŽOcŽo¤àTïôzGˆul;R÷ºšíÌWÉý×ÉüÌŸÍ5ê6éžìÈæ$±•½p}n0z['Ed¿{[»ögï/¼}¸C/¼_4òå&¸ *yª¬âçk[¶y×!£GiªPF• ›D›Ù&릅×J×›Éâ•ð(Ô,r9;½O¥å W˜'¯´cÆ ¢¨€ªˆŒ ?tEÏï¥j;ê÷zK ùê“XůáLeôBB*ë ¨evj}2{§‘¬W/DáV"ƒ]A…'Q|7õiëÂW®s»Ñ¢Š+CÜTï¿z‡³k¯Ð70D¥yíåû÷¯Ö|þ}·íöÍí37çÎsa¯u]v ‘sFƒÙê¯`X8Bb_:×¹²5«Ž²ÛêzŽ?ηO“ã­NÆEA…`­ýø¤M ·×.óûw0ãÉšâÒ‹¢¨õ‘êÍ}ª>'l|íyäNŸ\~Ð;¾•ýÔd|’2ŽPÐî?càCÓ;žÏ§©Ôûg7­ïßB¾·‹k>uUD$’N˜;`Ú |}kg•ð/éê<ÿ·9獨‰ì1…èx{åé·ŽÒHaD¦‹ÉobåÉî 2AS ä-:ß¿‡î/æ)ÛµÙ™W€Oùõ³sžàr¤ŒŒŒ¸þ‚œJ•s –þ„ ŒJvèò)r×]Ô,z2ÚèÔü>”:‹Ž$”¹ç‹ÄÏWÂ.põW4)WF‚„bø"¨O¸zWOŒ<}_*³KÃÐ|‰: j®a÷‡Gf¼ghoH»Sø\\õÎu$®´âô~$7²‰²2~÷»­“AÁ1]žÈ7s™'©yT “«J$ƒ1 Ùû¾Nª&¯[Ìû;¡Ý›ÝwK£¡ÜÈ£ó¿Ä¨_‘‹èH•ëÌ•ÛÆc—±îÑšcáùRé%šffffû$u¥Qz·JýÎløDÊ~Là⫼ú¿K;˜|«4ýÉÚéfdË1†W@fI ˆ?.kUÝÞÝ©â÷\¬®ìjå‚åÑRDKÕ걵܈A Û 0˜ C [ð×@¸çç>󜹭|Êú¹ö0)R} §ªH°Ë$¦xuëµ&£xñ R¤Dà‡-N3ÔÝß×Ë^E4Ô&¥'¿ùGjç$…ñëq\GæÐë—†ð=¯2ªasLŸƒý. ˆ/âæ­D¡PŸše>OÝm5í/{F!jTµjÐÇf‰´Lʼ ÓÜýôI´H»A÷—rDÅèô¢™œN^±¬–Æ>”Šp~ÌáÌ{ÏÄ'Ä÷Ýü>¥¶1Tõ TU­Túl A™—Õõt÷¯r|?'®Q=3¨®Ú7y®*€ îÇòåë:9ŽŽþ´ í¿¤7·Ìž£Á®ivQ/ÃÖæ"(YyæïP=âBu>|èʧGÕ°½…2ÕGgÃñÏqéªyÌ“+»›¶ª‘s”R…~f.ŠÌ¸>0~7b8˜óoe}û°þ}oÙ4šÓÌ9èóV½ åT&4vMÙÆŠÞòQЋÜç9øèAÐzÌÌù?Ð#ýŽÎ$É.76"ÌÌÄD ŸÑ7ˆ ƒC‚âñI™™ü0>¡oÃüĿзQE ÷¡‰ÈÖ¥¶µÏš­!€¨çB»u®¹Îu#_Ó¿ßžy\½ï{Å- 003*¸JûÉÎ}#f]¦¼é»-FñC{Y2²²ÒXÙF– c’å·TÚ?®Ë{y{$uã­µÍFÆýOãÕûE¼¯J„LS6M[‰×ÃoºÛ8Å„‘‘’Iö…•H“íJƒ!!øQ - Ÿ3 õo{èØCWZ5««m¥nÌÌ>.g˜d>oÈøwÙøÔ}ü^?o†§ ªŽÒ$øJNÊíSà¿!§BãÏÝóËøv«+Ù~ê“;òÒžn3Ûå<â€E×[Ý-•·åúÛ´6ÕûT”™×(eCà6²²&†Ìøè‡zÚ\ùÁ=›ZÒFT(¬Môs|Yý>|§I× Ç—Æ’„ ÔÈÂöj%AñžEÃŽS”}­óAè€êyVêÝ7°Œïà"ù{ˆ`«ËêAL±¨¿³ŸWš&£ä[Ul·³ó‰¤ágRÈÕoHi—íæçÔ‡âd~/ë}·;òÑ^ýírªûÿ·øߨ½÷qófùË΃#Š*HlöӣǎvjdD2ñ%W)o¿€|ékvˆYðñø'òÿ }uäŠß><¤Ä‘— ìN_R­b·I»Ýön?´ÕIàÈ¡í}Ö¨ÔîÚáÙÛfÚ“öPŸ´ÛgìîQ؋ەj0¦ xa”KÊÏß–Ìd"-—?[ F¨§µóëÝüwã‡~ûöž;35"ŠªaÓ)=4ºíÔ°yT”‰q•'[ž–çdíªŠsxÍÅ·©å§×^‰ôo¹=¿:>”Ò}YOʇÛ%#×øky¯{ÑrhÓ²*mó–_Uv DÚY;:…/%SYdt“±c ÌQ$­êt€PŒRż£•Tô*¦ý9þ?ßêö{:-ë¹.;å™î}@ÝVS˜'ñ{ìƒÈs]¿Wö>Ú­yWävÖß $¶V65”Ö{ø·Ûý5û6*í¶Þizê½²7¡”J²¤¢…åb‡Ù׈õrúx8ëä7jG=^ÒÌ÷óZ:B\P¿uŠOQ¡b0œ°ÞR„Æa4ùµÙv·|‹Ö‡¥›såIÇpü Î=¸ˆŽ±${$~G>ÖÈ^i™á¹î‡× qû4õsåáðýÖjlÁ>ùB—#åÃéÚq_‘ž“r¡+Z«\j&í™e'vÔÈÏ á(á© ø9Öͨ¤6üæ¹ Iuàõ£^cõ0ù¦Úü“~]ÜõÜJ•ÓÁ…ªo=tÔ(g¢zOÔùvµêá ¤¨E_Á²õ§ÙwÛïÌ7ñ_8}Rp.ÚËM®6í‰M-(K›p“IcmŠßžmÕçnÕó *vÊk~¨”âz”<„ŒÉÓ”~ˆký™bªU  ‡Z'7¤B4PÃ$†€D`Mq[p2ÊxCÏœä<Rt}pEß (Ëv{V½àʈI$! ŒË·µë×ÿµ3íêöÞëÉ Þ¸§ q˜}Á þ©¤¬Ÿ’m¸˜¢Úår¶Ç+›lZ*ŠÑœê0^ÙvñÎn·7*ÜÝ"@\s„”ÊÁQ‹˜¬’V²€qmÁ˜d nV8"’QP•UUT4´·X¦P>µçuüùŽi”Ѫ,f¢ªÄ÷æc}ÚÖŸ±Á§û„夎êüFüõ„²½]Þùéל8^ûkøÄÑçDšoé`öÅâ~·wò}ß6š¸;¹{µŠÍмæabª(nû]‡"R¡ž»n÷¦•Í×2¸Ç%¥ß·dG#ÌÉK.Í ZN¥UI'pÅ9¥ LÝd_£ß%qm˜Ž;>"T ¸™"=Y®{Žâóœî½þ)o>f®› ¼ÓÇøÂS"¯ƒñ[熗³¦y‰‘ÌßÿÀ'wÌ"þS ¡ÍOF >TÏ~¬}NÊ0f}WÞKÿ“÷ÂýoÔz§/|Rd$éëÖ[_ƒÑ¿Îp}¨wX¶[UT¶•?;UÕÒêî¥DÊ‘Ug™ëõSà^ADíª þÇŸÐò“ÄÀÝ÷¹§ìz]®ÃA\>­6/èÑè@EN*~Ê}t+¯‡Aêe6 jmêk:Aî ¾/KÏ‚LY°€V—Tû >ÔŠÀtÑpm\ózÙÓ¿ßÞª¬½»ÿšÔ˜»§ährŒsë?*³о†ÀžOˆÙ™ßà”/=oùÊâ¹`çá§+Ü®Y ÉÁ·.}«9 ä \‡™^X9äÐùß<€Âð/ {’LÌEeí® rȾ?.gÐæ€µZîlÔ»e…;Y]J½LtRé94ø;é¢}{Ó²ƒ;LÎ?¨Ý/Ù2_nk²j¾¨9b`‡ÞÐÁúï-éÇE ÑÑÔ0¥´¤ZZ¤$“QÏÇm{¶UC­/•OeÁ"‘ P@o)OòFC›ÍdCÄzÊ¢SÒAô BK¥ïÊÈ|bvÓ酪œ¸[Ü«aÒç飠U•ÀïB‹hƒ…ê«}4DÅW#¹Õšoþ¢^¯"&>y/ŠQÙUPNï€ÿýÃ?§ûÿºuÛ«R+ö7¤ÚJK0…Zš©Rák#&™øf 7¤…P‡_Ôÿ2¾‘›¥÷¢ˆ|ˆ3G zjš«‰~±M3Ð¥(ÍE+Jô’ ‚j€þzëìtúw¥¤Zzœœ?]ÝW1Çžþi lG®Ê(yWáI¾?gåè%×/Ìó%®ÜµÊ2Ÿ@¶CµÑùy'û— ?2´ î{[õ sÌñ‘Ó…Œf.FÆ>²“T0„"‡ñ{>] ‡à Hù˜aÀU_åZÔT™›·bë·ß~añ3ÈÔÌ÷-.ñL"Ø Ã7Ù¦Ž¸Z[­{“[wžë:T%‰Ÿ_GOQu×£Ç\*T¨(ð<Ïß1k!ä}¢ŸÐf„e9OCÔ9†…Ï £r¿8Ÿ“×+%ÓËwêP†¨‰!ží†ð~0O תëÏ8Vûþ AÐÁŠß¼&ÀLÀ„â }È$¨1‡Ð@ðü†D¿ñï[úKþo­ûuÛrÑR£h >·d¾s;[9=w©Ôa”eë9Ýa›‰™™FZ(`uVá܈g{³øW4E³½Yµôxæ”W@Ï—îhÁ¬qó>wãÂ@ïžZ? ˹êŽ%à'‰ï¼¾i{C§EÏ€ðïÞMÜ:Ä=Â"º¶´œËØy~q÷P $Ÿ½á+Ž“_g’ªö¤Î×µx bÈ„ ¿5FAò¥{´Œ!=câ{þ¾¿àè:{ÔøvÑÐ"Çä0˜EH³ qT»ÙÌu&óòv²®ÄâK¿VtÑѾ²výþï;–n8<ë!u| ÉÏjí€þž2’=õK=qïó"‹'y¦™ûê~Ý䔼V½Žt(XÅRµg00Ì&%ÛšååHøýßÁÚ4e>ךãzíü¢ #$’”È=ÈÁЬ€2($Š@&R‹" ×ó}*©çË_ÓüØüœp»þO麶~Åwja-©/óu¼«o;«tÆR¶L3Î]Õ¨¬j-*¼®×5Œ¶¿ç0¿%û?×róNùÛÈ@Ò" ªs¨J´ÒJA)!°•-ÝZú ªýå½¢mjö£ „'à¶Õv‘‹XKj µm¤*Þ×í»j¾í_EVü’ý"ê_´û¬…ΈUY¾p ¿"ŠyÌ£v`½AäFä‘#ª¥¦"Þ‰ë‘dDP4y'œýŽVMx>³åBI;•VÊ-1«—U-«çLgM_%1’KµúU¤‹–7¿°(áa®2qPûÄÓé†<|•/âÚÜ×– ?×Öý(yÂ)"md‚/åû¿ƒ`º cÈŒ!±„U’ ˜þæšõÕ{po¡þ«}½ôãœêÄù(w˜ T¸‰:¡z |ze8ÙM¤CÒ,ÕWBI4¬ ›pH£ˆAò⑉ˆ@‰Cl ˜3Ñ÷Å‹ò¤c™û"¶2ˆ†nq“ñe:“©ëÎS4B(qÄ5ŠÛìì§bY¾a÷¾=|øncýBC™2ð„èåö°øKÁ>TÎ Ë’S8½÷œka³P?®Ø¶Þ±±!‡ ¤J›¢Uˆ,ÞÁ14²ñÌéÑgú¯õ+^c²£È^y£è‰~N¶¤åÔýÓåèÇX‡ÐÙLÙ#eÍ&ðåÐïäz_È”·B*÷9LxÇþ­7* ŒKÚ å¯·?c±i=€âA‚ÖŠì¨9d!²Sišâ˜áÝíΛ½AÆ‚Éh³G£ý:ŠÝY¦Dx,[$Yî²K2 •Œ†m<ê÷v\,²ÛgnͦôÞÜŒ¤$“5J‚N%ƒFg ¬™óò Ä¿Êü—PÏ7‚yhÒFMCßMì~¤G E,Cf1#k#‚*ÑfB^ôcLôxL~‰ÿ=~=¿cý _—ü굿پ˜nSw€÷á*%Ž3nÞ|ÝÕü§ØÕOŸ,óüü8&ÿäÞ‹7,ßDC煮‰9ä›éó°ñ<½3ì¿C ÷|ó©ââ."â.#ò|4³ÆY½£µØ5Ûö®æŒ×v f3Œ ‘FÍnîC.Ðw¾ý¡&Ny o| ~ïZY¹MS‹»—Ñw4`ָ˰k>`)ÜÙƒiÆÝƒZøeç?ðf˰k1œc³‡.Ä?‹08{®ße­o«Im,µ™JJ”¬Z ƒr”[¢ääe ümWªšå¦R1Äéçw4`Ö»—`ÖpÌ?*S¹³Ó°v oîÑ®æŒ×`2ìÌg×€;³0ïO¬ˆƒ^¶ýG2îz5NÀu»º÷ùR¢!ÞÞ¯UŽ–´‘sË"cŸ:Å1;Òx¢xÏZŽ’°šéôðæ ˆnŽSVt…ߊäL9BDAC! H2ø£["öÓ'àШèèÜÒb"Á®šTd/]@Í4l§,ÚEñâ•ÓBè®{U µ‰A̬@–Ǧá­×ð€¡í{}]‘(> ܽä€Á„‘%¨›èð¼)2iÁWDñ’¡GÏ-¯{kméi2jbÚ¼ÛR凚²‹cxï¯æÏàmºC™¸eI£Þ¾nº¾ÓÖæ•çsiQguÓ&%P`ªDÞÚ1j(sD°ȹŒ[ÜÄŸŽ–Ð‘ìÅ ndlE‘’“[kKRÔ[%¶Þ¦RÕtÖ¤ÙLÓFÓFš¦ÊiˆÍ%™+óémsWÔ«Vª’éb E‚–AoÏb>mÿðà¿«ƒ’éT‚f@Š” 6QD-̬ÄZ€ZZ«[-Lš4û_4Œ4a¨i¸.faÞ”ÁæÚü_•öVÕù‹¥÷~ÊÙ™Ÿ/žIÇÍúš{[/ iã·ØïRC2f-Ðq ý#Ž!œ?£Èù½÷ ÚÅÈ ê÷ 5 øÇ‹Q0âNFl2áçt~^íù*B¡náraj¼•—ž!oì"þ÷ˆ‘$$õðÃ_0$‰!&fƒ™ÌÚìÃÙ£6$XüN3>o»·µjò¦—žÔqÉŸS ºt'½ÿÅGxpB”ë MÃÎ[©Ž¬-P¨!²Û ³d;Ó"¨ß°CPöù—g¤¯˜q<3`?TOË`2ŽK$´>õ‰?‚µ~Ÿy9(20ô @ü¶;àƒxÀõ«TÔ[ÉõŠh‘yÙ‰’ÄE°Ú¼„ Ú¡¢¥+C±-!& c;§¥$fª3œ“¾­Èƒ=/éjÌà T[B¡K‡µ¦Tµä´ãwÍB‘…˜L„(ŠI‘Ž#2LÌ sá†îg&ÓÀÉfRÈhUf”ã‚ó(=óÖ”øŸ/‡±Ï‡³Ê$‰ HFA¤RŠ”"æUE‹K"RÕKû/å<Æ–5㩚zæ4Áö;u`Ê¥F©B(är<ý-dY ½ ³“‹i u¥Ôÿ–:hP‡«•qü>Š-€ñ&áö>Ýk’舑Q!ØBçƒ[Úl€ìC¯ÂKcó~Œ[“ÄáŒ!3”FDá…¥ ¶¡¥ŠD=ÌN¯†4[ýãÛÜ{!#Ùy<Ñ£/Þm† ›/ýÀü‚üdQ?ÍöÑÁ?ÿÌPVI”Öx3…,(¬_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø³?½ñÐo·«°È¨¶ÇÅ@À÷Üô}³—Ûõ õ¦Ûaµ()6*€S@ͨi”°€(ùkˆÈd2HT-mô5UÚ[6ØgyóT#KØ|ÚEOCœ„Å@o¶–öy^ÀFb 0}aêØO™l»t$Û[-£BÚ‚IR0Ì=‡Ó€}Óç ݆ów³«¾æoº€ëﺶNúuõ>ÃÖu÷¶ÊëP ]:³»#b—yu³\^€×B‚^Ì!¢Ûm¨©ÇÐP9¬›Pô ]š2G _ ¡ ô=‡|ß[ÛWØ>à÷Ì6ÁÕ @>´ zÀ ˆÂV@ì耼„¤§LNš§ìRæÀÑ×EÛÀ†ìQ@$˜…vk `Š¥tY›`•žÎ"¨=+m&B@´P¤”ˆ4ïYê”´À¥4h•W`aØ £yè Pƒ@b”¤íƒ<€ë¹» TAí4@4}•LaÐÝŸO‡ë}°Ú˜Ðn‡Î÷gZí²Ú…ª|Ð6Ýo]åÒFÀw{ÎÛëp½1Puñn2-UU¶€¶Z™ÃUVË¬è ™`€h«gk{¼I[S>>¥à×^2ŽñÜ3Þ}½öñö¯­ y£íówºîCwº‚é¤ñ¢=€v=tíí¯{Ï=…es.ë†>:Ðó*h€ã|=P!@2Hi•A;»}¸zdù¾×¯ âlrû€ôu[` ÈûÙôQOP5öîc8³w€DG¶€ ö>ï{ÉÍÆk èúYmÇlð^G¤zÛì3íŸbŸC½:ŸwÛî^ï\]1"¯¡èzišöèU{;·Ð0€-»é:=qD®ùò;Øìò} N>©>{—§Ãï³Ê__{ ½ÇÝjÖxto[ìßx… ˆR¾÷܃â`ڇݙ=ǹ£JSׯlÐÝÜWr0 Æ1}ó˜à¾øß=¹5g7Ÿw§{ï= \sŸóz¡^®÷±Þ«¬Øׂà®8ÔÏžÝVÞu¥‡Þ™é×—9›šä·\Y­½î.¾ãáçÞûî×°ùæ«Þ‰sÛ]ìóï¥ÛëÍÚ¢çÒó-7ÛÏ‚Ÿ}Î{°{tY©HºË1 (Ð7;pXªS ªœû´ 4„¾ QAë$«MößR Ã¥$¾ÅÕ}°h(Äø Z$ñÏ[Áà›ö׸Öqàëzì÷Ýñô¤RŸ@AîÁàJŸ/YwÜð v%å•CÐ4èÐw»×‚AJúiÓÜÇ&÷u=ó¶ ¥š¼§¬½°Q÷_@ǽU@ h6`§Ö…®Ûj1GÓ}˜*)¶QönôTäÁ{@ÜQ{Î9wÛ¥(E½€àÄf>ÚâîÀo9Åïv@âLížg›"½š»îÆ×t÷s¨o6›m€íLrluk:é nÎæåÔìj6Þ¨9_W:‹¶÷½÷ßCï`ëA ƒmR‘ †ÙWÓׯ4mC³G"3P{ìùìSß}ÃgÈf}}+ÛÀ}¹ò󯦖Ú;šXì ¸\i"¨ˆ›}»ªÕT^ÀÛéß}`W¦M·C$Šû>í;° Ù>=ìÝ`Ó»«š+Êìá[^ã½9ÞªííÛlöð•(ç¡(D@L@ £@†F€2dÉ4h02dЃMLE3G¢hžDÚžS Ñ0Ê› ´B M@@@4™ èÓS Šf§”`Œ=MSðõ'âOIâTóTôz§6¦Ó$ö©é2PÚ©±A†“ di=@Ñš&OP›J$ SOƉ¡&ö¢žžI=OÔž§è§ê4ÑM£Ôš2hõ zž¡êm4zž)¦ £Ò@h  Ñêš 4hÐ “I"@ ÐÒ™ Ó)è)äm©='ÑOÂOe=SÚšyORf“Á¡FÔòOSÔÚžˆ4ñFÔÓÔÉé¢4 ›P4õ¡£Òb@Þ¨=F€B’BM&CC@À&50M3DcD A„ÐL#LŒ˜Êf€4M<Šy£Tó ¢²šÓÚšFÒcI¡ Ñ  ÓÚ@DhhLM“ ¦š¦515SôÉí*Ÿ“i&ôÒžORfSSýS=OÔžQèƒÚ§êM6¦‡¦§¨ôžM&i 4 ÔzSAh?Î}Ó÷/ ëO3¹Sâ~v0¡ëžì<âó¼Æ÷v³7`ÓuÊR­ ÇÚË——à|lœuñKÀÂhdA•%±ý›!¥VìbŸ•HÅF”bª¥TŒVòÁ%ýf1iRÐ~k7‰²ET5»ýøOð?yþäiåŠs çR``ª(ƒ‰Ï0ê l=3Ñ->Lq=üECN c©_ÀÑÂΣö›Œ*”uèØ¦Ìl?Ä›±¥9_Îi‰&8(ѦÜÑý„ôr÷œúêó¾²¹;Vy4⦕…)FÏ •i²+àô1= íSШUrWi£.,# Q&!DŠ[B²*L0¤ ŽX‚Éf”B’Ú\$‰b]­0š¨¶[ TÊ‘ÆèpbbDŒN¡À#ee‰k*ÖêjRZ–VˆÈ‰&"61" %‰Â0„0…JÁXÄ¡¡3 H’e¶Hó+©æx4y•£š1¦Ÿé´àÓvÏé©»H:£¿¬)lBu’rS1±„™VÄ’é>6˜)£±?‘q¦1‰³Xª•¨ÄÒ˜àÂbR$qà+tHÒB‰¸„t£@®á 1ÄD¨‰–Jª©ªÒ£Ø£eM*-ÃLbB»X•S¬b› úÏ;¢·Hnrc˜•Œ’L[5T%D TŽ`JÃ*:Õ4£L2$Êb´¦ˆ5"dPÅåC’ä4R”DSÑTRÕYbP4“5¥MDœ¤DˆI1HUª‰1Q1¦$iABˆI( ÑJ\™[p¥‰÷ä™UQPiÈìH£„.»Ã¸âÙð0Ç1Sÿv§cX©9W6v)ª¸©6TMlb©J©J¥…ªNÇ…–É]<Ž-—~*Ñ;^²”@JÜÀ帄xš™óQaêr!¬+Ì4š9‚tÐ{ÎzÄÞd©“ î¹Iqçÿ&³qÚÅÍ\ÉÞ>eÎd™*Œ£š¶XŸñ:ŽÉ<´ài7b±¿—cd”y=¥ÂCÎ\¢G'CÀɃ¸’O!“¦…“F§bV¥Žw.+kG¾#(GeŽd4ð“RÄd“qÍ.‘œÀçóàs‚1qÂês-ápRX ‡8õÈ ”0üE$ t€œºž‡ Á cr ¸+ù{®Ø;Dr$“Ãm A¹a äŽ.&“øzÛq$NbˆÈÔ€à&¢ä!dôy1&HrÜŠ(äk‚ùâvho__ÎæÆƒè&2l#³Ž9.Qä¾â ’Ž$òL\åVâIF¦œÈ,\î»”v»ZÅГ‰d8ƒ¡Æ ˜$dŽÊæÚ5knoƒÆæèîOåGçÏ•"{øûûä[ïunüœö±ê"ˆªV:|‚ ë¼rú|ñÅâŠ'›m 5?µ¢©SY8L,œWnÃà>Š}O}œ0å¤û.Æ?!úFç'Ú~vÇ:1†˜aOÈûnµUa`¨nÃeWÜi?*lг`‚L«ÓíØ ~ѹÌÙ¥;UÔ§ù¸4ŠiF•¥M›0˜î44aMÚVBq6~V©t”bàáMˆèŒB#‚@RM(^R2b2̆Û7ñ9”Þ'#åp!ˆ˜±[œ ‹¸íWcµëLpHÅ}¡QUUJŠÃGßVÏIì*iìy["sëÉ•×O7vÝߟcµ× P䩈x˜“Ƈ…œÙëp¤]$ÄêamÆbÒlÂsBpa¦àé ÷øûm«TŽ+$w TNtîÛr½VpEAÚKŸÂŽy`6¸I¾U 2+Í“ÔJÂLaÒéÝ!ëC¤75Pá¼:5Õ~—Lxʉãã¨t¢8ÙÍÔ~ÁÚÚ6X“«‹*|VÞ«à²GU‰ÂÏ*#ÚYZ¤ýOõØ*ÎÇöY%©íT‡UDôX?mNo{©¥øŸGÂÆ›Z×1¥f©}Í2Mpf*iba*càdƌIJb¢¦dqÅVD˜Ãàc7Æ7SYëTw¾!åCéw6}c`áïXœlîprb¸½ìoÉ)öŸÌçêXÝ“X¼[1ýÈ8¤½j¹'Šè.• 5lB)¤0ÔX’¸’i» µ¦ìGÊIªƒ*O‡­= .剰¢tJÛ"{R8â›Ch…KÅY –œYÍ)8öBÁ©Ï漘}Â’éTH·ëÏÂJ8€Ìh‰ªY!пS4yÀˆÅ°ÊJl¼Ü=éB$ ˜'# ‚œŒ|%MsÒðl~éÖ¥8ž\pÏ‹ñ7{Êû›Ÿ5|¿V8ñ ¢M¡¼ãÃ.‰(¯S AM¢¨â  ¶$†3tpRx¸“¹UUÿ׳ævJØî'sÚûÍÏúu­«_Ôæu‚‡2¤ù¥¡†ÛlL;û %¬‘x.Ê(ô¶>ŒÇ‘ͽ}w 7ÝVàF(~ prmGœÉÛŒ] MC—ƒI ˆ"²l\ÀäþÎc^Pç,k .Y)LxLŒ åbeIQ5ë%ªÅ“f¬œ8&'x8PÄ8œ*ˆ%­û$1v÷ùÅ÷âí Gƒå|ÿ)øÝ“›†3Ðí|'¡RAwB¼„«Ãœp½ê1Ü8„›ßPy=Bc%éå1æÜN=÷š=¹æ‡àV-ýØjsô!€d3c"4;Kü¹ÏmQÈPñdy+ÆyºÓ°âíSƒµ»·c­[ ¢;lUŽ£– —!¬wŸt›|FÜÓ)_¥¯Ù}î¤Ñ\úÞŒnsñ•¹£½èf92mÞ¹Bóžxïòîúèo“´ì@ð\D',܉¢H‡,_2(vî=—hcÄEG$W(΂Y “ÈWCÝĹ'wœq.†n&KXŽ-¡#Õ¿®ˆTBùâf,Pãòú缓êu^ñ¡œ×n¸î8¸lh´îò.Q¸8²XqÖÐÑD9BêAH·¯q¤žp ƒàw¹Ma0çé<:ã§Cáº6¢:¶ƒbGfžD–.!ÂÀ{,ái †0"I 6†¬XùÝ®n®ŠÈÙ8ïØ¬w–<7N¡ï<ÂåÍ€ârà·àQnº>¡Cœ@ÜÜs‰Í†õ!»Ä6åâdH4C÷"æ…‡k¹ð—!,ÄC)ññ ®Én×B³UvúúÔ†§!9XmÍ!„ˆƒ!é.xúNã¦4,çyòou§GNŠêwǪ8Giâ9Íš Ð&šÙ¹aËdžä>Q\ P7âàäèx`ó¯×ÜóG±g·8ÅÜrFÔqGB qÎgqb.tÏ™²QÍXB4/$t÷ˆ8rj¸ö¿–5oQÄÞ=ý'0©Çú›¥ã’Šl&oiŽ•Ípì?ÔJz‹­V¥ZX§ÂâÖÇEt›+ƒjõ&­RJTI‰’ R0H‘F" ‰l¹|ˆ"-á$Èú#lš¬–I’@›@Œ–ÍNí0dÁ·A C_:sÁ-sÈ`ð³“G05—NBPá§]$ mÖõs8ÕªfòJߊò*ÈÜ"Cw$°s–éGiC¾ñÊì{Xrà…tS¶ ŽAè\£i'7.r±™Ü%Èg àID 7Ì¢V$áTÖJ ¢CŸV‚›8ÊPI·Fƒ¡»Mä©/""WCî;Fñî&°"äHøÁZ§V~ä–§¿xøEnâæÑ§´®×YÇ’¼™Šô)ƒ&´5ÄVyÌŽcëð=ƒr2m©ÀvÞØƒº+2ƒ>ŠRÀ%’ ·rÚ– •a0 ,Ž Ù $ö &K<ÈÀÊZ°Ô‹Y$] J¤e€Æ1„$bÍvä#ËŒÆ2 _¸L@ †}q’e$òƒ‰±fEtl­ì ˆ3ná‚Æ´lŸ ˜ß[¶;fkè2hQò•k @Ü”‹•«‰@P! ArX…B7åGƒÞD¯©Á‡74ï㾪ª»ÕÕXUR¥*«94Ò©©X¦êÃèÃ|Ž"´{”T.— “cA6ÃPæâÄzDr >C§ÔZáÂáɃ¢ãžæÛ“q“¹£´ëÖZU¯Zž(:‹Î%wzÆâpÀh»Â§¯%‰2Ö.ž}÷øòJô8xäXXg I¢oLèCF†$"¼Ò”•’ð·Š…$ÙDÄ®1«öÚ2"ÀÅé"Ð"s‚¡{N%aJL%z)äïšg¶â¹nìÖ{hiî=íúœCOk±”ÄCöö£‡˜·h´ƒÕÌÔ°‹6RF§©;»\ Žô¹|YÓ{„5Óˆíà|–Ô¹âd°Œ­HÙÃk&LÇÓ´;žÒhuܼ›^gí¾[<<á= !*UIë{þ|{ÃǦ1êÆ$ôª>½Iñyø¬ž—'’z[᦮q6s´±a_$ˆ¢¡¼¡hh#ĸŽó"€q &§°†Ì¹cQÈ»ÍLT h,´9·iÒyã¨øØnss;žNN§õ8'kw'kv›•XSfZ;ŽMFꮦ2`%yBæ…‰,Ü‹8–63cãåC‰9¡¹“bA¶Àp@æH$ À‚MB2X£‰|3ê„кƸsR‹£s"GDõ`*4(€q sØqÔ$&ç˜êDñ£ ççäÔ€ÐXAnI§Õ;vÍH,I "Éæ~Uý4i{›§ÇªáÍÌ‘´ñå¬!lž{æ #áÚªû=É Ç•b÷#’óíDhRžÇ>2G ܬd£‰‚áVmí ÅýyM0Ù¶Ó<¤ccåh|$ÅrpSD8©Iíb¼F w3Ã5!,‰A¨‚ÍcÑ¡‚Ò rº’¶5c‰8¤â*Š— gv:=KÔÖ‚4AsÈJ‰&áÓC\—ÄšÈ×0¹é:¡î:/Hã9"$¹ÈZdæQäÁbåÇÒHJ¼’}âKΆ7 ¹ñØ"ôð±Ë ©aÛ¡ä(±#›šœp:®çuuÍÎd’Û¾^@ä!ºü%´(<½h±I~ÑbñTtEð) PÈ(Ã Ъ›¤ûE*¡æ4žµ'GÐ-–Ioƒ!*8\ •È6N&ß/…r‹)±’`ö[Áb|ö$1˜óò9ýO#µaœ¸ƒÐ¶%ÝEŽùŒr¾ow=¸¾wpúëûìÄ’4²DØ 0ˆ`–ˆˆ!†%V¨)dJ–E"•(ªÁñxeÏó.5û¬åñ¾¿Ù{œ“˜ÜÆAÐWB¦*¥FÊlÝÜæi¤ìw~.N3ãªô²9¥î'Q“a“Üøê?‰>cI†>f4ª@8ÍÈAss¡¯Éôù» I(G¸úN¥†±Cž×©»nu+ƒ“÷Njâ¬W×ph®%6«&&Ž79‡ÆC4 d(Áï‰7ê&ó„•cUJkT¶i/½ŽŒx;˜â#Ïåâ\ù¤äAr‰4 †,ôkÄBa€H Igß=æ‘Þû/5Ó>Œw|®M&«àËÃa†QFŒë<‚*aãŽîf ‰˜€¡„yéò¦|$“çóh2#èAjv¢ÐÖ.éGð¼ä—QÇçÿëÿkíúp¦@ÿ½îÎ3ê~Ç}ìw¿KßîéSŠQœÿÚŸ¹âŸé­[‹þçXÿÎ:š–qÑri¼>ãB uc±vŠ¿½%|º¿â“û(³_GºšxRCTÑÿTÖø#j~óœ~Q¨çÐHÁW¿ÝÓõ3ªI¬“ºª©¶1˜~€Sõ˜ýƘÐû/¬~ÒøKk÷^G&··«ÅóëOŽ{ÞöQ’Ì\HÄ2*®‰ÄÚñ¶¸RÐ Gt¤tÀÂDhT®ŽTUAi§ù\Zýé„Ì+” gŠW+ˆÃ‡‡¾#°=á»OAcÐQÛ¼V®¼æšÌ “m,X (îW&ïÞlpsàJn® £éI òDväÈ% SÓW#¼AÓÒ13!Š %Ç™ 9ؿȱa£s¡¡aÇ;Ç/ àdD[T’ tÆ¿gƒnIkŒï°¤ÉΟ®Ë²W†`Àо`Ãd“K†’æÂ!vÁ¸U³§Ö’7€„Æ×eÇ•Øùýc ™€ýØŽªOà©>§CJ%T‹Ì~gûÈáºp¨•B¥JÔáƒRV¡€T¿?F!¡\0œ€, …ˆKâÑ©Ý ºQܦÒ%%9„…fb™ c²xt# QecêlèiJÅ+øš*1†“ûl¯qØþË’ª«ÈÓJèÆ+ž1UUUUUUUUJp1Ь>4ÓªªÁŒUUUUUUUUUUUUcfšUUió«E„)JQ„!DO$¥6""$!B†)DDDDDDDDJR””¢"%)DDDDJRˆˆˆˆªª±1Šªª¬cUUUT¥(Rˆˆ”¥UUUUUaŒUUUUUR"""""R”DDDDDDD¥(ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰JQ”¢UVÅUV1Šª¬ccUXcXcUXÆ1ŒUUUb1Šªªª¬cXÃA!D„ÄDD@D„Æ*±ŒbcUUUUUX˜ÅUV1Šªªªªª®ÇEIBPØQHB„D„„!X‚GƆ (g(¸äœºÁ/ôüŸæ/w5º×SN–ÄàÆâêYÔ•JÅŸ#£:HøO桽‘¯êðcÙ²Töf¼IÆ´nnu›#îš4š)ÅIh¡ÎI/l þÕ;¥ESALq=ÄŠæo[Š;ý/¦ÐÊ‹H|ˆš™‡–#EߎÖXˆQ<€ô$,‹6˜Ž›æËM¼ñw¨Ŷä¨òYìrMż‰Ï’¼74«ÒÕ2»¸à|}Zêêãå§÷w”ø@â hÌÿk“z8(þ_êx£‰ùübЊͣÉj;íMÔ“ê6u9pÞ_ºƒ‚4“«dÓé·L5¬ÏÚ½*n|.lI¤äÃ,쮊œ˜b¿V¹•=ÿÉ}ÏVÞyéþg'e…Ùn5(Àª;Ï)šø+þª¾Íÿ”xõÆã&åŽïÝNåRÙc®Œ•ýŠÉk²§4ö*rŸÍ˜óõüðwï X7ï2ÍHˆï»KDÂÝd ¸†ÿÎM8.:úĺJ^W‹»áFcˆÞFᾕ(V@»]ìâ†DŠçì˜5 #ƒ¢’ ºü®…¦Þ§mT'K¿¡*”£y;)ýZ+ —jKG²ýŸôÕj¼¡a¿Ý™×çÕœ]µ<«úVvX|iÏÄùÒ“VÎèhLųýç%¯j·öíŽ'[)ÿ ±ì¸Y;» ¡ tQMÏ­”EŒrè YC#’jŒò–i ›Ò€;A‰dZîƒx{€ôÊÆ ®s}2qÇ·!z?+÷púùœ\ÞsÞ4<ÉäŽLV‘8?Aä¯ š=Žçû£ï;‰Ñöœ_Äl?mO'° ç…Ò#ꆩt¾)pìABÁ@áF)lª /bè<H! á€óÏ a þ ‰çTõ5Ì;õ:f°xbxÆyMA;‡T ¥–ÆwdC¢íDE-„¦¹¤¡ßœPí˦aÞš§ 9®·j>Gί¾úX›6V™êó4SƒƒrÕJ¥}bCI¤*›©ŠU0¥c ¥zë®[¦QÚüf6>C±þ7ÎyŽR›<œÞ ðN,;›?¤soÃÖÑT¥J§ÑÍî÷öqø0ø!ëcãn¬~³ÅÁþrŒqq4iý§GÒýçì{~ÅúÙñ'|¨©åRqpzðžò¿‰£ð¿qøû¯Ðc‚~uS‰†ÇÈíO3Ûø­m fàòQäczwõ¹Ù™ô®bÑš¸UîÝÆ"ŒRÀ縠"]Ý×¾p,Ib=eä÷ì¼Ý éN©œ™_4[„Þo[ï•®/õ§Ž ¹¬ç…ôœ«š¥£ë¿ l§hB—ã^°ò¬=µ¢bªº È Çùš¬KEGŒ[+ˆ0)r¸ªH©pì0Ž#ßÅøÁu•òª§qí eeek;!¶å.\;Ë@‹…Ìèr.`±ï˜0t ƒr‡.p6$ˆÈçÖ55!ó8;š1O}ŽNÇk­Á±TÅcç£nN*Ö½NŽãr:%<9:š0óôÙÞÕnâìßÓ½Øðu;[œÏ'S#nmÅ+›ÔÆÕ¹[§:Jfï‰ÜÙ³Òq4ÙUɰY¼WµöâÙ±AX ä:âHI¥i<(nâM{Þú”Ü.å–x“²ûÝï-»ëÇo™âØ½Ì Üâs¥¤æŽ ´ô>ú¾øŸOó>ê|ªì0e1p©U+Ŷ‰^¯¿¤Ód݉$$ÌV S).•LV­Ç[F˜þš)„Upa‡;ÄGÅB ˜’bÉñ`M?X¬p1¢Æ‘_C -I??çÓHý‡µê{s¹¦³š{•½i¶ÌnÆÝkãöù8º 1æcBíT<Ì+ƒ‡„ ñÀ¢h8¡Åã_ÁEëÐû2äÓ/`wp%„:$A$yÏõ~1À!fï#‹äÙ*:êÒ·LiSbŠ 0("Ž@öþ\Úçµ?ÝÚëÈL<¤ô© (¡º•ÕŒ*´b©RŠ¥cgðc‹v7cþš›/ö·ÓžÈù×J¶;``,BžÛÞ5¢ÿ&7¡ì*2…}¬ú¦QGˆˆˆŒˆÀyäîѱ¥xã÷·îv§”¦Ll’Ÿ˜Y°Í»Èý¿ËübCo1êÁ¾ƒó [rûšÅ»í¤Ø´Ö©Þ3r#ÁÓ÷¶¯ùÊž–•6‰ù†|¢Ø ¢Èã²9%’éû¡K°ˆ˜Œ€a+é“AÿurÆá(÷ (kö‡:j`Á¡ùD„p(ü'êÃ7?LÍ„`GìŠZ=ï3:i2ù%—¥Alyß‹VK× àyâ‰j ÄäukV±^˜b¬Ë]Ûn¨„•YâZç:ëVëþôþaø~׃õÙÞ y8ãr±é+ʪ­içGï(ÅIº§œºBU$8£ˆA ðå‡$œÌ#T$ ÚÒæ™Ž«ùØŽ¶C¦DUÎŒAÀvÁ¯Î¶ˆ×8*šV$9¥RгŠeX*+ò¾ êž™˜ CŒE»õðjÙÁFu$fX ¥B‚‘æÀB8)èÃÕ{nÎ×ûŒÇE£W½FWð¾(žD¼m*·z ÕºÏ¯=Üx?õo÷ÛãØ¿ZÝÙîÚš=H¡®hÕ¯&N/— âžs1þ½ˆR‰ˆÝFMÚ¤d¹ytåÀOÏ¢§˜ÇK‡ÅÍlvfÜR¾¨0ŠŠŠUIöÕX”¤Týæ?Ó¨i1²l¥°ÇÔp~j'¾ã}§è¸Ã‹vï\•4¢ný6ÿçõ98±ÉCàûßçê‡Ü=ù2=× ,Isº? Ô«þN®±ãm ÛMLÆ9ÌØMÒÅö>j/q}ÓÈOF£¤G¤‚V9×Ï õ‹Ì+“òGžÑ€ä‹ŠW¢¨%ÛDAÄA\€°oÜmdbHB©Ä$ ¤¬B`%=b“I)¾:‹) ·Ï-”_²AT¨JWy)è# 4“CÂãñÉŠ6Üs‰È°ç8ƒ)°û|8ÿRü%ŒdmË—(“ú(×ò(XÐ.!²Aé=›4 —*?çøµï[CÅΔiÚ#r„QÔÔ²;N¦‡@ÓÄÔοwsäÉ‚Ç#ȹ’MŽÓc'Ç<È8Ÿún+.ÃÞ<5›­Ã|Û,Háa«´ƒ'2 b¸¥â¡Q01tªgõí#ä—‹äþg6ïåüdŸ"£ð¤XU‘KQøÆ1,%Y>ù÷ÊúJëiøZx6i§Ö)có ƒÜd‘’OÆ\rK–Â$!;„}c$Q&0h`‚¾hd£&†§´¹¡bÆI2d±&¥ °hIsc¦¦¥njjhd£&L™,dÉ’ ÌXÉq͇47ÐEÍH62Q’ˆ ±QQ4R›)²›bhM‰Á³¸Ñ̆„¦¤8—(â`ØB`Á¡8×6.ldíu86v;œÓ±U\UØâ¬Ucäíc±Ši\Óý#äž/a?¾¤ÄI#öK!îTž¯\Y+èaЬa1³&32ù¬™_…³õ)Á»v›ÕÍ%+Cl¢#²)D4%(ˆ‰H\¿ÇÀÛQÔ³…‘”ö¯RG[Õî¾k—?á3Ü‚¦ÑçÊù¹˜¤—óÃYCm§€„³‘¹è ‡”^Bl&)Cºý2^I °\'”üˆ4toÜ>ÓÃù–µöZd‘'¡dAÃé"v¬6¤’u÷á#uPR‡Îl~ƒGÜTc“²ýe^Ýv'ëŸ ¾aé•#ÔQút$ã*IÁÔÒ«CPÜ¿€ü2$¨I?AQº£»¨iŲl§¾Wjšra4~,<ˆ×“š;ð«ñJ‡YQÞÅšTu´Ù6þ7h”˜d&æèqÝ-¶×^èÜ¡[¥qs}Û©ŠÄ•ˆÃ°äìÞ2Ûjlw9¿!‚¹$¸ëv¦ÎF!ÒJŽ)N,MôŽ3-¶Ú©ÉҮǠ¥T¤æ›7bª©(ÞN×:ØàI!ÂË MØŠêLLyÌM§S“ŒK8˜›Br'%60—rœTÀɤš9íV•R«Q7J©))]Šb*§'ŸÉ"Naĺ¬4*Ÿ¢Ç$ŸS¬Ó¢8i);4ë!úskp±ÜÙØœ9Œæ¦¤ !˜ÀnHÛ1a²Q`kÜÈ‹ºo©$1ç4×±p‰æ&E](Ȗ̲[2œßôfé…!Œ#DBr虂¡)¤\# éA`°aÐâ@NçQz~Ø´™õûÑ¢­¡ržâ;šs}÷¾ÏÏ™OKY²2W±l»Ÿ¨cƒ©Ý?#ü®qð$›1¹÷"¤œSNçÅôOØ®Ië=ó^§ác±ç~Gø/Êë}ÖªUIU©\×IâÄ˜Ó RÊ¥•Úë~´HùÂüŽó;ƒp¯‘ð7GÆÝÊ¥PSÔÉBy”aQ Ó‹ E"T=‚ä“´aʼn477.zL= ã#ÐIÐâêrníMë¿á‡éx5Áò&lÄhŸË‹ à»;ßµ¹>écHÅ67UUU;]ï'­ûßÔøº¾ÇpÉÞÂuìz­­$µ-Dáêv;ŽN.÷ò=iä®§«êœù·yÞw¤äVæUoR²©âÙZàQõšØ°Ù²uĦ4ÂÉ>g§ƒjŠóIáU†FIs©ÖÝÔVšo' Ž{´˜ü˜–Tb¥Sú)}â)vcÍt&ÆI»n}=n¶ž¥c‹ãíi§É"rCswµ4ª­(ª…S½â÷œž¶>V1óº=÷Ì<)níïÛ€ƒhˆÄN1eL Šâ ˆ¶Œ! %áÐEަ£ÅŒ9±”Ac°í,Ç7ƒ™ì;ÖÛæW=‡°Žg¾Ówb·Gt @Fœ’Š8†Ð1ÓRÄ53Iª@`,™B¡`ªSxD„â€Qrrrs¹Ø*•Jõ1³Å³ÏŸÖo 0Œ6 MJ<Æ£.X±ƒc¼\8nguÉ:Žt5,@^'œ¤¢º®ªmN)d¤°W.ß¾0Å @QCÐpy+©&˜­= 6u7O1ÍòõÍÍNÓ¼¹\Ë Ù “¼ Øs&æ…84àâ¯3¸ÝØÁìA¤â£š§kf‰$’2QÛ©©‚ŒÜ£$ds¡ÔÒ 79äì/D—! Ôf€»BNàâ.HÞ@±'Q£ˆât âdqÊ ƒÊ0s5f(L.lHâ;ØØ±“'¬à„†Ðàd“›˜0AsØs©í ”$ŒY$Ù^¦,¥Y[=ŽŽŽ'*°§cÁXïlŒQÔ¨˜ÆN§S¨ÔÅÜâj8ŽaÐæQFìN8&„$‚êeÁzÀàðµMP·.hjI¨p48™èh$îï77{ëÃ]ƼÏu*¼cÁ¦èœ–‘gs±‰3 錒u9þ ¸x+“Dt$Ë›ˆ|§OäÃHW›s²çqÚØnÓÉÉÜèÝVZªÓÑZª×ƒÅÔ¯îסÐó9µ‰2ÈŠÅ;Œ†‡Œ—(¹råË(¢Š4Ô¦, Á°òd°!iè|•ùkÛ,yÔæñs’OC›fï{NÇ‚KX’Š4âQÌ’ÆÔ’Ç ‚5`ä›EëîsmÎ¥„rå9œŽÞƒÄõ·ÚÙQ[]GYâ®sfÌ•ÑÜàì7N.Ç™ŽJy)ÔÝ»HÙ\ޣŲh©ÑɨN¶ÈÍ–jÈœÖrY–iÅ85\œšn…T#´èñv? ©Å:*NŒa7Ú`x±»Ìc‚ª¸:Útcfìa^sƒƒ®'ìnó׆b2É„æ˜Ç e©T~³Î\íÐå4b’°Ä°›ò)Îà8²T„))Î÷8³¥Ï!2BJùÖAQ)6:, 2 v ‚@,4`¨H4?7âë ÒT%"I·8iÄ1™ `ˆdÝŒ½qUFlë1FÁ®9î;-†û£ÊÔDØ ÃÓú%Éßp°XÀþ±‘¶4 o”ArµÉ—“S&åQE‹–83fÏ“[ö.>5<^DÒ¶áäùÚy?ÞßÏåß×qâ;굫 L!Ú3¹‰Ïw+ßq1*œŠMŠŸa h¨n¥71‰Góžž“[€¤æS¨…TtsÂr;6Ó³]üØ1õO|ØØjÆ9LÄÌ÷ù¿`ò˜03v½ÂI‚M|1pï;.û=kÈ‘œºDañwÀø´¶Dàj‚â™À‘È¡vˉ:“ )ÃXs—|,½áVaìô¬ö "ï™ÁÆÍÕ&FSD×'fÉ’)Ê6H¹bõPã³–Læ/D)¢„ C<«¢u ½ªÌÁˆÐ§§ƒ›¥5š#¹N¬S ¦`鬚®cV#jØèìl‘pÖU5î{[>Ú½ÈàaÏ;jÛ®¾íö߇92e·,!'4Ñçe-Ä"!Ó–r pŒâv_tΔNîóI‡wÕÝ"z<³!Vµ1‘Þ…ÂÖÉv¹y=ɪw$«aAO–qÎFoBÝ%1 ºbç"“4ÝÈMt–« Î"´“%\>BZ1¨ˆ…ˆfKª\º©&9ëX´Uïm¬=ŽOPžÏ¢ÐÌÏ)†HH/E˜µ¯¤Ãáè¶„A‰|3ÈZ!v69ÙÊPk=2ûêmUÄ.—›ß{´4Ô^mA½'NYŒ‘@(ÁT3c‚;oq9ã£EMÀËß2*à•˜Õ¢" „ˆ‡uƒRαÂu‡‘gE ƒÐ":¦¬ ñ ¦òIdeâ÷ÅÕ‹KbÂÌÒ‰!+à©sU)Ú„Æ A¤ÈY®æÌEÐo Ê/O”R°€º€¾0…B¢^(Q·§ÌÚw§ÌБ—vÒ‡c:9C‹J=~kckÞæ¶Ø¸$ÈBW!ŠÇ fGÜÈkІâˆË[‰¼ÖL5„Á m)$Ì¡ìÃm- ThŠÛq›ë¿àkêZNìöá¥ZŸÍ¿Ÿ†Ï¨¦§ù1®Xœl‰”ZýjàÁïL ¤ò¤¤³iÑ)‘Ja95@'}¡ /©­˜w>± ”vœ_?Æ:‡*ùÜx(÷Š)ƒ}ÇŠZa9ۯМ€æ¨ox"$‘¤Ž2(ã„•KðÊæs°l>‡_@¾7‹^_ß3ÞóòÇÚJðñ´Ä1Ï£™Ýò›öæúóçæô…—Þ9óÛ{Trå';Aš~vi¸Z7S´‹råX‹WõŽ”ffñâàÑPQsš$Dg¨W¨)Ï6 ÂTÌ.ŒÅ5 ç0î¾3ŽËpøú‘Þ‹I ªlBÆs‹PÄ¤Ž°ÅŒ§ºäÔKGO›ÜÖ“ÐÕp¯­`zÇÈ»^Y¡¶­ý÷Þ,ÄÅçc!e$¨û×"Š+·§¦õÛÖ£’­Æ¹Tzܸ·kÞÜ£r¿Dße— ÇšÆüCLPQAõÞ$dJ¤B;B†¨FƈŒG:Ù‘“JG:¿Åún)ºû=oÀØûïŽõ7vÿèþeŠþú¥Q *ª ¨ÇoÒ8_ë\ø`˜Åëzþ{Èjù?~ðÊéWã:›ë4¬ðRŽ—þ\ÿ¢Ý)ŸâÅêKÞóÜü¢ÞNAžDÒé…‚ã”ýå*ã‘Ü)½E©%‡Å#1!ßqS%R ãEÉ ¬Ïþý¼)Ü—ô®LlÅPy›Ix£ S™¨ $0ÄLAA,"ÒÔDè€}Ä­¶{^BŸ}u™OÌ4;-)µÖ©©­3¨~9Ø|s¢H|I;¥¨#ÿ÷,q3êð §fb „QN)á…‘ÃÄNÐô‰ÒWNB¦Éæp~«IÖu+±ØÓúÎnL9C"ÆÂ$EÊ?ž9bÕ;I mCBÇ@¡å#Â!QJãÉ Ä€SÀî±ìø)yæš»Óûÿ…ÎÌ ôe­lòŽy–gŠkŒ}±xiOq½!4ŠÏK¦‹r´Çz±ÌÓäWShÇÂâ•ņÌN*øÚpiò4|î-Ú|íÁ²ŽŠšO™Í»wÒäÙ³Štce4“ÎÆš; è©NÌU;jüæÎÖØâ£e¥nìtÓ¢·ckµŽŠÙ¥;ZN*_¥Ø®ÔæÝ;Nnm;UT9+G§kGZ¶n¦š9º™Vcc±»ÁQ nhAbP‘À’G$âHXÁ©ÈÉp±s™Á#bªR"©· ç®ÍºÚœàoc±¥ð¢A,f!²f¢å; õ&h0ªÚèÛoá0<Éôèù Ò‰+QIh¥RçºKtYVdD1J0”˜âd‡ÏÖµ3 T¥e,Æ)”µU_ ªÒ÷-XÒéëqi[*Ú’bŠQ J'×3'%U`-T¥*”H‰iK 4&b Š ŠÄ&8ª.*±"‘Eމ£(éÆŒ(–&4RA^ àÇwάJ§êª7sÍŠ\C$ADµ4IÄJ¬TU*UT­˜ÅR”¥)ER•UUEJUý§öZl®Æ+ûŸÜ]8«dàþÛfX­›œZcf+“­1ÉÁ‰ÁbjÝÓw2ª°pnVÍ4“f+“LSš˜Øâ©†äÇ{v•»r«g68 tqhà›šcŽ80ªc¼{›&1d‰=.ÉÜ÷žöõš‡œUæéÛΦÙkçøs[^qçSiØýo&#îþ_ $–Šü¸ýÍ»NÑÒéfŽ)ŸQAÊ%èò¹g‘Ñéùl3/IIó1åÆÂrI¦c¹=WäX\ʦRúxÚº‘åG馄Í3xeƉJ¤ŸžµgÙÖxGb‰ÆÐh,V÷9T®Ägâßw’Þe0RnÓµÃÝÂ!¹pìZÉ­Ìs“Ti6Œã—†ºŸ FÏ<ù.}¦Œ+ÊJ>³>78w*êšfÆ&3h¯Û¶©*9eeTqñ‡±[g¼}gÞ~,6¢½gÜyY[€€  ¢¨ªUJ¨W'ÝÑ¥EUSWúGÿ¡ØS0!>{çIJ‰ë zØkS}G¸‡ÆÁ­Ÿ“‰§í8èݲ¦Î˜F)4§ÍÃÃþ¦Ï¯ÍÕýßO.£n.¡‰E6M#ïÒp­ƒhßþÄ´qª –Ù+×ÐÀ¹?Ô{Ãv9l¸HÕ10–oÚáÛ³³þ¶÷7-%¤¼ØrÀǶò!b*j©w‹ª¤á[·9öqþÖ±ÂÖ£$–Ä©Yi€)€(ZŠ*ˆi—†`B,BËËgJÜaÓKèS¼n”ÛuEtŽ¡!ÄD!*¢ ©:]ïÚ¾®dßÀ…šG&éÏf•º°Ç“,nnnÆŒqx¿ sd¢·1þ\b•—ÛnÌôìߪá_ÁÚr"c$ÅLb±Ja”™;:s¦g–@är9”¢ ˆˆñ4lħ{FŽ 1T©R©†1iØh¢"g†¥¸îL'ÖàhÂ’7+‘XªÂ”˜ª­4Ò”ÓJÒ´©ŠÃ ŒTªS÷R´ÓÙL4Uc *0©ÇÙ„Í…"b&PÐô¦lììÕ4N V¶Ù§Únšcb«6~ëŠì;™PˆH%…… hl«V‚ªªUW‹MIRª¤@@P‘ Há A”QK0DD1Í44Î'!h¤§RÖQd!0ŽȤ‰UXĆ*ª•#J‰RŠ‚©J‰R¢UETH¨©$š*Ó&šcÞåti¬láÍ7:¢àK:H8¥#²uˆÈ¥SÆÎ›y]iº/ aúL"#"$ñ {SU1‰RUR¥`ñz×UÆüÏõ(‚îu…³;OL–&™ÏІq³ŽPŸÎŸÙÎrÎ#¥8nšL¯´ªðYÍn9Eu‡ª%>ÊÂD‘¢œ#wNñ$ ïk#˜Ä´–åaK³GÑkeÁ¬ê©JTõ£ÉxFï„[ú÷ÀrI`kc)iUÓÐt¥ÙZœb$G]#˜²ÇËSå‘ †yà„ìÄøg°iÑ„1*G“dÒhQ²‘Tªª‰D, AA $bDÅ'ª$ÃDJ!… ±"!DIÄD±ATªŠTª’¨ª*ªÅQDDT“C ª¢ªªUR¢ªUQV"­Ql[$КTV)§ðµK6~»v•J|†*ªª¨ªÚGØOÝI$æàà¥UtU1…Ušq4Ó­ŠUR¡U*”¥UURBªªª¨¥UUUU*•UUT¢UUUEUUUUQJªªUJ©Hˆˆb"$‰"!aUTª¤ª*’ªªBEUT•UQTªªªUER”UU%UQTªªU*•UUJª¨¥)RªR« ¬cececeb·+ CÒ˜*¨Š¡URUDª‰U MЖb¬R©B¦™$Å*”©U%*tnŒ4èÃ¥ F„•0!‰"‰H •R©Tª)E4x8:ϧðrÖÑR?xtqÆÐ¦¸†¢æƒŸ½ø4sQRî\®§òº«©±1EV•ÖŠ®¦0ô èÙÔNlnŽ+Ų:*ª™JDiVbT‘Ì÷!‡Xžÿsc))Œ·ÍÏØÓ±Ú+­#¯´ïtTé99¶~à •óŸqýÆœ);‡Y]e4îy;ï&ÌÝ]nŠóºqèèÃÉNÇGgRÎ2{XâîÊaŽMcµ\Øõ´Æ–a ‡«p5(±B“ú%†›œÇæÇ0¾l )))p3š¥,ÌŠB…-ÞîæšNø©à©TÒÄ®Œi¦D3Ö^1kÇÜêq@óVé§õ+©¿;t¬Q(š0ÑL¢)¢‘Jè10Ñ#ˆ‡rE2J˜R|ÆØ(BÐ…cIU4ÓM&*©*•UF*O9²¥U«Q\ùHà­*T­•ŠR¢ªŠ¢¶ÏB¦’hL"lìœ{»Y¤“Ú‘<Î1æN¥2Ç™'El¯zuNÉUI-·×ëô³=MPªER•DGd—†¦š š‚&‚    ¢%&¦Ô«$óö©Í9’*¢ª^ U‰aBv¸òpg….›¹©)„”Èmeú&*û †–³¶¦ãŒ8!Ä"AË ]Cé´Z˜sJrÉÔ"Ó˜z-eÑ]jHÄ“c F0+TŠC8™Ók#`Èá!‚$DïD,3ˆÜÀ× °u,9w°‚áÐg 8Ô&fÛ0@Æ·”8…hôf¦°Ç<‘º*Wh6Z—5ÁÔõÀä\Á:¾ZŸ- ðšÊ2LÅI1,ˆ$S$É32”ºˆ£q‹4’¬L1‚ 1.𴌨t:wd•v©s‡uCgTgQö‹VÖk9%/)EêÔóZ<"ôTÄy©*‰TCÕƒ]ƒYÇvkÊÊø’‹M ª–¨²‘•&Hr¶0`¸±™k8ú¦q¢ÉˆÈS2LW[œ8lm:X®Øa¤Ù’˜±`Õc0²EÒÃŽI©²p0äLIK&.¡mPИÑIvÅZ|K”U¬ª»++:H¢&ìÙÆ£…jaiqziµkª’E!LŠ3®cdÐ;Ä@bï9{(|º ²%BueH×f­ ¤ˆ#u,Ù]Ç#’¥³P×]ÞðdáãS޽òL“QrÆô÷j|44Y¥¡^b*… p#m0ÍŠ26ùx˜¨™¹‘§VÂ=áȵÉI)-i--NCí5(ÍÞóJ;E9iª‹N[›M;ÝuÏ|·n8ãnIw§A VÔ‚e0L“3)T“4¨JÄ2¨Rã¾°3Z œZ6÷ZÜ›ÓÉÔÚÛ³zÕ®iÚ „–¥ÎD8çÙwË–p\µÞ—d”§'íVÕÝ·W3œäÀÖ²7õ>dAÅ„iQÂŒPUdTWœÙÜÿmîâq'ÏÉÞÑúé’cO‹§Êö›¿Ìw:•Jø:ƒ Œ…ÞÛädMùhð\Ö=¹íÏT÷ATEó 3Ocv›ª1M×1™£ð?¾äþóÔûj¯ôUÁ¦ši¦9ýƒöTêþûšŠ©øß•†1ÖÑßnÂiŒNÕ1æ`üØNÇ¥Üðlv+d¶O1ò.8¸¸ºÜŽŽ¦›:šGð?g{““‚lÅz¢xô‘1P{ñNG%yR‡–ƒÔÓ'Æõ=Ïs£Þ|OC‹ÜÙêy~e|’ÒÕKÜcõñìlž.pÇ M'Ʀ6²*œ_a6JSXI„”QøQÉŠªÙ+d­&“Î'ñª¾_'¡âݺÕ°à·ø^穬>cJ¬zß‘ÖÄ{m=m›6hŠÇ&4Û6i\´4ùZ#dši€90`Á“³¨É›CSAŽŸ`460@ÜråIb‰67(?lØÉ‚ã¸F>’醾YX„Œq!žC4Á-ĘÊìƒ>8áïzÂá Ô.1™˜öìwŽcääv|‡¥6GœGµ&9µ&–ÚØøf¯ûoK­§QÛ=Ïk¹Øö6GFÒ<åL4÷Ým qކ‡ ÔÁA¨ˆ2QDråË’1$—.HXè7E.\‚ š¡€½8kˆÂ‰”8/èÁÂ9DÊëõ˜|Æ1!'˜Ã Sŧ‹Ìó¿[²ò1Èæ=c›È²`ÛLˆ‰ ðAÄ'`ˆc0™EÆQPydÍhªà­<ïûnù=oeªý©ë~›9Xˆc –â˜â¬i¤˜c ŒÜ”õ¹*¹¬øî]¯ͳIüòñNf&ÏØàÆ1U†1³gQÔê9´ŠCdOx0šÚ€p0L6éõ|µ[£=ãs‹ØªÓÚæà{¾—Åõd™_ ”lÆ“‚ið>7Êâö¾ê9ñó>7ƒÅÞèâùu'&Í1íc`ä­o3½þFîŽm±iãܳŒIUIŽŽ‰ó¬*Ám:ÜÝXÆš8=#Å„âââÑÒ'WÅ"ö· =úþyóòÚŒ=â{ôºÆ_©úøýû=T_€è^ÏÙwi+Ë*†AÆ`Ã…2Å3MëOÑ|‘ãÝ9y«O'ÔÑXÃÅcOˆœKÊ›ƒ¤šÂ©¶rÇ›f‹„'Q"ˆ‚"‚Æ/$,`±‚G(’Š(.\¹qº|*æÇ&4Ó4Ó+gZv&=üc1±÷šØÚ=GÞûÇ=Øa‰UP"QP¬l¢eFY²c0îñ Æ™ 8•„òF?í:žÇs±[»_CgíÚi¥lèñlÓí¾gƒéy>ó¢v89±¤•QÉ)ŽmÛ'[t˜©Í]>ªöœfïÍ’zß.íyÞ/\HÝާõ_«‘°`]Å‹Ôå îðù'hˆˆ«GS‹¹S¬§çy<ï¾’záÛV¾²IËð¥}¡úªÚ§Ä’ctœ¤„cvÜÖN5'Ã)-lQK ’ˆô¨)¹!tÒ.˜ ãpÀWÄe,†À¥aMR¸Å€`P£Û‰íÒlÇЛªd6ý´äÈâ²n¬Tr4R”¦b sS sà IÕ¿û570¥“LU| 'ÑÁÁº6JŠÝ<}~z•ëÒmçx«Ò{=.M#ípWÚ]—í6}†+ì§'ç'ÔÓ£ßi8*¥c£M+uG[LUUVÊ“ácCJÓ•_mSNN×ÊåÉei9:9&§×I޹ŒT)Sƒ#=,zÕØpnnæÝ+ƒ'æâü[ù˜zN_'çGµÁäòlªñcU¡»à+™ð¯U>J[ä,Ž = Ú§Óc‚q+‘ñíùàœÐÝÄt5'ê“‹ï¢áð˜ôK6õÜNK11Sè^lùþ œØC%Òn9r‰EƒýOG¼{„£Sñ?õ+«æ·l¦)»tªò^þ¬ýo¯ã‰©=°æâ÷“×£ÌØõ>䟰ù’~gÙÈô¶?XŸ°›&ÍÞZi¦°µ§êé0 wÍèÑ¢ýŸ„Tvl„7à(BL|†Œ›?ä¼áÔ÷âvÉøI߇Câ[ªFÆÆ<µ4S117žmÍ.Ì7b´Ó¸öRLY¸Ølhž´W–þsêE(lœÄôæÛC¦ÑDW#©àëç¯ê´ÅKŠè¹*–»2cç}ôý Øâtáû×-{ñ¢XíU;°«/#",£êI=¼iæIìŒøEàö;ƨcx©#ØÙ8M?_èR¥%YJ«àãù_ÄR¦c Tã=›2H¯\£¡š<æÆ"6òø½Z¶«Á†WZÎ?o7ãÈz:ãÂÝ@’—f†O:ã‘ `Ÿ—¯ñ6!Ü—Ç{ð1èÌ‘ÞN…av9ç¾ë÷'ÝrH€) … "@ T&)Hb!(¥¤JF€b¦‚£¹d‰´Qf9 RP4€[/4 ðO$ü¡Ù¬²{›ÇblœÎÜy$œ&ÿZh`¥<˜hà –Üi†—Ø9<Ì~Cæ2aÝÁ“Šìô§(”£s©ÔœSœú#q»eWG 2;1x?Yævj’lO2RH¨¨  +± 0ÀÁÄ00ªAD$C+TªIRTIT¥(R„BC ÄÀÄDDA•ETT©%*©’A8»Grfï¼ë&®RÄGi…D¥HU‰lKF%Mb|ÚLš…C¥9•§ë%ânlSXnfz ‡sóOóßòñýå2‰m¥µ’ÆÅòg›U¦Ã Q¥H¾—±¤bˆ}j²6 =º›¢¾Óý±ÙêL‘6>äð-‹oê4ë~ à~Á÷±’u'ë•éa‡QJWåJ•TT2B‘Ã?èk\1›£§vóæõþ=³êIï<œ´NN¢ša]£G*iRqRu&’¥M¶hÔ9Yð¤Ÿ!92r›{Èó¤“×6LIô¯Ðù$íúQ³àmKSà'´;«JñŠW™ëÈÒ«ïý‡Ù‘®£µ=2$èÝ­ƒ÷´ªÃ©Œ-pRT3%B°ø 28Û)ØÌ%~ƒ÷$xžOGÐëIÜì~gÒÙ ÇaPìpêY8ñÃ3ÀN"”âö[] Ïôš³(Âç\\ñÙ‡@cŽù4[*3™°¹æ›ç讚\IèSO,IíW(žGaÂû=ÿêVÆ c c Óg©Š°ïÓZªÇ"”TcX‹<¬›åÀÜ—‰ñ©ÅÅ» 3xi4œÙWëg*àS“tr0Ñ&/mÝ3©¶[FdHüa¾ùÞö‡ÆÐ5¶&ŠÖ™†*«Ì+}œ¨øv‘ú#‰E´á!öü‰#wTOñºùHœadì’ ó‡tìžàºNžw³e>R&ÒNÎÍÍHˆ‘DAb¢ Üñí²ñ>AÞ)J"b±=ndÁŠãÝìjO®è>«³½òé-MÛ9´ªÚ±§5ã¦%VìoÍŒJÙ¶°ir^ö'66s*bRžGÂü/Àû,iZiŒÆ4Ó V4Üó§Œ{ýޤLBŒØtÀöA6òGbQX”¬jÂûMÞ§*¡vÐ@e¾uoîcay)ræ›äàˆQGEȧÜÀÎÚ~û&V.‹`‡ >rB¶0q+ë¸jŸÕùÓ‰ñ#àø§&¦1 #4EDATQ5D“Ò 3¢¥NiR¦z¿o¹Z;ÔY=“ÛçlO¸iÙ4Nn ©²µ§îbI¦ÑŽšrL*žò6'ï œï¼Þm4ô·ðK$íR–*‹S¥ˆuÝX•dV˜b“ÓIŠ›ª¨VɧÙtt|.©ú\F•Ôš¬j;­¨’} ØO‚¤ìu#}ÊX©ªYÁÅÂ>9"õ"¼œ–sþ>CµÎE| v#»¨Ó–J–Ôâ$9‘*EÓÞ{ºãSÌ¡ÚâÉ4Qüÿ&=ò •»Õœ{æç‘ÞË…e:Ÿ_0Ѝ%¥+$­1­1 1Hò*L“ÅRU%T«mdâ‘/ÏÌ*ÎjpŃө#­kjÊ«'šcªuUTŽfDž¥*Tõ:§ó»^>î¦órO‰b„a‹,Á %‚uédyŽÄˆy ¡†GjK!OGÓ˹©]ÌUu§Š¤òK<<›1™d÷騲Þ߈ïmëžñ¥É_&aÆçsI±è=cÏ#OH±åÜm¬^·S©½ÐÈÉd+ÆVS*ÕUrS´ógR6êiïÈøŠð>k­Z¥’¢Žë$Ç&*K>ÏÅCxª%cåL’I8r£çZ÷2ë5ð±òNÔÂzWsƒÎž’°ÚÛ¦ttݯ)I¤s±SžWë³Ò‘V̾Ì6­Î‹­›)°Þ´·„[U,ÅctU%ݱ‹×“lDbpWIÒÚÔ$r¬Ùσ b¥Uc(âøWR¢·ë”àq²¥úïKåGÂÉít<º6J©*= ý¤ëëI»ñ_›€GØž·ƒÛ+í}²ÎNõœVû“±eW¥cúÍÝÒtëݵl28ñyš‘íœñNìÇO ÊJGsˆv Ñ$idbf–4ª°Ø$³¬óÎ $‡l±Øfá„„™ÖÐ`ÝÃÀåtµ¡åÛD­¡ç<-»Ê‚Bé Q‘Ñ̬t›·];dCg£œU’¸«—ÚlØê=-îæÈŸ gyÛ#'›­¥ná4v÷»ä‘/ÆIɪé1äâuò'E1¡&$L²v'’eI}çwøþ­ý¾þ£¸\+Ñ©54–ÈøCè(ªTŠ¥*R…=íã³Å\L#V6cLJ˜æª7}uÛšNeLE(ý¥U˜•9)6X+FHR¡ñêµ¹85³óOñ9¹¸pJîI‘2BØjèílÓy.Ù™Û$ín=ÆÊR¥V }éÜÝ!ÁbxT•'–"sÄslÅFö*±½ëÞÆ ÷¤ò˜$n#‹~è'$)d+A2†™­SR ™`§fWbL†ˆÜ†N”€¢’˜P¥Cv=æÉ©wtéî$+™º;$Ôy©«Î•ÉÉ$Ú–‰ÕœÚ’Ø“”s+ŠÈ„ñ=GÇk)ÈÓCÒ«IÊæÌ‚ÕÝÖ²ªËalzúÓñ|…y‘¿‰úMš;›ÌNjiQ‰x.l¡³þ†m‘F6r|¾vÓs¹ÁÞ†“Á¨àî&äãÀW‹‘ÀòOè0 )ÁÅå°ïß™M.dbIÊdÂjAu5$¦•IÆ$˜§ìu{Éï¥J¥ ª©J*‘Ä‘ @ÄDAØ”â±÷Þò¥1¯BdÜ›7*Û/Ñ J€‰XRZ(H!€aH…‰‘¤ "d  ai(¡¶üK#®Hv 4ïYÌ£îŸ4E„wíÖZ’œ¤æîi:ÑX®Os&Ë¥â+ÔÒ+&–©/$ÅØzÚåN-’¦aåíi½ˆÚ“(ªŒ³u渱£ã©S,KoD”ý%i† 0âi¥‡Å‹X7²U*°–r—¸œâãACmÁˆóÇÊ^ºíx¡¡Vs³L0Q=1ˆ¢p² X‹?¬Ã6c°ÔYXȘ¢nÆJ°ªµ+öæú;”Íå»c æCФO…àŽ ‡lžm ¢~DíuÊÚ¾c$¬a\ؘùk eU'NÅ”é4`m¶tÐâL$cÄ ŽÄÔ4"X‘ƒ5e%fÑ£52ª¶SML i+å$5d!æm 01…›å178–`"D% $&Ä Œi‹$"¶åÞh’º¡LîRADd`l%l6´¬•–™l\’¡J…„0J)7Žì%ꔤ,Üå\ ­˜ÒïnÓÉ*lV¥S”BPAʘ`£DÆ•ŒR·c› p°¦˜—*É©­4U:¡ew'KW¡gJ²qÖ!Ĩ%6‰…r˜›±R¿¡»[RpZ•V•ÒÁR‡GF79±’ÛŠ› C”…IiT”¤“‚L’A‚UJ¥*”ªUJª©*¤ª•J¨R¢ƒ %@Æ1‚‰fĤ¤°oéQå»"GXlò~Ž7S¶ y=ld7_HË×gD‡¢i¡™›`¦ôú Øâ’h"f*bÞ!`$!3 Éì=ŠL= ði EDˆ–m¯C“eXïxwèô9)¥ÅcЦ´Š›˜hÑFˆRÆÂR”"®RpXª93 U7FÒ¯ = “—bÇ©Ük DîIUÉÕdI+¦bu¨UU"*ÄB¨E)%TA*¡$0ñ DT¤2D¤=i·b/¼Hð4ø\Û÷Ð¥1Gt/‰¬*É©á>#iŠ‘m«P•K*F÷ ”Ýåæön¸Ó %’S+¦jm³‚l×Ç5NµbÃyOJY’:èG»£‘4•>ÏAÃjë3',^¤ei¤‰¡¢'`À4'¨›=·­§ET´j'„&ýªðG¤=>¤ÒÉUJ­H“f¢I‚*Có¤;Ò:3­™¹Ý}åõº“ÉZðªz+-‘Š’p1%SÅL'©ôÞKR“ªÉ•jß%:u†ç³né㺱àe{Uï#½;TZ¢ªU‘*XQJT¥*RªU%)**%TRÄUEIJUR’•ERY)UB•%Rª(¥(¥*EU%E¨©IJ‰U$©Uã6w¹±³ggG°ªjåw¢Š ¨€ómjÞç×+ årgÖðíÄp¸‹89ÂQ¡Üd©°„p¸bJps0[Ò¨bDi¤IZ]þ\б " fÅ âãšÑc8$ÉÁ’$ž°jj\/ª,¢ ²bYɱµCXΫܚÈqž˜iÁ%Þ‡3fÚ¤Uf¢N& —.Snn9"ÅÄ FD&ƒ2hMµ$Ê1v0L†8ëÆç"±Ãƒ<œÜ’²V"º‰4(¹”ç Ë2—âÌF¹0" ØÎîÛ zrqrˆD3 A Ü‚±Cj°†¸æè8Õ›–n ÓÊΊ@$3—0mÓ’dßAØq ¡ÂÁÀrÑ’è} 2"I#:bD:Ðr”£Q#‰%Ðl!®™µÀð6\­(ã«MÄpnÁ¦±‘õ ,}Ý«œîp°ŠÉ‘F5âq2`ã&¥Ç(A8ØVøa±±Mi×FKÉ[¥F°€,@õ´-G,8B™ÕÂØ¼ÜŠ.ÅÚ#ïbÈ —‹4„AsˆùkŽjK&u1ÂĆ5É ƒ ÑbåÍÍ3°+5'‘bÁÖp†3¢Ã›"á{››ävqîëv8&$ÇscqUw.Í4âcuiÔÓF+ Ú&ç~í’«kn´æiÇ]̘ ¹•±¤jªäÌÊ *Ĥ„A†œNÅliÄ­*°ÝZb MÍ Î'tˆÙÅ$­%YÔÑσ”ïh²©G}Äà 9’tKn@çêÇnmV4c{T2(¡y Iqæ#‡Å;÷NÓvL7Fã~2MÒbÑ„B;C‚Ø&¹T\°íC_Ê$ùŒÙ/ŸrFÑ Ù" 8šaÅÌ)x›éUsE3°Ü)9kqÝvxDÉ”€ˆrœ¢òkئªVD;¹($Bbñ E•ܲ›Á“Pâd ˜ …„Á³M›)££§³‹ƒ“NM(¦œ‰Ž¦ÂVÍš71ŠSI†•Ìâݦé+»L,jÊÉ-¥Œ³!ŠÂì᳋ƒweq0êtDïá9±©|õ¤›QÉ*ÂII#ƒB%"u»ØT˜MŒ  Hb*ÂL ðh` Ô¹t†ÉUJnG2‡ãqપª«¼ù'iá´Ùñ«8rîõ¿E`A¼Ú?AVŒíòqÀ>Tß´B'Ò)®äÏ,a†ɦ¤}íÖƒë ôÈOϧyÉë½êULöÀ˜ÚH–N§næaÜŸªôN9ƒ¬°J‘MD #,BEµE**”RªªŠU”IHÆqŠ=¶ÂÐú™Á+ÏJÖ³SN óX7›uÉU-6Q5j–ÅRžn;¶l6ùÓŸyÍ+ˆ¶=G?Y˜s[°£{ èÉ'±Î nÖ,;+Ñç 4#\7”¸ô"Î8Û›ŒX“¸s™ =€ÈAŽE椛³’IÀ§Ž\‡ ’9¶äᨖ°dÁÇJÛ-„XØÉa Òd’ÄŽÎ" òIHg/pƒrã†I±$–8Hˆ,gˆàæH%°åÏejo€à ³I‰LѤ{H]:q94®ÜoÇEäÇ)®nŒcâÚtå1‰&J‘Í+G&Œ:•JWz5éê0v9§ÔŸŸCoúÒx×Ob_”ÔÅd6’{šÚ{Õ|óûOtä;Ç$“ب´‘‰$²CÈøÄR¥1UTUUUbb´ÄЪ¥UJ­F’¥BJ*RÈAB¢¤Ð*) @BªPʰ*RŠªŠª¨¤ªªŠAB¡Ò… ”± #0 @K-P¨Â¥ˆ…¥¢ÕQi¢™†"1GHÄ«B„…(”% mÔºsœÐµÉ°–Û6L<ÖõðïlŸ»&cÔ²P‡„;˜|M"¨à¨ªñ_Q¨¶$æN²h¬+öŽõQJ•VKT¤áå5Þ5ðG[Hèîßé߬´µº“=¸ÕZX—Ó‰¥–*È*†mŒnÆ7+%U)dÒ”¡aîDÄ2ªÆì%IŒ‚ì9…W Ãs™@ÚH€"F$ˆ‚¦"¨ LÐŽ‰I²pChpA á¨<Î#ÜîOfÎ-u¯8c¨óô(;ÓBLŒ ]K<á”É è¹¬œUÉ[µôIºÉQ] Ý~æíÛ±æ‹ ËtÉÝ\¸çÍÅœc£¨Ù#y'˜›*NJlªÄèrJˆÈ–RU!ƒ&H”ÅqÃV¤–ƒqÅ¿¢ªÔ!‚…‘Y"é*l¥ÎC¼ ÜÓ­"&švHDÆ+ªc›‘JŸô;<‡Þ“¯ö\]ÆòD‘âTI&*“ÁRÝŒoÉ>ÉIxg‚pß]–WÇ^ð{ÓÐÝEB…RìžqÚäypéú҅ˤٓÀ"‹­Ràž8L¬Ã´LžiÑÊyªH¢TÓª7{Ÿ•ÆGP7”Áak!i¯ŸÆÁ`Pyª»¡bFÃò9XiDˆm¢Hc43…Nn")‹ƒK5 FG„\]ËèæG‚Íc“‚ »X¬$e3ˆ7Ð}q>)Ýà(Ô’ÄILØMsaÚØ,~ÂÖŸBG44hàŒ’Q‘%΃cc±Öœ·sN)Ù>5='­UêCÖÙ6/_y ‡ÅQ¤Ô>ɨ›H³·«g£«Zb¬¬ÅDñ*a,„C¯XÙàÄýƒ“zÙ½Ñé\QéÏ¡ò´âsQÑ8z÷˜°" ‡ lDò 1B²V[ƒ„AÞ)×<!‡°žC•à»-Öz„(igSÀÁÉÑ$å×}M'ã›Oº**V¾"Ï(šyߎ烣î:ÕîÛfYl9ÎOž1”“šò®8Y>Ûá|Ycwz–v¦ã•‰Má—Ä(„àDJ†"ª-|ŠˆbЇàœ'ÐùLØà•’Ed8J•Üêv]O}!î{,ªž·±q*¼Ÿ™‰1dŨa¬'2 A”ÂpUÀÛÑ$#.Ì$ÑJ¤44æL))Ì`°U‚•%H´‡ Ôä"‚¨£½xꢃºÜ€óðN²aÐOkóÕb'Îü%§_¤_•ëSoY:\tüì«¶÷ã´ÞÎ[=ë¶a¡ÀúYïCמšQz3 PQ”Tˆˆüb”H$H,4 ÖƒL I¢ÁÆIÀÔ75²ðQwI†ªD™´‘ª…±¿3Dçè²kB*ÁAE„5L0”UaE*‰V@¶E£,F~ÀÓh?1õñVD÷ŽÆâS‹q±ÞƒéB$@ÄD”‚D ELĈ@D !J$ŒJHŽx ªø@x¬É!Eœgk]$ïlææ©çy™jñÇzª´²LS+S‘ W L,>‡S‡5l›©Uyšs’Ly;æuò¿¢&Å–Xâ§:¥‰ .XÂ!ˆ”‹œ&ã°hŽ{Dû27nšˆÇð¹r›“›’1'jðKÍš‰ÝR©"Š$âÐÛÂ|j„”©B*¤‘UP(¨HT’…%"RI±ÛyÞ‡*Ƒ臞ý•ëËm¶Û¬8ú“±Þí{føôo5F ‰ r z ¯U/Ïðfn]ÜM¬ªª:§¨âAìK8ÙcRا,ðŸ‚lÆ`q®Åp(ƒÞ2V˜òãyZEÝN(5sSëîLjS‚jNö\uýÑ' }fLQ;Äï¼¼o“uRΛva±fÇAÃ2‘ߨ$I¢ ÑÀÜâ(O˜cEVÐÉ–ó°íru-•E1d`“B”… R‘,pŽˆ‘§  ê‰?Fº'iI´“©åp5#n&:ü•õ3½§í(i¦¾µU&¦™Y†ˆÈN(ØLT:Ñõ3”§ÉÅÉò¥…DSæXª`_y‡µÉÉ× Ø=KÖn°~Ô~£Ñð/²nˆcƒÔõªmŒ%¬k 5QNÇêùo3ɦžqÅØs¢©,3K²¶³¶Ià›ìîá•Hõ'ë8=n<$r±'à‘¢GR;{Ì2}§[°çð|f•'c´(za³âO‘¤ÓsÈè“otM¹;Æ:£²OÏ Ô4lý—3x±öÛ¡Ñ0ä’QJ˜«+æu2*éñ8±©Öbªn¦–4ÝínÚlݘ­(ËUZÉ‹*±FØÇ¹[©Jª•¦zVit¨Æ1ŠÅI½pqb™=[~»ê#Öž…M™˜Ç?JmÞx*ùÝv>AÞ3FI©WlŒd77ƒ¹w=iç‘~IYó3Ö§qYî TÖc ™\Lº¿Ž#w’tg‘ÔµV¤C$DˆR4D‰ÁJR‘BD©@%# IPDPÅIM,JPÅMU T0DJJM%¬„Z-BØ‹ã²Ë{ž™#w¡±çb:ÜÛ¹o¯Íg©L*q=/L<Ò9,é0Èñ²t¦4ó´š5 ”Œ\£”,…)DA¸|0Ç=¯B^+àö1âó<õgÜV*so#ßv=ùŽ´ç?÷R:œ¢´²nùM2YÖ÷üο=“µ×’6TÝTÐë{æ#h˜¥¦ Z²0Ó²{ˆñ±µtx$ç"¦ÔL‘$JâhHÔšMšîI¼®©R¥TU¤Š„óÈ=Púê<ééN !1æwÎ;$c RLÍÉ"j$ª˜ÁÔå&òS‘çÉ&6™&Ò¡…ÒÁœ²$›Òn²&ÊDî1qtÁE R(Ì‹ ›)¥<ËFöÄŽøY¦Ž$Þ88ÛG¶N£Ø¸£ ±‘‚ à)Ä[…,XdŽ"Jiú/•·}‘ðxÏ·²­¿{øôÕVfîoCß¡„ðÔE…6­Â:sàŠW9\tã‰965‰ôÜbwä8:¦FßC¾÷d€i—§ ­ F&ã~ý&Á¤2ZÙïcRZUNK’ŠPª‘œMh³W+‚›'%1Á[”L¤ÑBˆ°‹`½&Œ4R’…H"`v›Nµ0M¸ƒR’d˜EJ%JcZä°ÒìpÆ+‘‰ºb…SLbUU‰mµdª&9’z q•¥*ªr8uû\R'‰Ž0û2$=ŠúÎoÌÕf}ÁQÈJŠ„¿Vt_µ aÖÆ³~Áá!ÕÆ'sL+‹ÐëO—W$Ýçnp;âCÜyÎo;±‰‘’v*5f‘¤/Sm7iÑTÃmF›9îm±ðIªc䉽íI(i*L@ÈrH(ÃJâûÛi8£tÔË,ª«vXæÝyT¶1£jáÌ‹±ÿŸ;Í#™ÜÚEO "ú’ÕO¯…ðˆUŠ£¹HÊZ&E%T˜©…Ž8®“½"'Xóú¼°´ãñ8>7MäóÜêwx"´÷Û´ô#‚=¯kÞ$‰ï’DïuÎ>)á!×$µ-B<È ÷)ötHàv¹džwÒîóïæ6Dôq| ܪpà;£Ôúþ 88W™LcM˜ÃÌÖši†ª1Uqéù2,¶Í•UGxrø—û<º$ómîO‰‡¼ˆ¯“Õ1%çÈ; kFBŒÆ ÷Œ«šˆ+ó7:Û$†6pÃHàpþÂi'Ü1(­(Ê",ì>¶ ßv ¥yïsOžq¯P„Ü;ŠÓÐø¥ë’m$†þg‹Ô~..är’‡ztå»$çUVÔá3M4ÓÃcËš‰@YE&ŠŠk•hˆ“±US‹½ZN©dê‰&ä„é¸# ÖåŠÜ¸ìÝOPy1FÖ:¯x.3†V†„2‘ÚŠ1’ň°¾ÎÄêv~ztØç‘ÇnkB8¹”´pC$C™öƒ\"SFòŽ¥-®‰UºlÆìpMŒoÕ\[p˜úšÇ%ªG6œ5vä4n—§Ôˆº*à„‚À¦)¢ØC @$¬AT"ÅUHíÝ¢î„6º“e*ºidt^²•»ÀíŠW¹«!]ÔèäÇ{ÞEëM™¤Œ#†5§èía7‡»9"Ig5nãÆLÈlCÜ”ÂF…äœ#33Œä:Ol²^Ö0 _`|‚É4“ÅÚŽôv4¢®îbEÓA@PcÁÔ²ªë%«,Í䪈w¥øAñ†ÆñÍØ­1U…V2±’ȵj{°ö´Ùb *R±UqLZ±–ⱂ•† Y‰P+Z4Ó †œÆ5r[mf2UTÅ1aÃRFª0eŽIÜÉÿ˜òGsƒº%±c ï~É¿‘èNä<_’Bª"©UR'r£·ÃÔ½i× jþUn·ZŒ­px¾NéèôñJŽÖ\ÉìH!*0$Æ:-R…R¥ˆ}6*²iÕ›iídi¯e²(àiä‚$ÙÍY™ó¸™ì|‰ñ’8: I'¯µ“=ö5z,àìàtS • ¢“©Ò{ÔØd¥M*¥TÆK…Åòi‡,Œ} 0•9*pñ8¦Í’–*›7c*°²–q¦"!F‚0Z]†•³ví—fª-›6b*'uàß6Su²Ð¹’: Æ¢`ˆ¡‚‚E. †¨”`S)BZƵ£Š´KªèÆ*lÓ$ ‰ldÜfd°¢ BÃú,$ØŒ ;JCß.[La£s $Ei-ibªGÙfØJWäp›¶m-iÖŠÃXÅeLu‹$zéÉIÔ%7ɘ,0´…- Ä,T/ 'ŒŒ á‹„‡zÓb#„£tl˜LEˆÃHæÓe²1&$o‘¦«-L%C3%"a)ªÙâà©nžÕv§“eý¶=’lƒm!üÿ›§l®¦kµ¨N1õ|‚@Nøz§iâ“Ié)C¨Æ:r"a/tîÑ €é8Ô,JàšÂpkJÓR*6PÅIvj´Š¸¨c+!6W¶É¥8)%M8&2SERÄ8"¤,š1R–J\TbÈÙI¹VéšPÔ*U4cX²ÏɬšUE*/±L1M40•‹ÑÙÛ[¶;–•6Päã’pO´÷ô1ÉÅÃf™Ä‘´M¦Šú8DÜ™'‚'éõH…äð'$Ñ£ ”b¡Ñb*P²É2„Êb‘0ÌaaKT±T¤*T%’%ŒV Ñt0’ád„ŠA:;ñóÇ$YÓ©ÊIɲn8¶l©bÉ·ƒ$«WɲG+¹#Mâ5ÍÀ²O}?Èó›²2×E:ç™cìÓàiõŽ]çy¢y î‡]HsK4ž›® œê*‰²¦Êv0+É%u.ÆŒ|è)'À¨ø“Fµ›ž];[}¤îyzDœcƒÈ˜¯cƒ"l±0ÆFÅ•dJ²*´¬VH±˜Èo·¬Ô‹7u‹bå«"0’BYJm³2¤U=jbF,l¢ËlT«1Ce$¶-‘ÚDß`â”v½R6XeÒ‚!ƒ°qæ. •(aH$`t5²m"ÕRÁ&ÎÆIÖ °U"¤µDJŠD)E‰#ƒÂŽ “v§lÒlF•R…RCÁÜaÈœ˜X1ä•ÑÎR=÷’×ãüßÈýB~ªdYó÷œJ?}ޱ'«Ó‡„øÚE`¨#L(}ûÀ®à±IÈ&]xq ì<ÁZ»OéK•,œtÉ¡O«q÷ifÜùj$Z ›ž®Ø—¤a÷ZódTdßS²ìÍöz»z~5X¦û¨f±d›ðdM•÷X5}õ‡ë>Æ8VÖÔÅ:k¤ÙÔo2¤jœ”›©8¬n²˜!l $â7ÃIäGß#™sp ÃŒœ–w'pæ]Äæü&ßÑÑãÂ5:R2DCÚ!ÁpЧI‰ˆÜw xœ‰Þœ'',n# H®·Hž†Dú¢y”R•)*£ÅI‰R•T%\%Å9Ë#`²(`†hÃ=°s(= bHš"*ÕNèüêw÷•GTêìxI²¢OÕRWÙ6gsÆ#Á<$èõrãIQd‰ìÑÅÑOsÁÙæ{=Ü]ÊG¢}—ÙJ~ÃõúÌrƒÐÄï‚;ÞfGY8 “¨BáÔU ‡¼Wr‘D-ï²ÀÙJŠ•Z&¬&)òy)lKU\/M+ÔTôØiVE†£CJÌD ÅS¼“–F‘C;ǾƒBêW½$ÀéÃFÍHd‰l˜¢tÔïTTÃïŸf„ÙQ¼ïVsÙŠÕæãÄŸ;‘±Ò â”%Ò'î“]@P4­ËÉŒ:E“†ï¥Ø|Õѱ9¹§¥º v¦*~\<Jž[…‘gjµ¿ äÙ­l×{ JÙXÆESÜV´ÓXÆ –4­Š7¯à»/SvŠ]Ta1œ™;ŽCaJ©[ùcE6ÎÅq¼ª. š0 ™%¨ˆ* (ˆ0p9’Éâé ä¿+×ÒC¸}'_c›$•õ?e¸:“Ú8ÒGŸDád`AÏF•tø¸ëxg†oy¶:P{g=íTIÍ‹‚XIR ˜ê¬b¥e1&‚÷ÖG_i때LSõIÅfÐìm¦ôõçÝìù˜køMֶѤԙžÏ²Ûo ÿÄœ¬“e•PÙ‚á|˜U ¥²A˜Æa1 ³£±{’z¤zÔh~n·ÛëâuŸ—æ'.2yBØv:»&Ÿ¬³vXfò%™™Ž>#ûÝÍmMµâ¼écì9¸ìî[;iŠÒœ'ÀpØmÛ:¬•Õ’)M©á­›4ÅrlnÝ­÷þî[žû žýõQç½Ùt­Kˆk̺'ÅÚâ171„&mâÚ¸Ôâârˆò(RaË\k4¦ôÇC4 ›Ól7ʪúKéÙçðæM¤÷•µ‘÷žìb!›KZD{ÍnúãÞsùx¹X´bª¦”£C5ÕŸ™ô¤9ÃfЮ© À8 à¨3dY,”QUcª®‘õ+s ŠFDN+„Š„t 0¤M ÆeN4FXV˜ƒJV•‘bÉ1a•+(RLJ†bªÀ@a&ƒj"-[ª‘ÉÙ$iï¬#‘îx&‘úñd}£èlûKTîRáÜVzé„(ÔQ9ˆ†ë–Jh¶EU*‹Qˆ„@ÕQ38œ €Ó°t¬øº!чž‰ AQÑÓ`ˆ"ª”¥*MzÕ© ЍªïõC¹‚~;"wàzÎÓ¬œ}ÞîÙ×»Ö½êíIï•U2eWFIçÆH{*«† ÎG”€Lu-IÅ+s‰¤hii{e/F8)­<|Ï|’µB¼íæž;+ÔµRbC›Ú½ÝýÀø=”µu²äœ Äæ{B DA δ™Uω‰)ñ:³­º“Í·@ðfµ9¬Ç{2ÅWÙ¸µ¥ŒJUJiM7ަ´»ª,’ÑXó“…¸ÇiÒÉ$EHåƒCÒØ¦BÆ4Æ.(ÕJšÖš²f 5‘Åp”´Å`ª¢•Tµe6É¢´QEl¹XÍÚnSLb˜¨Æ–U}ôT›}†MÒªDT£|-ŒÙJ\L°bUdI1¥DÒ’i™Á¦žum§E4n6pŠj¨$XeH“UP%$ADÓUJÕMTS1-U%MS%TÊÑ„A1D9«%+L$1x±Š &¸M©-’[6hÁCM# 7m Ûr}œ†ô63Ë6}¤‰Oçp êx¥dB¬šoQ Oʤféä$4‘øY¶øóMç6ÜjîëʘBÝ.‘iÞÛyÆCà|Ít&ÖQcf¼Ç ÊŒP_B¹B“øÄŻ؜ œÞ:Ì)2£•52h­MÊSk&>e^;¸¬pN 1&ÓÉÁôw ·bxýïÐkwERžñ–-–F_ îWZiÓ­cGaL]ܲ›&Í06wç'5NC§¨µ$ø¥a 7L’x–NÝ ïZ/µ+¯7Nª-…Rª©iT‡5*Ù$¥•B"€ª@ *˜†d¢•(D‰)H•*©”ˆj Zi( Aˆ@¤]‡¤J˜B1 Dª”`dFu›Ž=øXn&ý¡XاX^u(ˆª±Px¦ d‰ÐÙ*ERªâÇ1~T’V!dónÄž¡ÆE4ªû Én¼ë/í« Öù7—‡©†ê—æàëuœ'“ßH¾ç9¹”‘*T¢¤’R"­Y*HP¨†Í¸9Ïl=‚M#e&DÝY˜|Œ±öÕuª+è9Ç.®Q^M'{­ÍU8ªHpRñ™Úi§lŸ;‰³uqœ\~#\ V’¡@v0C0c¢¥"$U‘‚;#‚*àE E‰/‰å$œéð´Òs’j’”ª%Ti4”žéSï:<èÚL‘QÞá4iôó {Ñô;‰Â'eÚÎÉ"6Çlz®;ÇW¸Fò)#†ò3ã} à›ú=„ÙŒT46†ˆÈÈT6ŠRBb* M‚ ]2UÅ¢b•CK¾) ¶$üÌ %’ ­äldoU‘R–£ ljC!¥aåè!͈”&‰6;_,-42¦Ž4¢M“¼›hô8„jæÂ§j/< ((E!Ë*K 2XøWÍÜæä—mËÑ¡÷ÉÙI²›3"ˆ0î hJwpl‚PÞp x5¶…2óˆE‹ŽH€q>¥ Ñ9-r.! 4ÃX..;MR ЙM8„Š$Ÿ«¹¤9CÁw Z ‘ÇFÒiQ90ˆ0Ѐ†1#@˜„Zm g0\£Ñ'’6! ¢>•Òª8:8îdMGÂX°×$ìÆ‘ËÁG–€\ND4/¡²-Ñ4ذdÐDÈA „S—±A‚ÜMŒ3EÇft%B>5Úƒy*ä9¬›"$³A¸&‚œ´L*0+YÖ C1vç[[9áµ2oŒq4sYU‹Ü÷PƒBŽ»;DŽŽÞÌO´Ú5{çÎ¥b9™r’Dr ¢Ø-\æi‘¤Øäj ŽH0`Ä1(.ÜÇ-š žÈ눔;Õ¬·. \HrŒ™$‘N¦¥ Ò­Å#¡\;…ñYp¼å –u #P€Õ!ЯfÚŽXäi|0S Ì0j9ËpxGMB想’hc8! ±¹:»AC–D ÛM,ÕÃX ív‚  Ü’i«3Ä(g½ËjI‚ÆäˆB¹ 6:‘D’HÎ B ((eªŒ¼›’@›6cL+ƒ¢U$µ$ ¨Øü<³dö;I³GZdô>Ø”lȇ9bkåùɠ἞ |.,7¹Ý¸å"Ie"‘ Œ¸@ª‰¡Éfž†Ã³†4šTžô‘øU*•aV%TJu;K#â³àFŒUš¨}wO9]::´NÉ©´ÄÚ›·#*Ù!6XňãõX×Çž¼•1;4Lø‡v¬Kl¶ÙøÕ•ȎǸÌaÜÓLyÇ8ÂUB1S+ÌËý:Ý…q›ÅIgcÐÙÁÁCnSuŽ'È'ƒ†íØí21çlt:Y#wlu²I‹UJ;ÔÚO°¦î·pàå†i*ÌlÛÌ· 1,C"™Ù#x×®${!˜êV “&C9†bŽÓAÃÈÈ5E3bm¸Ù³ÑКóQ>Üâå!#²dœºLXHGzlú[õ¿žÇ¢§<™ä“c+Ô‹êéÛÔ}ç_š«Ç}ž·8zÞvž¿Cx˜±R•lª•Šò+LS“xºB”›%EͪjBGÉÄ€77B—d7ˆmL53 æ‡ÝMÍm¬d]i–DвJ¡×ä‘è{_ é¹4›Ö8Æ÷y¢ÍG…uÙîA‡KÚ³csfœ©:QÄ£„qƒM:Ó”Öœ¬y¬pA²…T˜si9DÐâ傞 HãY8ÕRZÜ¡ežvÚiXÅvãN*þÀu‚Ö.Ys<ÓlAðµXWíù dT:Z›ê\±Ÿ0|A2j6š 9Ü 2\÷Ë—«˜ÉEÆ,Úè4³’hÊþÅ6#"ÅÚdBYIZ‡[4nÝ4VÄù)$„ÝA—¡•Œr’Æ¥F¢¸Ø“%¶‘î\³`zÔØÕ ­:Ô|©" MDÔXv99âÈêäåÁÏN ˜Ã::B«* F†ÒtÞ°nåÄÚ ‘¤U¬I’7A¡„l[ChЄ5®¸F cN ˜cp¤NŒu;RiÔÄÅ9WbÊì7sos4±€q’àFÚP‘B.&zgEŒ WJú‚Ô&,Œ™8Z,4°Ð‡Ræ°ÝÇ—=Ž-œÚ‡+ bË6&ÌiÑÎLtnÄÆZcƒs‹‹N!HhÂn$†Š&gD·#™.#YˆCB-…¤ðW"¢¹O£¥Ë;1Í]ºÜ该²¤Ó±®6U›I"n®×a©¡!ÎÈI¿·ÒJFä¢N&°,’JbRNrIDqv·ë—©LuiÞÝßÁÁ]‰¥˜³‚u&iÍgqÒuªqdÆÌA4¨lŠ*JPVF„3­¬Fµ‰4Sa61m1‹„<oeÓJìK•JJjdÅUÞY 8†œCjH:ÍMLö{Y’k«—5$”šlÒ±ZWGF·lÝUq§Œl`­š4®-4Ò¥²mÅÅM ¼ä”b$X‡±¸ÖI¡™QD!„H%U‰AyÇܼÜD”R”õ¤Ä9)2©ÒÄ‘éî^4ÇGW·†8«1)Lši¦,bÍ4ÜÈÃéhÍ7N;×1„øu!ÍøbË^?i4RžAÛ9в‹Šcpp&¤wóSÝï÷NÉpBÇÆH{$Ÿ!!äìp\e¶f2–¡g[‹ºîTæ^öÉòQ©ªnw[«£5a˜[4w“BhIM¼“S­'|”²&‰i"ë¿ä©ÎN-Ê ÔA=®¼šZlò\uŽ­qBa3H›Å Ð w,v—Tû 5+F‚‚&¤tƒ¼^Aá͉ìV:Ûi2“Ho„6]”Ë)c€lYË 7$5(îh¤ˆº’5,‘caTƒqâ7œcÕ%º„Ê4„¥$T©¬°Ò@ˆHÐŽ/p‘S4 ½ØoXç+mÑ7 "ï@EÞ@""%¥ªUQd«,*À¡JžúˆíRZíu”à RRõV—kÞóõcº²ã‡©Øír{]IÀï¨ùT•H¶0 §â{û »Ì9ÁᱟÛçï–¸00¥ø0ÅU“S‚8¾Lˆv¡VJUçB‘(a¢T4J‘HÒ„hÅ”ˆEˆhX‘x<Xþtbh0·ÖÛ„pTê‡,:Tp8¢z¦‘½Aên”˜<ªN]:ä{œV1XÙ®‰Øp’pÝR±²Ød ±CrœG8rz\'G61µlöm»àm·‹(pvK[±Ù¬W®wÆYº´RUE°f&­QÎP‰“Jœ$Âp„"ŠR)‚"á¿ئÊ3ØjÄ–Ú c¦©VJ%Ek £XdÅ’Æ´8:Ê È‚Q'7{Ûí$K"'#yNøqGUê¨ê;;w*Q"qvè78Njn˜ìOie¨=(u©0… h(‰<êxO¼àê›;Ÿ:eCçB¡ò(íy]ª¦+UÞsI¯„Wnqd0Qf±0EM9ÙO.ÆÙ$î8g®x0Ô¨öbœgÊ_EÉ'¸¯s‘ž”æÔ'< àù]ÕjÑî6ï—Eždq¤œkÕÕ6ÒN)×¢ëájÎzxÌqaY„²Ux$вl”ÆÚšV;ëÅïûñ»é%†ÿ+©JMÔëž2F62ÛX¥ñƒÛ ÆÔy$»UZÔb„¦}JÉ=éc­NŽŸ2DøÄù£v„|â8;œïÇ6mj˦)s:kv•›4\¶²1±bšžÕš¬M)Í¡^Ɔp>R`5r_ènŒ Æüì#Õ·lÞ;ø ¶–›´¦2íVª­‹ _!ðƒ±$®¾»x±¤C„|h’zÍõc6)ž{ëzXwø‘6z÷G#‰ä•*v¤ŒL9´‰Ú‰Á¨tYdK*M×K"ÓK'zXÒÈæ¨˜CÁÖ:€»ÅæNÈoHŽ|ðŠQË€y$;Îé>ãÒvâÒ5¬üšðæ.͉:Ê•b$ƒ“N5¦“v èŽå„Ü€ÆÇy×+Ú¬©Ä i]’¯½øt4L¬§c¾nõ™8€!d¡ª‚€  ¥) FÏÊæŸVúqVãÖñ_3ÞÓåÆ6a¶˜¬ja,m±ÖGp{ ’%¡a€’Õ"“­Xó™êàiTœÒsT¤Z¿©Ì=/O7ŠyO¬ö¾%IH¯”ˆû 4VÊ>§ƒgÄøÏHÙc¥GìpeJ¨šB¨©1JÃ# Åb°ªQU¬tbªUR4¦)RªF UI =„˜ûŽçcÎô¼®©Î–'}Oó,2þZ2»Xõý€&l÷[?i¶?9ª•¶ð<’)æëkS4 ÄJ8 #9'vôÌúö5›´¬å@•z*hâ‡'!ØHæõuÔ>¼DÔ('Q·ðµõ¾­5«ò÷œ!ÔvAÒήt…Æ\d›$:úàO')Ã.,m+< ®'‰Ð¢SéQ¸$M0âÔ×)w¿;ZÉâRwÉ:šhÍ6DˆŠŒzR¶^›LµmEq¶›LÕÒ ­4~?ÜÍô÷³, ž2Ò§UìÔ¸8=³Ææ®Õ#Ó°<~ÌWž¬¥J kÞS¾(Â`¤ÑÝ“kCéİ`L±>Vb8«­è &â{!½’öfz{Á¶~ºfæ™ãϰã,oͧOQÂìÌ¿ÖÇæ“þØÀQ]‡R¾<ƒÎŠ–¼‰ÈZA¡ßNîû]… –¬5v‡Âs¿ìí žzàÓÙØ’ŸÓçdQñŽ‘¤´b©N“¦'#Æd/•ä@ú ]ƒ¼ìƒ[‡ý‹;Ö^“ ª­â5èjQF,D\§Ñ@~>Ý @3¿jn@AIïmÐïŒúõ:7}‰8?Ò†€<,(‰#÷m2©ÃEGóè…[ ÏrBÐßÄy¡¦Á¿‹\¦Ì(l”5Rã]•Oê¡ R‘Vª„’jª‘PiER‘©)hE¡¥i„ªD¡(FšZX€)j©iªšªj’¨ªjªšªªªj©ª¢©˜fA¢*FŠªRšªªª¦*ªªªªªªª©E©ª¦ªªªªªšªªªªªªJ*©A¤¤¦©ªZ"ªi(‰H T¡F©bª‰@„–E(A‹Q$…±$„@“¤“Ž©†;™˜¦%a´€@’w½c|™is}=Ÿ9¨Ýº¥3Ð,†¬‰nz=ß@æhâƒ* TX,)JKoýº·µö¶Ð@Ý‘2sVXA€Q†0¥€BA¡iÃD~œTˆF¥ WAËÞõò²n‰ÔÛWmåäà*!’ ñˆÎèJˆ‹Z «¶Ø¨¤¡ @pT¤P1!u nÌM £!v•ÈQ )êÊ<–Іĉè@™8É…˜% CºÏ5@‘+TDœPcSCHA@”% x(î•(!’^@å—P´)¾Dð`í ä‡NS$SXbóBð3¼‘ÜJ<éÉXPèË©Ni3Úb÷·`Ò¼èö{¾m›¦¼ïS9òmà z0ÏX¢…ú¯¿Å Ìx  ]«»3'ãÊdš†¢$XB‰¾êÐõðÌV²…’æýÕ’8X6Û -Zà~©ò¾ò¿}Þþ©Ø›óxH‰Ä'uHN`p{ÎqBZˆþßp• œXεœÔãÇg÷œ*¨ìjlSll>ÔßWùkøÚ`˜²8*hÓõš}Ùír|ì_GÑ\¦ŽÕyõÅf•…RŸãuU7‹ñ=Y=W¸±êT*¹ô‘9Û£AjXBbL5§)0„¶”-C) ÕFÌ štC1t`hu—WX""Q!ˆvUM$C†@á ™¼2tàQVM)2¢ZbäVÖH›Pœ8RÛ1SqÒ&¥¶’•ºj8´’ÚÑZQئ*­-U\-UUV"É%R2"Æ ™jÂB –9”cMœÖ­TUSa¸“ʺÞO%hèŒi§ø4àÓ}¿©[¸:Hv–WRªªª*ªª«JÙyâñ„a›€År('¹Ñ‹:2+#‚±¦cf˜«¨ÄÐ…5ºáj­-UUUUV²ªµAE¡à¬©Ñ•66›]ä o•'$‰ª%XGkTÐó„ „˜2F­ )dÚ¬Çn1M• þŸªî ÎL30ÁLª)ª  ‰Û#ÁЬ˜©GE,4à F¥i(¥Ô%U–I1MPUÔJEADQAQU AAE')D:  ˆT"ppÖ¥d1a&*¶1[3-̺¹rèÕUÃ艊"+Šª•”©°&)éY1Rm·í>.MßLrÆ(üVuT““νEèUf¨à’l$&ÇQXªRªR©HaF*£ÒÚr*‹ÔòqÛwd“µÅù´ÐÙ\0B ¤xêdo1%„#©Î²-¹$4š‡`ÜCGÀ?±7¤d™ƒÜXÉ™ Å©“ÿñ¬haÚøØ}¸sBG8á’`ÿíL8†Ê%0}ÃV8 ݤX )ÓÑÚnI5æsß.Ié/A#’iâ\ï ƒÍŽ†kä(q‰¥¼¥Ë‚,jWÊŒ¡v–æ@Hß Ù5,A™ÜsBâ Yð?ð€Œrâ6=„ž BŽÎ¤úÐ y² &+° Ou.’™ÜRG”P8$EÏ)Ü\0v®ROƒ!¡‚ Ë#…»ÉGÉûÆÎ]o!d‚‹#Xnj¼I!aW˜óNHÇ*£‘©‹™?¸Øì4Ü£é<ã›ƒš Œ›1,îò9^Bæè¦šàEçÈIùXã4k¡Î,\;‹ŽQÚ;XµdÒN6éºq"æ d.‚.`£pƒR .]¬ 8ÇÉÑývÆ•^Ö1jžú“"ª%î®jw*kIݸެ]æë‘!…‡9ÎU|ÕNíZûÆ_ð}«Þ³˜pÑÈfhÕË jOÏ`eçÛ¬²vmC©Xu&Èn‡hL΀²aŠ@ÕÍÃܲªyCaš–©ØjV³˜H”•Du.ŽZa¡_ù?‰„?7ùµ~wø CeBçý?èÓ© ÙÅ?*^ëÿÙÿöðoü½×÷›“òo±žœùQûëûðùp{H?…qß‚'Õð”Dr{G¸;æO59dIm‚AQAˆVÂM™Ä³SÚx9Zþ-³QµÅfgì:–Kò:ìs£¨q?ÔýGö#ù®,›\×Á¹ãûvŸxüÇk°mú_CõNÃy´ç0™3GÜI*ÈÁJd–"*•ÌsáÞ U êχ.Eâ!ºB“>Ù¯Õ|RJ”檆̴«Z±±eÜÌ–”©Ï‰ÞŠ¿<{0ïàðˆŒÄМí€}Ü€hú&ÏãðÎ$+ >é 5œüO®˜y˲o¶I¿p(z)†Ò-îÿ{†Œ˜örÚ{ãƒrú€=y 87æÂØ–[žà‚ƽ™  í¶õÜ'•Òx-Wïã” ;GªEƶû£ÒÛè»âºY-×_õôíÞe!PŠÕ/}aWÜÁ—Ý]cYY,J‡0 R”A ¯4‚É ›®ú+%7¨a"‡y"d…(Ôº+=)0#‡ˆM,ý}¯¬]Ô.‡¾ ãïêÀýzîÔ°W-   q{rƒh®1o7ÞF˜¢™´ …jͲ÷pÚ´f3óàÞihE$‚çy§ nY¢6wüîylœ)Ž^u@"#;RqÁ`·GrŠù;=‰Àíq}%pR·~’°šV•åþ] ˜9¬šj,Ø~Ãl‘…"££úoùÊÒ± Ò¶Wõÿ»¡À(*”ˆ8x(1lÐQhqÕ8÷ÜLfHo½Ï/”ÀåÏ<æöÑ—‚ÖáYó,\‘ĦõˆÛd„ÁhéËŽ&WŠ(d ùvC…Øls:vÎ`0"{Iå5¢Äš7S´Žð’NÑNà†.®N‰½‰5R™Ðz!`¨X â Ç 5ì›c%Ø,uh±åÑÚ(m MgŒwÄ„` µÏl0ã(®ŸÁ2ÎY,E õžO×¶!™¶60I¼ì2x–,ÜÂ….ŠY €ÅòX•¾4æY` –æÉII*$p„IŽM¡ËÎdí ä`»Bj¸äâC¬læëáÉš¼Æ¼:r•;Ötw8´=ŠUQE¶NllJPj˜Šå#Ê…R£Ó‚[¶çò;+÷ìÆxw`,jÝ­ð8–nÍ À„ ¹„œÈ׊£$ `9é0î‘×lŽÂYSè• Fˆ²µQRB‹cÂ21Ð1!h𤘱h©9¼%.—xB}R0ª—ªÊšeůh":¨ŽTµZÉAªMÚXZRr’¥¥Ujر¤eDayº |Í4IIõKE%\A¼Ù`g˜8EAœ@Á›¾ "Bƒ4 Tì³S4]TR˜rŒB"R\5'+ª>¸MgI!« &i à„ª•HHgºa !(Î3œ¦3Û-ñ™8`ÅtÇÎAÍ„ØsѩȱïˆÀŽ#£µÉí©È=‡‡RÎ’>ÿÒpOˆøjET=p¸X/UÝ# ä âŠG£•$È8)+ôBç„™ ;láMÎÆ4L®( oa ÷܉ )¦;¢¡ú^¾÷ÈžµíkO[Ï»ÞÑrnö¼Zl혱î+‹¡5ˆDqÏb7(rDÍé;+ nùŸO¡Í]Î.¬j¸pºu®þ&h¦[oqƒ¡G1ÏØ>‘—™^e.GÖV”³áqi³¥èl® ”õÊH°JŽ*«bˆ‰""’OAé{8¤ââü<ÝFÎÇ&>ÔÇÍ[&§¾`–Éc^ãHÆLáÄô×2hs1-<†Ãê`Ô;6-¹l#èc"B[[5pÎÖ*™„§@€ ¨)|R@JGã’d‡Bƒ´¡Ç0w¹G`å‹\‹Š‡ AÆ€‹FÃɃ'‹H_YôÝ É&`D’x ±MqΚ¢„y%ˆ$_àÛ#8,ˆ!…°®X’Îy¼r´6hrá†P‰ùKEIÔàX°‚Çb,@üÍð"í“ÇxXÄ]Ë™–¹å.jÔ;ö¾4çBÛ¬ÈXa8ýGSÌä÷Üžd¯Ì÷=ÏC£x±O:»:ŽáŽ0³ǵ‘ò<Þž¾.G‹_R´yß®ì1ÊM„]´‘Øq°ÜïóIÚXÊ.zŒžÒ+Ðn\AA“sS÷ÇQÍ®8×;‡4#×qâ<²)QåÓ’4.ÍTŒ¼q å&Y€¤¾HHClRà¡={äf :±*S¹*E&‚QŒ¡vG+?¦\±s&ý ˆ<¥{âì;Aæ›!­‘N§s““—-$™9¦Ÿ¦ýÎi ö˜nŽ̺ÐÈåŒqßl]4Ò˜ùœ¤9´ÝJ­ÚVÍ&µLUUNZÖ2S•‹…X-M$ÓsÎuž5Þ8…äÓãn›¾Ý;g‚yžŽ²#à;NuräXäIÈ6‹ò ¹%ŒŸ?éÜrøLÌâ|D’vG.ŸQšI$ò\ÕAC‹s‰Eæ—k—! A¨ã=«sn\MÎ#Ÿ)à\Á±bÀ\qr{òùćÇÜ@‹—7,SOÔFÇy°Þ£\j"LGÐvv©Î!sI8‡qDyDJ9ì9€K¼Ðƒ;(ÞÁG£ÔH9¸îw‡rIÊÔüœ Kw`ÈãˆÎ$îṨ&ԣ̶ÁÀö·,†Æ§mÊ݈;‹†€ä”/‰d€KeÂØµè)!Àø,9Lc/Êó•¤&T¬¾g™ŽÚðœÕô:wòy’4! ¤Å²ù î 1Ä*âá1 h•Æ …¤qŲ́ÐèäXö¶P˜7 [Rƒ$žÌÛš— œl’Qõs¡GÑF©£Ç!jŽEŠ8–$CS&„ VÎEy8‡’IXܳ— î Œ^ãvZ ˆ@„‰ÎÙ d›"yçF:„å°ÙޤxÛAÛ5>ézP‰ùú=AbçíÈAò8®þá¶9x–9‹·©Ô‘¤E‹”jxˆnȱ·>4w±¸ð0Ú6£‡pš A¯¬Ébr.!É=ñÏ”É"= B00æ$4wLâ4J$"/ KMkÂÞ¨RLešzD9±Ü9‹õ%Ï~ä|O@æÁAà^ßsÉÑž*ÙÞÆ9·˜àå>³÷c#ƒ3££æ|nÇ›º:>VÔÒÖ<ï'b»^î:º4ø^® À檽_ ¹zv,aî`°âob†¸‡GiÀùK²ßÄÈXFDlÉ€Ôœá`úæÄáËhhuCPwºÞÆÊæàîlùU<t'¡d%KbzÞûÎÏgIàñaÑŒõ3$ôØúë'Ä󸬞žG“wÐíã°çik¹’QTCyH©ÓDxÝù â ÔöCd‘˹,wêf(„l@XF†h#Fí [Þ©³“f5±É1f8ŽEN&‘ËÃnn`†) WÉ€‘ ÉbBæ–$°rµ¸ØØÉcãåN08á¦ùØ­FØÀpøi5‰Œ"u ͨä‰EÌš‰4éLj`sR¬zÃ)‘AQf(‚ †tdýœMBI.yºIÄ£ çã3© hŒƒÀi4>Àçi³– btaQø–\ô”h\·…†è|dj#Ì||Ø“ˆË6ääIÂlQE͇/0<¢¢ÅËÁÈOç6 ȃJ2vñ’9B;„[4q ‹ ¹b(÷Ê<乡¡†Ê60Ú8K:ŸTÆŸÚb>Gƒ¨¯|qhÇwaËO©à¿¹A /—h2p2Q! ¤F©¨qõ!ï:·XÚ™»ÅÑ}Xö$ß­]eU-ÚIÄf¡t¤¬@Fˆ)Ÿ DÄn’…)`˜œ–2AúÈÈØÉ¼IÙÜ{çXéQ79#C'2¼¦ \¸æ„„ ¤NxLžñ%¹ ÅÃä,ACŠæíÔG"™´(pæy(±#›hp08Þv1\UÞñÛpuŸC‹aÜ} üÇï–‚Ø¡|Ào,• ²É~³ˆ¸õ1âD¬š¦Áœ(Ì|¯bªnO¼Y'GØÄ÷”œ9¸8*5/ÎÔC7iè ZMŽ+’ ÏXRçÁ”ÐT“+ ºCÐÁŽ9ðW]E:ðC)«’³.En% ⇱q'à.‡| ÙÑÝD‚†1Ïíö;Ešˆc$;®Žc¢€ãu˵0ÀÀ{N'¾a6ç¢~’ :%»GJ¸ ˆ† e€¢!˜€!V A˜ROÅ:›ýpÜ.ð’…úµöûø¸ªQTm+XVA¶V•,ÈpC3l¯óÇaDB€«,œ²iÑ“Sq1Š.3±dùV¦âþ½˜†Ö›?ŒÀǼ3dÙ˜ì&Ú¢¬X™HêÁ „A5#ºRH‡7âw¾Ëñ¿#ë>Â71ˆ€Wù¥LUJ”Ù»ÚæÖ§«Úÿ1»‹—¸ªð™Í;¤u4û­ŒúHýÏåçL1üxÒ«F$ïScÅÔüÏÕ}'sfêú‰æpŽ Øö½MØÓyÔ®¿©Í\U•úŠâ®[ÍùtëRæ¶ì8vŸ’dŠÖ<óÊ0mRü2ª~Å>‚‡ÅL® ijm©n›*9éØs©Ìs˜Ž!A÷Àr ¢‚L¡½jÔÍk4êvDG| UI*’§ëž¯âÎôµÜ³Çzíái|ñÂ9W;ÃX¤‡Ã{ÕêÊ̯›Ä€Ž9 ’Æ }·’ð«R££=·¶p𿵽?¼$•,T÷Õ,D)×söÇJ²GaÄA4,ª³ ;•ˆc.µ ª>1Oäö×ÎÿoiÛe»öÿæló}oéâìùù½ñVÏÅýëšÕoÓÄuÛàÚ6¶¾OÐô>Þ èmþ®þ¦d}ßî[·ðëv¡ô~Ž,X±vÇìkCǾï~Fà69}¹ZݽÏèà©¶p8YYßR½~N¿–a£+…wïç~5»sãó+מyeØØ·n­Y~ÎÅ­-.Ð1¿WÜ:gpwCi»È"r¯xþóÝz0L°*ÄÐÀÑAßž""‡~1ãpnqáŠVU|{doV©À)L3dz׬BžršâŠ/ „ªÝ™øç}¯Ì<p¨U1ž0y€˜ˆŒ¹ªª|ÍMöúÖ¯c¿ÛéïŒâ©p®.¨¥ÂÝ„pð×Rðiä=ŽÅCM·¯¹‡¯ªý–~&Œk&cAI'ñ¤( n!B,@}A›X(úOÊ4äÔ¼7/Ös‘ÝÔüBr„¨ Pa+…=®AB$Yä¹Ï¹#‘.»q ·c-¥¡$ŒÝöÇ\èX0Z ¾ã¶³ÌMK¿»Qæ .Hj°ƒ|ºòTW¼™$ápÁ\ØD.ø7 £CŽtí×F §V0éáÏK„>ÅŸ¨~c  3ô¿ƒöŸk‚ãé0ˆá"BFä ?JôN`>!ðÞŸF8ˆD YŽ'úÄhHÑ‚W¯Z4éSÙ6þ­„HFG¢ýæ-@É: Ÿ A÷äû_oö–± 0LÞ?òm…£ÖbŒXÿàŽy7çCtáþÃÁߤÃ]›Œ¬¦¹7Ñ×¾g1ÏŽyiÏSÔrá8¹·m½¸mO&ŠÉ˜è™‹gŽy.Z[jÑ÷ålhïYš1c¤qÌiÇJå&œ_žÛHØ6¿-ã…ùlïÉðZòêÛÞIÖ!íiÂáÉppA;ÒE™(*¹( ~™"uß–1ðH•¡ª ˆ&8å;ÐÑaÂ?ÂØ°ó0Ý?ñ SèS›goKmÏñ3’פµUUUUrÕ§ÉÌËUhZªªªªª«u˜«Ÿ!̶ªÕmµd’E_Jݪ²I$šY$’*ª¶Û-U¶ªªÛUUUlµUmªª¶ÕUZZ«mUUUZZªªªªª¶ÕUUU¶ªªªªªªªªªªªÛUUUUVÚ«KUmª¶ÚZ«KV–ªÛmª«ajª­µm•e¬ŠÈ˜ª ² ²*âÉ$’I#-U¶ªªªõœÄ&Læìe¶ÒÕTœwI$•"GƘ,^†r‹¹'éü? ÑþΗ±À@>{GÈ{ž‹Œ¿öUQï W+™uHš¥Š¹K´¡`¨ŠÊªµL¹¿ýfÌÅš‰•$žyãÞ3¾·DÁó±Ë¯ö¤×ç›OßÜߌ¼cÐbM›ë»m é!a!iz*Õž”º¸¦F.\$ÕNˆA0‚šªAR´¬¤©,©*0Š«/n`9b±6%14`™&-dkMÊ­ïÒˆÌrܸæ,‘J’ä0Wa"Ц0"¹(à ÂTà’bA1ŸL6Ð9V#ûZ]„Hb ¥jº!¡ÂM4AKML—3$•ŠÃÂÌÃR¿¿3XŽœ· q„%IQ´F UªÖˆ ¬/+ Ì *Ŭ*(ÖR(Œ©Ka/[f5­j²c%K~†j oª˜ ÈqÁQ»f5«µ)ø›U0„¨¤,A-k€[( Ø–© õ‚ånyɼ‡,æÅ…S*ŠÊœâV}7à TÇõ«£á@ðúª"N ž1îÔÊ&Χ¼þŽBÉ àv2ñ§pnòö.&™àJDªDU¥á±´{…újézJo·ïrªJµÙ¿CÅ;‡¿‚yëüê|CÄSÞ+”²³·£ºÏºe“ªeTuàë~}‰Uò–`œ€x¤ÿƒ·XbE #~µUq²Ñ<¾Á JôI޼:Zµù?•»ÐhÙÛåßÖI%©¬mŸ-¿á•o„ûŸÊŽ.NÏÙ`÷Cä‡ÛpñeíD\ø¦Ì;3•{³§‘%É“séCžy–!®W%Õ#ž €€©¶0)Ù2ŽÂŽKçó\M¢¾*ëÜù=§¥ú¾n“™vm³Hš•/:H\Ùò,¯Ô{[®EL†šã1ÅÛ W7ZÄPÑÔ`ñâk¶~¤„Š«Yx¯t0{Å_¤®—Qß§Z׋´áœö0~P;#ÅV)Š¥20¨Å•ô~¼“RM~…›Ÿyþ“$häÃxöã©S› -tÓ"›jïÄ Ùz¹¯Ú}ÿÌ£¸‘Z´Nt)þ±Òm—,Lø¸ðË ÍGz[Sknëó§ÍdX×;ܤb½ÚFðŽñ7ÆQ¾Ô ëfBÜ”&+ÿ=Qæ'áEEBâ€È©Ö±£³×êTˆ)ަ'RƒâÏ0ôbO¤"!ŠJ®èƒ4û€ør¤œ³W8¦eìÚé’þZZ{Ÿ²8 ²“‡ùhÿK Ç_t§IMÓèÛÑé…ãUÕÒ·ÛÜäù¡ë á æ™!AsàßW S›XLöý]´§¼²øiÖ˜0{‘ÃÃSIáBõÿ/ÄpÔàö%Yc‹;¦R…H›3™jN¤‹ -c$IŽ9Ìr¶Íz­Äé"óW‡ÇÆí¢]Uõú,Z:D{=‘ r0ü'|y3‹Ï_á_#lé_ÈËí.+?g'“ÝíIÓ‰6ú¸zPÎTBJT Q&TB¬ÕªKZ*ž½½yÎÉjoÄ–œ¸)çQVöiˆyèdôL'Åû_›øÇ߯˜Ùô•ùCŠt RØÃ½ñâ#Ö¶’ëé¨|óðCÈ.™†DS½5O˜<œ¥4ÐÜ4˜ñtÇ©æh§åU*«ë4Y°…AA¶(?9¢'`¡…¯Âæccå;Ñ}‘Øàu(Ù³ÉÍá|‹í¿Õ93ñ:Ú*”©iþosßlìr ™ ðÍÎ cò '·""|E ‹ÁÀõ?è¸87cÝõþÍý7ëIùVeeD˜°>xó%E«#£›Ùó)ñ+òªMo÷§¦qF!”(¡0ÀÃ!h‹ýœBÙ¾Î3æy Çâú‚@O­Ñ/š¨)‰Ó4€sÙ™µ \,A¬€F>ÿnåj×LÆ‘‹ÌAØ@ó¾-o»ˆ›b­­§ëÑk|Õ™í~87Yã[cò¸k[ªZkdž´§hBž/)B¡äyÚ§úå±G—ò8~iésy)ÜŒ+ÏܵÚó¼ñr>(u8ê½OÒ.¾¢™Ò ‹CYR²µÛò\¸v–&¶  °ÿDä\ňÁ€à‚A¹C—8™‘ϸjkÄXâ@8ƒÐ9¡pÜàëplU1XÇ'yà îᙞ„'Nãr:%<6§#Ìñ+‹"§a‡#çWRG7j<œ›¹•æ“ÛíùºuN/$ÓÁÚdHnv¤ÓN*NǤvœN·±ÅL‚6x¼Ü†é²l¦G¤ý'zlÎå­Õérwºx78ž49 W7©…ÄP"™›!^³Þ‘)M3¡vÅEï½eÀEÑL’c¦i6Ënškƒ{o ¾¡€×<›|à—{ñ‚M¶·Úå]Ë.'D5ö»Þ[‹ëÃož lÜÈÎ-À0*Q‡7,íÓ=@õâž’p?<ô_”,Å #©X¦QUQÑ-JÄÓ"'áI.š¬5Z~&,+7bšsozlܪàžÑÚÚmŸé™!UÑ“ËÿÒH:û–?ðJþ'ʵL TË$qxiDúUÒu0Ÿ”T4²å‰ýò±ÀÆŠ"Ÿm‰…RJ¨þðüìgÎùtÔûìiò®ë¦Í±4ß:+à~..¢CÀöcD¨;U;Í4 ƒÇ‰¬ç>\Ý—C£‡›¤šZLjÊ•¡Wç]+R¢Ò›Ã_ õwjáxhÝœ¹$9Ò#¾Dv•äÈ6€r¦ª€èÈoƒS1˜Ù‰ø9puO÷iX…0õyáÐøÐñIý¯Â¿kR „ {qßñüoý¿…úÿ†r-ÄxaÈa8ØÃDèÛJÝ1ªlR”Æ—ƒËÈ &{쪦 ª(à¦&Šhª(hŠÂWÜë)‘\ 7‰Sáׯé~²«Ðö}šÜ¯Èçy5mÃxâ`¾B$("€²8,ðÎíaU±Šª”U+7ÃÿSN‹XsÿÃó¤¤yÿjäð¦?)™·î³çfsA¨ý!‡1y%ÿÌ”…*®ê£…B÷4â’×CçmˆÊ„ZØœ÷æÿÉøôó¶dSw¼ªªªÄô%é§Ö¶þ‚‰!nŒPJ¢›š1$HÄÿøñŒÌ>GÃ㣆Ö沘{?ß*®@Ýlˆ]VLöáý9ʺÉi‰>ªÏoŽE'?YD(¼¦®¿€¤4ÕhJ‘¢Uá(¿GÛþYký¾d{Þ”¾ÿR-mÙNæK>ÇyW“Z·)cÜ´0ô«|.EŸ »'‰Cqleå§ÒʯÅúœeãñ½ÿÛ§›Änƒt_0ËSCíÞø8þt¶Jpò·‡ATTPUAF©Z@ò‘”šj o[&}ËTAg®ËíÚ,g±J¡ñX~á˜÷ QAE=sèø2„Ì$Hâç3ÌýS˜£ˆ¨F ¸¾yQÇ/‚ôsº0`ßþÅŒ„"‘Šzîa~“¦“34Îsœç9Î{×Üàw‡ ÿŠ›úÂ5ÛoãÇgr¢+¦Ó2îé¹õç×­î•ôÕI hïI!¯ü4¿x÷¿cõzþgï½rO}ð0nV3ý[ßVšx#ý5 ($‰p¾B^$í¢ÐwdD§tOœF>¡ (g•‰LüáÅRçôœ[„ÕŠ© Fƒƒ¦D8¾N)jà<UÔ,à&Z i¨‚í‹¢OÁP2Êꊯ—÷ìüº‘/péPí’¼½[ÇÌñ½Ô~Î;së·¨í?´5ªéw~çnW>¥M&uY3»¿<òC?ºVä ÙCÏÛ†*¾ïXË0r7Õ©Z§Ëðòëí²”>ÏÎîtô÷ /ΊÍ[ºqu¿‰½¶¯‡RLi@úO™§R==¦»¤ß1ÝÌ©LÜJ4ºú¤D“}|)hñ~wÏ« J3ÁÝT@P=Hˆ÷ÄX Cô ?˜HèsaÚ–>†?Xàþ’Èq+öñû88¿Š8îßÝ\ªidû]Ò¾×w5'ëÐprMŸêÿÅï7rË^ny·4®îe¿³žŠ¹"4(4ø=L)ü÷麇öSúf;´§Ö^ÓsÒAûÝh¹ûF"¶#2Æ›¶†¹ ÁÞI%„?²`¹±õJ.\d½÷¤ã-XÖ¿~D+®®gÈû–OÁAª<ùæóÇôÙ*T+%§¿6“!j |aßÍP±Ê˜³)|ºré—²ñü’X …ÓÆ»Aç;(åÇNŠtÄ` ÐòâgÇ•Ÿ™`Gà8O¤Ô¹Ã°eË—¢|-Oî¼¥éŒÁï{æÁ(G"¿†9þ¹G¸±§ˆý ÔnP„Š:šØGo\:&¦MOÐ7>rõȹ°‹bv;uÉósŽ0æ†â,#°÷¼ I.#pÜÇ´±kK–j;`á<ËÐG‰Ä¹GœÔG´2L<Ú-TŒ÷†SŸ@ßLDo§TO}è@@w`„#Ä(*þD œ$šT¥ùð@ˆoP„'ìDŸaaú°TU…*_x2­(.÷é‹Ì.®½}vvÖ¼Ò7üOO^Ve)ŸÜ»ÍìÖR!,9è_{38|iˆ¯ßišÎšü—ÒÖÌç6m¦Ÿ“¤ßlk®µ;ë®™¬ç9¶s˜ßlÝö}7}õ³Y¨‹Doõ1ôòôö®…/ÅøÞ¸ãd‘ŒivßéÇkOZ7•× §IÝñÇ;rµyvnyßY<Ï„Ÿê*1Í$øEHøÕ'±ì‘_g UÆ0Æ11PÅSý¬I¥?>ïoÉŽ\81¤¥hlÐÄ㊨RÈ"B‚ ×âœ.ÔàÈì^üÍ&µ‘?’ÉþÍí¹í|*ô+ò±ð‘ò)6GÀ˜¯“ü2ûŒ±j_ÁÁÁVà6i+dro>C÷hjvqù—O B4Ùc$PˆqÊ$rBIË`È7|‡ì¾ÈÁÕÔÜŸ*?A|ÿóÖ³ñ´È²É àûR°ídˆoH–#¬¾ÑØ=Ñ ö¤ Ûä0 a帷­Ñù’zL™ÞcÓ*G¨¯ŸÎXDå5‘RÉ~]­Õ[ŒECŠ¢È“ô¤BÉ$OÕToºäÓõç&éâ§ÂW‚štÂiúŒ=2×›=]R;ÊýE~¬¨vl¦–GcM‘Ô9·z²,Œ™ ¹º8©m«mv7Få‚·KÇýÖíÛÓ‰+†(1Ârv7L[Sc½Ìý„p¼INI+nÙƒ±ÈÄ: Ž)N,MÚG–ÛºY±Áì)VRs››²Õ²,n;\1׎$pl‡*JunÄ^¤ÈÇÔõÍ çYÌäÔ³”ÄØ“™8ȦÆD­ÅœP`8éM&ÕN‘Ü‘ (l¥v©‚ØäáÁõdCœNºÌ5%SöÙÈŸ§S¬Ó¤pNi);6iÖÄ€~&”œÜI7ÆAŸ]Hi1€ÞS­8'6îâã1ÎÖãv¤ z iÁð+rR<‡"¦Ý-Ó!Q–eFY8ª8cvx'êmÆ ‡ ¯‰£äu½žÃÓY'Ä™÷kú‚ÆèD8JNíŒáÄ!+ܸ÷éænnrIú$†Y)º;*³#•Eûî@ƒ; hHÎÜS8”Œ„¢‡,©0@Æ"éHkŸX°]·!Í&ÇÉ}LˆP{)FdfÔÐüg°Ô¢Œ9ÅÀü²CÏáÄä[Š3}}»Žd‰ ƒ…")8Å‚ªL_"0œ"C!1l yPq§|¸›ž˜:~– x\±aÇ$‘åhhîïÐê`ÊÃË>î¶T¢¡9hß&áÕŠìg ž˜ŽàOnã‹§ërˆ Ò"¬`KÎ å6—-Ü“ „céŠ}HM%@[&TÃæùpÑ~jMŒ~³s½[b‰¼„²Xë˦¤’®¡’¤vi”iUurÝœçZ"Ó}ð” ÂLA°+"ËQË5$CÉL†ÉÞ Ã4q(¤ã…*)ìÊŽ$8!ŠÅ€¡ps‰OaU+söfNéùßÕsDÙ‹7>è±»¯àæzÛ¹'«ë?Cø~;~”Ô’ý›}Iý;ÉðÏ–ið~C;Üüï÷¢IÕî;ŸYÛ÷j©U%T’Jʇ¥‰1¦¥J¶Å®óµüô‡×OÉùÞ&`àÞ$¯­óîGÆÝ7þle`§±çjA"õáuH Ý’Ií]ŒT@]ì‚"á"žÉó"»>gƒ±Ú/Õì½Tzо˜Üò5 *Lòƒ?×Ë¥Õ×jÞ[ÛøÖ¸ý,ÍÞ7áIÊB/÷–!GÇVªõŸ7´; GÎbc%Öµ¼2bÛl©§?b›U]éðÿ·š4ŒT‘ù)EkU)Ѷlÿ¨›oj*Œ_…w„TÆÛ]ÚÁ2ÿ™jø¶¸Å:õf"*oÕGümaäBŠtRðµYÐÖ¼~žîƽwå÷o-ƒ¿‡‘]?å¸Ú+&u4î„7”¹8é´í¬Un®¹÷ö&¶ÊŠ÷lÌ¢òB¥¶#8!ùNÁNR·wŒ¦q™Î*°›4[†mÁ.ÕÕ¨<‘h ¡Q^ãLB«×B“L•CIG–ú5 šm•.©Š®©×pÄc$b*ŠÁ:3F+a+m¨ –¨§6£Âã1ˆŒÝ+Ë¿ÂëYIUQ‹ï™Ýáp5h÷[[×dá—MDœî“gk@…éå¢a©m•UPX»–È÷(‰‰Nl8 áÇlÙ› TH´EÝ…AAAz]쬴*:Nhu3Nº³gŸ"í¶Öhîí­iÞ£(‘þšÙQNIX<’Ú‚(ƒ"?•‡ƒEï¥Þ‡Á|LÓ,WØîÙ‰;Ù•0{-е,(¢ Å ~öØúE ˆ*e—v=æh{Í]­ï'c†Ô ›^ŒŸ×·lèÖÊdºs³“<_Tï€tr3ßø¸‡úÉœù¦?Êú²Ä™_ë4Õ½x“¤¸Âƒ ,²ñ{ÁÖÑW¤¿‹ÿ_ïý_ðíµÕ!™†4à{Ûq'øœ î¼! —¡ låï¤7ýEýž–°üË.ØáˆH6·›ó÷9ªmdl‡è{ êS•¼¨·¬¤âÏûîüéͦêû=]Û¡1™r•!žŸ@úÒŠ³±Æ»íjºkÚšìZ*-£œ}yrÉšnLFÈ…+›´Û–šæ¬}½WÓ³šìåÖæ.æbs-~h %ù« “}á±ü8†TíWòq¶šú±ÿgJa6µ_ Ê›9Âü`©|.xiëŠXÄ (LR8¦¶¯Í› «›«¹…ºÙ6ŽøÈìÖMx~Òð ‹ö'K#¼-#]\}•²c‘gÅ>S8Wj¬†X¢”:§záÒö×~|¿Ñ‡dŸ•£R¹º˜áÓÆ/ãä~Í“E]¬Td|.ªÎS~&’êÄ– ±‚¬ðïGw¦—Þ/sàðyµ0 bÝös e™/Bέfþïò™é  P °=‡ª–s¤®[òš_QÛ]~„A£¸ÿè;‘1ª" Ò’©ç.Õ£Ÿ4¼¨G›´µþJgG°p}¸UI@³+P°š*™¥ ?M…’*š£è{l!T¤©ÏpÉF²ÛÃ%¹šu¤ šÈ ˜žšN<±AÄaB £¾Ð‰]Ðéuîó?»[£t—Öoª^1\™¸&4m<Ú¶R6q&íM§­Ø„B`5§ûH8Üf4åzÝQÁ‘#­—“BjApvPã[6 \7šnDò·f]ô´VŒ­mgÒ³8w¤¨¾™Ö=×kÎ<£˜œ<[‡R"ІÏÀqdÞÎ’½ ´Âw·)ŽÞÒ ,„–ί¤5.6ó íö ½„-¥åH;»Öfó(QMîLçGû厶<†ÏÅš«*”Rarª«Î©ŸX–_ð­Ëóçg—”íXÌÏþ.ë– Z©s%˜k:D·Õ0²ee2=Ìf¼z¹¢ÉXwwÛì:BÕÿ°ªœåV#اÓòôéÉHÅq*ÌÖ² TQ¨ª+•Œå %µ4eìÑÔ¡Iæìt·­ãcòñEãíÌ/»÷mJ3kí9û«ª¾Õ¢z°Ã7ñOÊ? ÂX0™WÜòæ'8] ‰è=Î9ݺª( Øla[ñ1Äï<Èx¢0Œ’(«(*Sìy$Oƒf׳a—I[È6>u«T"WLÕ+ EL£FÑŸT ì,_¸QIÈ犈¼[”F&AEÄ,Ç 3*•½zõjܤԻ@H’ÌÈ*º]EÃK¸°*ÀÐ9Îæ=­0Yɇӧ—¯]zœ.™ŽCý€šXLÌÚÌ[îì#ÓǤHŠˆÓãùÍÃÏ»" ©CK7~ÏS~àí4;R4R´…‘ì;ƒ ñ~wÂðîÃ7Öû4©¥LÏSSLQE½@v ì,”/ Ý'•ÈÔí!uNG-Ï!æI ¡bqš·-6ByTØC úAd…ÖÿNL\¾Z»’:V‰¬~‹$Âhç½¾–áîã3Ûgòª·|b"é?š.×·š§L«‡çd„"œw×Gu©{H’_aä£gµªT¡ÐkŒµã埭6oÔ~–ÓXÂò5²cËß>º7ªÚͰYL²hS.Íú¥Tñ—ûúoõúâ8[©‚ÿ/ÆLÌ7¯Œ^ö†Õ¬(‰qQPF#6.[8úP×+5¥‘« Uí}í%’ˆ07èïÖM *.C—^ÚS4Pœ{/­+êB[ôÐì`oC3yvì]Ö~îç7½Ç6èÙ9óx˜Iøâû½¼ßáz®Ö"E³lÈggdîõí7b¨"zé+Ê–Ú¨Ûÿk m…S,Æ)ñÐ*,‚¹j ,QT*JÀm¬RÛRVÈr hc0(©iJŠ‚¢­°unжÔbˆbYŠ©ŒD•Pq ªˆ£9£6ßo™ ©é݈î˜`;ƒÐgÊy#—€žZ›&‰ •ýx//LVa]€Ê†Êd˜°ˆgŸC¿[üü>µÖB‘_õu†‹g¢R¢«µ×3Jåˆßñj†©h(ò€~ÑShØú½ýÛŒ¯„ÿì÷´ðXüõÒt‹%-¿FI‘Ii%³{1dÎ}S„> ¹´{ƒæ| €¤!ºúÖ)3¥²%½Þë{8pÑŸöô%Ø»„ ª"D¢„Qã"`S㣠ñ„ TïôÙÁì,,ËGá³Ó6ŽªO±îê<ß=Š¢5ªë!²¢ ~ì¤Z*ŽXU•,‰vÎxnón+…Ü=#Ó8r Q(³©jn·Öý¿ÛsºJœ¡Ü°B@‚'<9ݯe0óü2“!ǰL!»~ÞÛãnpÁÑ­2UÐm䯅àöÿ-÷?œ}k'ŸŸÖ—ßÅ9z±G3áÒ¥ÄÐúxç«GŠWBÅÆQÿëOª2À5»Ž¥r) ØÜ–~þãXU;~´lEÙÌ©Ù[ˆ}Á…ÿã/À†Þ*ã¿BûÛèÄÛ÷°C› áQ]Nö˜†ÞÏu­ÿXrŒo0ã¬]ÿ¹ªú|Ù£¼?ø¤@Ù>½Ü-}kw³’#lîKÿ¿eœjø™shmjÃR<èg|#I‡3®É„ë~Ͻ¹ùFE=ÔèQo>£âmæµÉœ¿é„ÞÿþãÇþXòe·ØÒ[wEDQZÍËÎÛyŸ™­£èô´ê·bø“…B§í&¸‚xÔ€¢6ƒúªG5 »;´Õ÷¸Ç{ŽÐöÉÇùÿ®ÕR¿›ÿaìA;s8Žù3.÷2Z%8×d¯†´x.W›æE<}ìa"ÕÔ5ÛÕs•$LÂ?rÆ—’œ}5EVTáðð×ú—y"]PIõÇË‹ç¤nG+Û F¿Óc û­~{}.ß+¢ˆ¢Ø¦ê\.2fT‚®|Ñ6Å­[ðDO™¾Qá&ŒO%Õr÷eÈE,:Á>_'—ßh;r¡Þ-§Ý·„ ï;þl˜S+ÙÉD­ŠÓ(Y7w¾çã|g û<Ç (]29§%öÐu¦šÔ¾Œ¢åÔ^7Õ—4†»$ÃÝ*îª@¡…‰ü»Ä2¢ïði>_W¿bGQØšª_››~NNÚP‘Hó ÔWÿ2àqa\ø]¾PÐ'y,xòÄâ>˜r4Ï|!'7¸¿gOýNø°gâì ³¡Ñ‰Ì*®-^‰¼ReB"¥¬ZøŽî3.J$üVðìt ,I‚˜1â…éÚ'Cí"¶FeíÚÓ•wÊíEE7½ãÝèøô…òSøß‰Ãìv—c×>‹»Ö’ŽÖTDË\Ø;~oò3¹Þ¨Õ{9zB†ÏŒÉ+Þ%ï…ýrÏñ`Iã"q+?`S¿/þ÷Íó®¸ê?c#î.rÛÈþ®ÿï­6´G¬S.^žõÞ±¼rO*`TŸš»Î뜧}§!âtdÕ`+¤ì ðìo;7‘ÇÕûæ6~ÅïÁî¯g¨1ÍØþàŽ"mÐm³š›A®Ò;)W¶s“Àâ×¢(<é™(¥·«mbÅH䃅OÄž)®µÎÖãÖ["‰?›8W?ÛéÍkƒÝÌ‹š÷UÝú¹ßÖ”!?ô·Nš)ÛŸ‹ëwï_ ¤Íè˶©yµ&làÇæGŠ„‘®(CËŠšÓšóJÕò×}½‘ø{²Üægy=_¾í¼];'‰­2XÈÚ\]7]ç|>¢Þ¾TàVÓsö#uÌUãLòšjÆx’~ÐBÑù¿´®+—·—·²Ñ4wcg.÷}øº­-ØÙVÅ4@Ðh\L÷™–¦µsÈ£áp§Ð}Ê\ùm¹)ÿ­|øÿ‡½lJ“Q 8Z™¯†[­ ÷¸RO5øÞ—K;6µ½­¨ÌßõeYyвÅ>'¾ QËnµ¨øJ†¢›Rþõ‡Á„6I¿…»> îËÃíá•E)ëûUH•™¾1ù=¢/h:Ung<×Á¢}!a#:ݼx·ÿ‰kÊ{3™W´9½ÁäŠä½3víÙW§ìnd¾2æ»ÕªWú••:_Ϩí…mŸqÎuGÕMH.ÍÅßéŠeª®ù=€Å?6²ž¯]xÎFƉº~jÏwõfØžÇøœ´èþ6AÔK`T¨Ñˆ‡¹IXlm'ïp6ÑJ†ÿÐðz¯ÇºØ9°èIPâÍ“Æã­âZmF% _¿;çºeôéû»wCñY|a'á ¹d±»Uñé"<Ø"¤¿ ‚{Ñ| ·lCç”(1€¿Üz¤ôýÏÈëÛ°ò+ÞÆüOÔ ü‹˜Ùà¹1#Tnšä+ Z6Â¥JÕ‚.2HÈ"AȶÒL*•ÂïE,U¨¢%T*ËB²µ‹TDŠª4°Æ:Ë4L°dPE‰‘BåUÄËõÛ7§ÒÛ¹½º¬‡–ØClÌyF¸ Z•P®È¥H¸žLÖ TY0¶GZ«­Nhi.Y=–.“dY¤¬3„LÌB‰— €Æ9`Uðr¨¦¥¸“$³²šº€ÑÌ+i# , ±E;æ¨e>æléÔÙF¡ZÛTkb4h•V%JQ£ý¿ñ~÷Äû÷ßr9•¯'@¾'HâñŸýžòôÑûê¬ù‡ÛÁòÿ™<™}Ç nŸùÞ÷v~G×ö]ý­µíû765sì6l…Êpqx¾èg`’øÆ¶—lz»=a»|?+,#*cÊÑèÚ:^ÎH=Ô©¦²õ·ß,òúf†ÓYÝ«bMX†â¾Á´>¶\[÷|ýÿ}޽ݿÝZÞü½ï¡.¼¬ë¡Š¦‘rM¹oƒÉ½zIð¶¬à_ ¥Ÿ^ÔóøÕ–Q«_¸3¹J*¥×–q%˜Â{œ¼_üëÝÓ¢¯ ÀV-4Ô9ÃCò´!‘¸™­í E.Aáï־ˇ‘̯­Ëjê°N/Ñv–m¼Qí^ˆ;¨/\1}kpINU|~Ÿ”-÷Ã|áõÀµÔåèõ£ú¤ðãm\„N-桹áòRËè/¹ò¯~¼ïOÈ­iâüG7·Q‰d^ögG@øÝæ±Ä_’~5sŠº×¥DÇ’©–³¬j2טdƒ‡î%xü2ô$¥?ÕÃLÚm­î[ˆÊîÍ‘ ð=¸šg5Ôƒ¯ƒZ$¨}ø¥³d–d3"¡Y*"Z¥qÅÇkäÕu¶W­õ]ó²áÞUúX²¼y♨‡ª×à/œ«b†¥•ð5nþ˜ª¥jÔº˜‡Öqa£1bú‹ìÅWoÔÊò{d«_öÝJxд”÷Ñc[?ýÔüLwbÒüoÉì÷¯©ŸG;*m-(¦„0o¹Þ·?ƒ³bm)åŸ9Ç[i¹üî×õf|ù%ŸF橳oÆ“ ­CyËòõûŒæ•‡Æ+l»usë÷fÔÖ˽&š˜ Þb~â$´²TmxëðŽò Po*–㌎(+:Jß§Ëª""ö\gsÔá_Ür;v ºp¥C9EÊs–\4 æèõDg xºx jG ¨‚šgºUÓŸ—/O‰µ$µjo£S Ĩ¦Qoªq¦êÎÕõäÇ£i/aç¨9|t=Uøæ´½•žÉÛ˜±Ôb>©´?d ½â«h-ƒÒÕë4b…s4h¹hÞU–•!ºÁ:»w[‚•÷Ù~ô±Ùÿ©IìÝd=\ôûíÆ|ÕEC)ô8ššPð¿l¸8£=ô7S™0$8™®I×>)š‚øhJ†ÔT3D7&¦—2rHô äaÒTÚÓˆÁA߆ œvÀ7b¨Œ ÌÎZœQBkV™8š1Æ 88›¥8n7“ÓjÈ÷LnáWÀ–½»ðK%Úö»ÂˆwpK ZÄ\ÞR‚ÇøEö™ âù8ÅMÃYÃØ‹8îï3‹µ©KÖÓgÞK¥wm4ÿˆF‰ü<ìı™á»øÄ³d{9ÒÛ9÷6ðë±›¦Í{ˆnÌïwévÑÆêÕÒ’Ç.ùêé™Òe†£7s/N µfééÓWKŽùÒÍ“‘¬-P–!Ù&ìL‘)¶S¥ Î““–²Hþ—»ÄéýŒeð¸vÒTZnA–²”hö£‡Wª5TATEšJ”™(J†š„¡‰)FŠ(‹2‡9ç‚Ý^ÇofÛÙäúÏ_§ÚNÏ-¢Ù”€y]ÈXÊnʈŠ(ª(«²³+<5 ¥ýe<Â=ohò©¾ÂøOùíw^Þ(Œ%õ|Ë››¸ò V¼“èü>¬=_ÅàþÆfó±, u¬3m,îF ÎnVo“áõr¹åwwËåHšµ#g!Ý3*¢«Ws\_N+Ïjïæò’Tföƒì-“èz‘…¬´ó¶Oübçæv»[è ÏýI¦îd3|wE'wAåjW~f_jîMI¥¯9 þm™_ŽÍ4ø³åÝÓþ 1þ®å:ÑŸµ²ùM*Ü>¹•°³O“#ù™ÆÜM¾4Q«ìçAÑÜ÷þe0ÉR®…ÞG r¥1—·÷TÃH¬+G…³ðI׿²–W`š³¸[xâºÍÚ<Ûqj.R¦NôÝòœi§,}ÿ{t½ã¶ïÚÑ÷e«p”hÍ% ˜¼oÇáââE>J+Úµµ›a=}ÖŸ=59çw1뎢<+j_÷oƒî™5{‚ 9NW'†Êù:è ã6œÆrÛÝ—šiO×{«ÀþÉ“uM)›ñs)¼wµU Ã㴗ؽ†­Mÿ3•ÈÐßqu*–àÛjÏÍø#´wÑÑÏaÊ@÷%¼7oOÁ‡³yÔ~ÜÜ©êWv¬;Ûa·&LZ8nYÖ‚ þV‡«,ÿÁ‚”Ã¥ØøÝÓÖÞÎ÷_^Ž•7òKsç˜ôªgeS$[{QÈ—¾Ç> ¢r¾‡.k¼¼VÈ&îtª¥àä)ÞU’æ— ~z›Åý ÏæÖŸåJ—™ÒµÀÕmõO¤Ö«]v6¶kð¼ \Z¢çç–#|lm®? ·>2]ëÌ 3k•õ5ùw1|U­½]{G·8…Ã+pwAœ«^bb(e]±uaئ)¦;¿¡¬ù|ý¼³ÿ%=Jø DD™©ìzòÿm-_º±ð o§}ÒaÎÿýZ–wªãkxMÁá2ôº»U˜º­¥nkÕ³pe6„[Í羜”É*~a/*lð³×ŠM¡Éï耢ÝÅ©í;ÛÞL.Çáú׿¬—nù,Ž5¬WæŒxxvßz{Í¡ ½9Ìl*øJü<ˆþL˜qpvù×<_}b‹èÜ]ã&6½™-™òs>cÎØ2ö/N`8»>õ÷»G{¼ÏÚ>ßwàÓ WÃ0.ùã«;p¸;=ÉúV/ne9nb:[?×¾ÖÕ’(çÏw>O]ÂÏ«ÌäõQÄt”~Fü2qCfÄïǪq1ŽgúùðÍ ß©ÄØþOèŸÄ9ôêctêÈTâ[ 1 ·î¸ï4Í‚ìR Þ+ù÷EúÿJ€‹Ú/¾èð ûêõÿ1‚Þ ýûæ¦ÑÐÝæóõ—Ãåu¹ØÌ\#¹A^Ôpw+æÏ²âXÍË1Ž­µ  ;°på4ŸQq½‰fÝì5£1®og—Ö­‹úüžSêáyMÛJnH™1ˆÇ«@z»]óºYÊe/z¦ÊÀ³+áXQb/Ľü šüæÐüë÷á e®eY¸/uÛ¸&z]‚I\Í\‘eŠÊ¿¯<ÝÙ»¬ßùS%û´jø‡)Y^®ãm¥å,Þ½ž#Ž >ÄUÖŸK:c†¬-fAꌮT›sSüŸTºVîúãäðyõ©]œ™o«BŠ"mù’_‡£†“J§h\h¬gÖ-)x–{î¤Ý5¾ÞsŠ×©ÒÞD5Xt7_ /Òþô›¾¿Iù:‘?üâ*Æo†àøU“Âg®Ë.ójtÌá»*L·ÖYx¦[×?Kìú®LV*R½¨uEtXѱœ¡v .‹ ZüNði–XË4³èÉ›‡%jW¯“nÁÃÇ×munGƒ:'K®¯Û_iÛÓæMM¼Z[þ'•ƒ¡ÇöØcÏá컄9Öú{†*ÑæK‡ éTs“Žº¾÷O¦Mó!º½~Æóv ¶©—¿úU˽òöì7ÚnêK•5G{~!Ûϰò¢Ò5úÕ¶¹†–.~‡©7`§KÚ…øý8:øñ—câôÏ{ÑÇ·³^ðäêýeØ‹‡×Õ¶œU§<‡J¤Ë ºØÔêï&¦Œº¦ïÍÇ?µ=™ÊŸ9«Zì.Ö±Ì~QÊö¶ê Äâ‰#r÷ñ:‹óOVUÁÜ7»7ÚÂdÕ$É&(d¬Õc¡)ížQD¾ñ-ëx}Ùœšª¹ue±€í¡ë®å`Y¶VŽâ¼siÒtÙ«ÍÕ77‡Qõ”Hl[uEª¢¨aU«pgq]KKÓÑõ*Obt—kxÎÔÏtêëºcœÙõS{ÑUkΘˆØ{Cø(ÇÙ*^Ûë:íZãžß­?ïïéâùâÌnùTÿ°ö»Êû_?Míf~Œ­^3ÙWÚÐ@ŽÍ4×[Û÷-ª3l9~ÊXíàN½<6ş˼§ªéðŒ±—÷–Mh $Db1¬%?vT„XKl@D÷*Á°íæ)½úíqBÞ›ÿ=| ÕáÇæœ ‘:ñ—çC×ÚwMø²í•çZfOÛ†ÓÙqnµŒy»ÊÚ^³IÜ+Û*úüÖ>nÍû„¿£d¦¥yi~råf-Ùìtá»vÍçÉ"×^œÏéVäÕsö{:`­1·â€¬6Ò®'»Áá1Œ]lLé{vjñ™YC§´Õe£¸ü;&JÜ™n×£R«¬å®C-ɾ²IGs§Ì‰Ä·»Ë—§_G>›˜cÇ‹N£Æ½\k;ºô$>ÐƒÕ ×hÉÏšzlõOpæE!a…GÆÕ_ž:ÊPÁÞ‘J=G  ±©*I=™ÑTLÌ[+lé6v[xÙãó5ÏG±î„Ütò$ï%xåìÃJäÒ”s¸ä œn¨v;¡s0äÓgjÎÕ¶Ïh èðH/+b•Y•¶‹D€,‚5~ͺü¯µð÷ü./;‡·ÇèüŽîÞ:×?N +öQÍé{®lv£dáÖÏ´ü÷B8µÙ×áÖT×½ftðqÿŒq¨K°É7ÏípoB>êŸKú><(ÿxžø ÖzŽé}îè„w8ÿ ç+Zâ˜î_*>Å•ÛGë&asjG>yjðc ƼsUs…Éu6E½Ù€ÛÞmÓ›óã™{ðòuÙÈ@•”d¨Ù“,0B¢•£Xðöà: „S–[gÁ£Ä`&ÊqT®UVDwÅÚ7‰õµÕb9l&úËýFV°€Nl:¥¥ýêd'2pæÒ5 »Å?’}(ó¬ŒÂ<ÃvÏðñxÆŠÿ—ù_¾×vxàê>ËÚlÎý·m\GN8ÿœM°ÔžF"TóÜþݼ8‰·9ë…vz“’i¯6bñÌ]Ù«g²öpßF˜pLgg\w¤æC&K ¹×;¸w õ³š0²Ã5Í .¨í¬1ÙÛ8¡ºlÁJËÎî‚È« 2‰ò“ŠgV0áté3WxÅ‚A„†^¦DÚp]oslÍqÚW£Î`Àæ Ñ1TæP:Ã"¢ñdè… #ª1O‘DJf‰˜Bu”L8f²(²) %í4˜ìCÇU)Âf¹¦WŸ9¦eÒÀâذà i ­°™pÁM¦—c4reJ…Ý{"¦U4‚f@‹Ü|&oüŒó®È{|tEª"hܤ%ÐðB¢°évÐÛ$à3¡ Ò"b 9+ ‰*Ã.ùA:l*.mfÙMJ3vU`wX)¬^œ¸eÈ Ãn¹¸›ðwÀÝ3e‚”°Ól8ï›hÝ2•Ü¥ZbYLÂ-T@š„dH&"Dì9ðæ‚ |Ï*öv/õ>w›P|–h½]µLìˤő)»ä5Œï$ŽŸ’m–ÃyW•2@‘}ôƒòT_DÏY&aÞLtsq‡KN÷H0„©1H.×Ä$в… |<)µ=åc,Ö{äKUâZè¹®Ï jœò¦,ƒzvçã¨íÏì=:¾K÷ÿ?¦/ãýcPlt½î[ò Õ‰ùðè—PÐ(µPQJÇÞÒ—ò²Iˆ"M¡°ñýèëæ"mj%JŒßzŠê¥!ScuzØEVÂ(,×û¾ow·EýݸTN¡Ãqó&á(‚™„åa7Ú\ÓfpלrˆÒ…!K4Y&ÝË™nUß;juÔÚŽfkšNÔÏuKUë-~ˆr±{Ais¼8-Cµg³µNŽCsõ¥4½ÖVwâf™UrO Á£Ñ-ïÏ«››•wÄÞq2è±IÖ5½Æåw¾ »ÖØY ‹)˜Y$mhŽ>”žÏ.e½S ÿ/‰¾½ÿîf缊¥Â Lë#\ïšÈŸõ©­Na’ª­·’tûkÀO¡™›ÝÞ#µ/t ûeÐF–YkH”ZŽ6•àþÝ–?—ƒúZÙPðtÝ«Xï¹¶ _ 4Àfö-±·r feêØ}èæak$Û?0 S>ç&zÿ/àujvÞ–†v¥O¼Òkö~5¼,Í=² ¢÷õ4ñ¤“…ÂáççzŸjÖÎñ“±SZæÌlhêÔà-‹ýû¯EÜ=M“²t™M]ÒÈœ‰ÝN&Þò?…Æ†Ž¯iΚ§"­­ tteÃOègk?õ@>R¡ˆö§†t<ß4ø¦Ç2*›°ŽõîÍΉ˜e_"'Gû OwéóRè§œ¤öå–c Ä!g5 moÚïgÖ½ù—¶,U €µD ¨Èù¤g*¦4—ýAÿ/~D¦Žáñdö5x‹IÌ£.ÓÕ/‡ËÕ{*›ÿT;P&8ôf7ÿc¿§·fÒ/M]2Oý;9ã):<«S½eTQSõûë=?iÿ„ûÈ#â0~Ä¡:À`üÔ=E3»…4ÏÙüf>™1ªª«î.•°Øc°ö›Ÿö34Q7 áßÉ(˜[0Ê8¹ì™ê‹'öŠ›Á…ÿ¨"#o—7 ¬ ú$i°tI«œîß §nC®§ 6NüAMŒr!A'rÞ2ñ¢r‘=Áï·ø/røúæ0GZÖz7ö š¯ôê %(/ó?aï—ýÔÏ5 ˆ„ó³®w›mÃÇ‹y£µËæ˜ÌýubŠ ¢’bj!@F ¦½ƒýCF–*ˆ²# 8ô3ÉÉ{û߭FîùÈ&ÇÖþ•DÔ´5T6þk‰Ùå’3sÛʲ(¥ëÖ¨LMï)Q”A•”‹!‘ŸÔþó1¸¶¬F¦TÌYYž¾›²ÙóÞ.W×ô»Ú>GáŸ?­ÜÝΔ6eÔì€'ŠT-‚ž×¹ƒ–6_¼èÆîU0¸| ;°ÐC¶>Ö÷¯þ-÷ÿñÏr9™Ã ¾.Òs .…d€˯ ¥¤S: ÝaÌc?÷ÐmTÔé*Ê$â“™RBH„_ÊPSÁF]é<§NI ôtÐ*{¿ jxß_`§³ÈÃ9cz÷ø——àOŠÎiñû¢Ô’xy?Q}<ÑÚ9ØöÞ·uÿGþm|§±ÆÝ¥àÏHöÿ¿R¹•3ªAUÎxÎtL¼–|qõß2ìÐêçÊ;»Ú!h ª’DZQʾaStãòUÿz.ªÂ]î6QÜz™‰å ´ˆ¨Õa6Œ´ð\ShjŠ+›¾M ö\ŸÒˆbó?,¨á{•¤Nã}aÍ›òÄo¡À¿þn)n ô¨’4eQð#”ÇØXYŸ£´Åæ€BÁ¿!ÜàÒ.Ñ&*rì9Eí‹yg:Ù–õ¶JuC»økþX ’(0î°Õ…â«î¦B!*šLYR艖¢*¥g%Eô#Çlw§eþ“ÿÏ=\œøýR]¹ïªE¶Š"ç+¶%i×™\AÉ"1Âk¬æ\@r ~¹ÁÝ13Ô5†éލÃ3³ÓµDDM*,ñûÇb‰±Íýÿ*Ëg•‡½}€ D2…ó9D¼WMòq>ß~›éû3Û‡çñd0áUD/¨‹6ÐØŠ;w­[CPk…rdôL4}û3€ß¼!`ï™û×µ¿òßÜÔŒ)¨9ßâ2‹A©ý§¾ 4æ­äpȆBÝñ+3A˜w4ˆ,wÕR|ï¨îG§à î'äŸËÃÖÆ vçꦵÿšÌ q(çUÖ™£ÞõHÌ< à’mÌ34>r!ÔP b›ÊY뜉"£B!–W:ÕqKŽûé¸ã¯S—Ñ“ ›Q±ÍÂ|;zG åh}>ˆ|ò¬Ãev À}Ó‡J§773Y9Å é£È¼ƒôÛ,ýŒÿ<¤T]%7§ü)ÿTH úÀFî|x@éòƒìe›'ëB”jýïxh×sÞ‡ûV‚–ÔQFAAS÷IJꛀé;#ðð‡¡‡­~JSàùuñÖf-ðóñýçóCé¨í°"$À(4)ùZ?éýOÝöD|ANôˆQà íôÈ„>1ã Þ‘ŠB;ø–oâ…òÑD^¤qú£"ü׊hà¤I ©Ü‚nÿâ»È»Á`<õ‚Ñ""B(ú߯2T€C͈nB¦•Vyæ‡û,î÷ü~M·¯ôý­OŠÏÅÿµÞÿÓy O>½ ïžm*õcUŠ* •ŠÅ‡JHýôiyfÅýh¾bJJC~öQ °T‡t$vKãúâ²oçI@˜ ’–ã š(ÉüƒÉdþïÎå¸| wŧY2`+†tìu ™°ËÈØÉÈ,c Å?‹ÜD¸vˆ€‘À©´DD6?—¶ÓåNcã8Aaä q!¸ÝÛuV ¤(ÌÁâ~ûÃ^ãú[ÙtÊÙôdm†mªš/±Ñä}\ussb­¸(@°å¹³±½â"THãBx{;ôˆéRû–BKRZ@câ˜ÛNÛb†zi™hŠRh/"Kô¬5&l¨pï´ME»¼Öï9™=§ BŽá„´hÁ“₃qS¦¼l·s­Á÷9‹æ³QÒêq,§%‰ °æUè}ü>zN½å øhˆ˜'žyêP ¢¨¸õÞÕ5÷D¸ÇΛoÝó¥Ùè púþŸx|Sš¡A<8!yLÂ# Ÿ–%D6¡-.,gª´¢ 柳1+‘Â# .]·!aPÌ–C€–RŽ{ÿÊ8pÛ°½ŸÀÓ`ƒõçUïßàÓÝœVQ¿ÇV¾1CÙ𠀯Á‹àxëlg౩áç “ËöÌôÛo“ŠB°Íþ9ø&5C^ðÆziUÏʽòNæ*õêâ¬ù­O5kp-ÙG¹žöšÐ‰ˆÍzT?ñÃ~ø¢A)T@Ô@­1CFØãDKÁžYavÁÈZ¸¸nèU NN‹ËæÒíîík+¾Ñ…¯¶Äoçô1Ÿ÷æ#n\–¬òì Ìãµ®e·ªÎmm3ÐÉècë^ö¬h+ÚØÛýÎ ¸¯²Ì0˜cµ31Ší~ͱ›wߎÌx_±õk[ß×Çy‘²¨t»}È€Š j(!½C'­Ù½b !„€<¥¼V¯ã£Ë­7Ÿ›VnG ¼žn«6:]ƒXþÍyæP¸½°s²åµóˆ¬®Þ\]SC]S[i‰™ˆÍAÞÚëŠÂÞ³1—íÿ_¿³Å30Ã5_—XãÎMVÎ?Õ¯/Ëò·yÞN§~-xŽË:•b­ˆL’y'lyÌŽmÞr¾gEW)I´©÷P³E’oU»•?ïz\'µŽŒìF*¨“Aٳĵ*Nïc´âÇÛ>scf«ã”ÌÌÏyæ?CÊäåßHŸçÙ"E’ ”IéxMú•Õ©ÑzƒÃ¶ï»ÐöŒ¬#"E+ã,‰vo"›Øó;Û1¦7]_MË•žJên¯Rp<·Ìu:<ËÄã‡|N(0ß3ƒ›«‰Äȳ o.QBî¯ihRórŦ¡Çg,“¼ÅèŠ$L”3º5 ÒW(¹f`êqL{S y!œ3Â9Ž@Ü‚.¤´Šÿ¾Óñ.äøc£`ÝZ§£fóèëûÞyæòócœ:ì;VµbR’rì-ßå“÷‡„ΠÞlÒsN<5Ã]ZdA݇VY‰€QX°Ì]$!"­¦6Ëh®w!g9ÅLœ,¬Æ­ñT$D•2jYÃ4paäZi AÓð‡D;Œ^!µÞI.Œ¬8D¶x¬H­lU­u33kLfcŒ]ìÄ’ƒI¦»›3»Y­å噿ð†¥(ÕJ-g%^ÀöXk8¨TL’òõ/¼N^šófQlÛzz,­!ðH´Š¿ªç§«`»8Òú¼§-;›¶û±f23@ Î’I"°†d™"ÛÞæÖ…6¦buå¦dÀEõ" ØæÛbÖPF—}²9u°ª*µ¦‰¨²ti!gcHv„ :d˜H"®…VxFøÆÚ=67³˜¶éhÚ´CÃ’àNb^ˆÌ|((:gC$ÓaZ!¯¤’Yx„=ñubÒØ±¢!+\©qænòå&.R æB®æŒšÈºÖ¡àEÖQ48Ø€¶/TôKÑ5±:ÓĤ]ݳ.aI‰9ͳkXÒڦ̄\€ÆÕœ>ÆC\T7Elñ€Ay@É3(zaµ–„ݧn-ÑQÌ v¥R—ûv­@—Û`™ PˆVþ؈»O}'“R"«©SãÿÕêîówïMö×½¸íÏ}Ÿ]àîÍÝÕô³ž•“À¬ø~—ß¹a_ õ¸×šzt=¿‰bðë uqÕqq9:tû)²¸Í1Û2o~“'*kýžçkzHrj½fî‹“í‚`C¹.M‹÷i3Ýnt=™’d˜ˆ¢ (ª¤¡ªªªªªZ°tΔè¬ãŽìÉ8B-Hõæ*´L/x”øNa $,ä#FA´AtQ.ÓŠ|ÉIâ•”\µ›…ê]ö‡!Þ3¼3¦Ø³¶®æNoJ¶OFÙ}kK«Õ‘WPŽ)ðæö’$ò5cYJÚl¥‡´Ü¢óòqËÿ³}uúXw·ô?G\¤€RBy¬²Nt䔆¤$ËúvUZaY$JÀ)ZÛ†ÕVDDJ×¾­f=çmjd*]˜Ha"²#.H(ö`®§ ¢¨ŠJ³*r& rhI PЍ¶ aŠ$ë±lÚZi ‹[X T‹’Q ¶DMŠ™4‚-"4–`šÍiC3ÉR!Tˆ+%ÉrÆ HÄÉ б!""Œ\TË$©ZDuUdÐQ«)h h+l+(‹DA¶‹¶4±b‰JVÒ¤¬–ÑXÖÁmZ¥°áqÀZc†Ub±å„™TFMTÉKaX«X¥JÊŠ ­´Z%EP´°-¢ÅŒ`«+ DŒ¬ÕªEU‘]YVµªÕd©*PÉ’’©Ê²D2Sâ ¿Òû =¼}W‹™‰íˆOšÃ¶Ø¦f/_ÌùœM “Ÿñl?ðÿ—MŽžœŽt’kVKúvb} ¤<ðŽÖT'ÔÄ•‚,F¬†)TŒ²b¥UX꺡;—žpÇ©©Ú+ '#þkÛ™†Û~šºT¬(@(ÞQ¹ìcŸfÔD’4’HI$’)™\¶Ž–;(äÇ’4³Ò¾üÿCjüž6‰ý½ö±b Óí”7bYv§|-×=¹ó˜E.\žs´ËgÄR•ÖC»ËÿécÈ¿ýý3DÅLJÇx‘Ai†²a¿ïó3.NkQCEÈî"Nû‰ÙÇÚôÙø5ù|ë&Ìl=ÅØ‰Ó­¼š´.½’yiíúºyrJÉDMO'¶ìš®~I?–2õ k‘Ѿí–#U"šûß~ë:Ñ Õj¶--«9Rå`áé÷ßÍ—öß·ùÇ·O.(Ý»®nE>˜¥B$p@…ùhÁ©ãEÁ$:?4ü°á6N—óο8¹Í]HCû~ÏÛµÓêÚônÿµû²ˆuUTü Q4ß×µùÞŸùú¼•d’±ÇàWø|3îþ dóýOÉvCáŠw½îóyÕ >7Ú_ÒÉl¶Í^¤fô±cÕíûè$ýzd¢8ê¿}Z>h$ƒà\¯_ÚOgÓÿÆßäo>⬲ªÕ®I'i«]‚¿4£Má¯íWÌû+·þŠ*ÿ5hÌ’#ÊÕ|‰•‡Id»vá¬ÌFTŽîuo›^+ÛËä²ÇVqïa·›É¦É“ÕÝøñ~´ôªªûzz<}-+A••Ÿ<øN"rÅŒ9òË^º¯%å" ’RÕDDJÍ Ó0¥ÖýkõJ®{ÏDI}²kZ&“ð’æ¶&Ýi5šÑ¹”ôhX;Baª!¥¤ªÃ…’¨÷ ¥˜ é\ê˜@ÐE QNÄÕ n€¢zÂydG˜)8„º&$nÒßÜ6ͨÍÈ?@ÉcŽPȱ°‰rÔ±GøÂI jic£Q'Bã#"®<œH=“ÚŠyGšsÈOPíͳÕ4ÿÉóvÎc¤û…’öóÉÎÒZ–<ûù’úÎñaÔ+/šd£†*ŠÇ3O™]MŒ|n)\Y6aÅ_+N|Í„¹D ¤@h&¾4Qñ˜$’ãhí”ÒO;hì+¢Å+±NãZ_¤ÙÒ'[cŠ–JÒ·v1Í[3ÞÖ9«f”íi;)T¿]Ø®Ôç¼í9¹´íUPä­8°­;tu«fêi£šº–«6;¼D”ÜÒÎ˧³flîlpäêw¹¸œ^lUJ’N·OýeóS%ÎÁNÃySM"*7wž#ÿè‡ÓX†ÔÒ°U0ßݪLÐjª~º?\Q½Wú‡˜<ã#ù;üV1¢C-K$ÂÚ*]gÎì¥]H·4ŽÆma¶”2Úh²]£-’KŒýÞ‹­¶‹BɵŒJR¨ÉZ5÷H¨÷†œô8n]„I˜¨*R´¤>€ÖµÌ†\„’¥-„Ù™†ª¸l.¢&´• Ò¢¬qH+”QUU"–l]†îÅ5B-’DK$Ì’É#¬UÀÃZ²Õ¡ocïŽéxîð=Q¸Æ+ZÆ}ÛUUUUWs™™°Zª´Èb „ˆ ˆ†¤†!ˆ‚¨!)†ˆcvDA´”Rʪª¢¥*Š ‹ä|"š!Ü$>‹è‰ND4gКä$4l9M b$(óáÎ&e“fo BC†ålÓI6b¹4Å9©›N*˜`ø™D¢„)2=€°æ…à,5#ŠpaTÇïm$Yl’§ÌïOÚ}¶;M‘èT䪮ŠÙ[½Ì7iŒW¼ô°áâŒ(ÁhT%aŽÐáë}ýS™Ë…PeŽk9¬C}€°^ï»îûT€òö9e±ìÅàIŒp™—ºRO×hÖ_E°8ĤRMÜZŽu‚E˜vzß"ÆYíû‚¯áß–¡m™{å$ý¦«3g1¡‘ï#’ˆWÄlêò鈜 ÌÃ6˜àÌ÷Ÿh\U÷Øe6¦l›%ÌUUjªª¨¾«Phr~w±çwØô=têð=CÐâU‰Èñ Ãïaˆ<œ«Ø7†œrbAŠ”ŽxÀÇI³«WÞíïÒÎɼ´ÏÎõ_Sf/Í•·ªÂ“/êÎÛ‘¹¼óŽþî ö±GÙýá¬1ºjþªã>γÅàóN6sAaN;c>wyu:ZÜŸµB,›c±Ãtëí®1õY½ð¸ªJøÝ Ñbgc«óUjÊÑË5“ƒ¾Ì—}?jºÎÑ^&ý´Ñ±Î§×ëû·û¿îO¹vmÓP»¸ÏÝë[ǹDãh4+¶ç*•ÚŒí·}*,R;ÇÞ!¸ï¢ÒM.cŒŽŒ½DqSCŠ%”â9Ò³êØ8‘}2¤„ƒê3ãs‡gÄœ^Q} =?Ñ›>{Ð÷^:žmêåï4j:u— Ÿ!ö7ZYœìÞdºŽÖ‡½Š<øÝ­èííÒcßz²c~ƒõ4³bÒƒ7ç×ç€s‘PE-QTª•P®'¼Ñ¥EUSGèyWÏ Øú'{|úÝû•tó‘ù†fÆÆµ+ƒðwXÙö¾þ8ëwC1ðØ{Ú.´¨ãð‰ey ƒ*@RÈ €åN”YødÞÂrø³Ô©Óõe#¨ "‚„9 *ý,Òô³M)—$U¢ŠÂ\!EF’Î/S—«oGû˜žÎ|šŠ¨®l‰®W¯Ppt}Éż–’ªŠ¨•øÄ»@h‡ŠÞq§/_¼âÔxê8…‡ïûX¨œù¤)j­`R@´+T$XËlÆB2BïG¿ièëÀö™y)|ûÕ¯ÅÌêz¡®œºœX+8áf Ì«(²EPH˜ñðÇ.Xÿöþæ>Ÿ›¢Mð: M×ko\îîàÙx« |Ž}_#óvœŽG&0¬gSÞžÞl”Væ?å×Ô×r~ëß¹þœóÉ@#ù?4$Üa‡É!D”¢Q)0Fwº¹õk½×Õ„™åW Mv ÇqÍ# ŠqyçÄñ((à ªYb©†1ŘªµU]œûUÐïmôÜN‡x—È`‘³Ÿë}]K8Ì\…"±k ²1UZi¥)­+B`………#ûDL2‰¡˜hªÆTaS§M4ߺ«JÑÄ88ã8ãvrˆÞIÇMë§KظÙ"׫X£BÕ%Æ‘Ê!È (þü‚Àp苾ˆe…‰H‚b"%Xˆ†";ZÐ:a¢i$ˆ‘¥0(Jj¡(¦&‚Š`¢"""""(?œFA¨kRˆ(‚2¤*X-’9J”J›ÈDÀF"0ÄC " bEpa€•b`€a„b!’QA Ã8Ã4?Í®±v±3 8†ññpñ¿Kj7u–Ç!Ôu]hÔ󦩮ÍEÓ¨Õg†Nƒ‘Ô{T¢å9Â0œÃÿo„ÿoŽ¥«eí¨ï¬$„sRsçê®-Óa ‡Üw[iÝïdê¡GtwFHw,Uqãy›íÒˆ75ÑÝ÷«–¹A33®»7ƒ}ëÞW4¬y‹1þúìöb=LùÏ“Éë·^½mžO…tµÎyÖ˜{îT¿wtÎéÒYÏü¯Ç¨Ö²N瞨N£m°“1ŽRÕ§ooóu³Ü ;½ÚZg,}…:(*UQ&&•*M#‡µüSê(ˆ÷ *‚~ ÃíO‚$ꢈþÇé*èNüÞ'ÞþûC£ Á‘?ˆlèt°ì@Á 1–%µ‚àµ.'÷V4Òª« k¦«JÂ¥Rª©TUŠ¢ª©TU*–•aJ•RUEUTª*ªª•j«$DÉ1$’Ñ$ZTU*¥TUBÕQU*“ITVVŸáhu*lþúZWòF•UUTUn“ö龜)\8YVôªÌ*©§M1²di©X¥UB!ˆ&ˆˆ‘XˆŠ%«UUUJ¥UUU,B""!""(ˆ‰`ˆŠ†!ˆ¨†" "•B ‚b"ˆ€‰JˆB%UVEUTU*ªª•QT¥UIUTU*ª•J¥UURªª)T¢Ô²®ã.mXÙX­ÊÃÆ4¦D D¬BDŒJ‘ÐMà”ÅT¥R…M2DÅ*”©U%”èÝiц)JJADÂH†bR"!–U•E(¦þ/‹ÌD‚C­ëþŽbþŸ†o¬ëúGÈõ"§x…6hD ©Õÿ+£uul™Ku6®´Uu1“Ôt+¦ÝIÏ£Š¥¥£¥UU³Xj™M%Uasõfb|óccˆRÖar€•( Š„b‰n2Aç 0»› í#tO—ËÑdɈ@á¶ÓënÎ\¶lò`I6Ò¶˜•bÂãU+Ê%ÓS~Ó°ð8 ˜nÆ©:Û&g7F%œvß!]0Sg+¸ism嬺9\f Ë,a(ÆRâôÒÜBM,Õ¶ •®3·±ËšØ7“©W¤=OQ ÅlÜ/-övçGn‹HÄ9 ˆzNÉÐî¶1iµ‹0ÌÓ5I$”=K´¡ÓÔ9êæëM 0± J!âÆú!›[Xc BÌ@ï1ƒa…V$¡EÞ.*qUœ”’†Âeµè›µœˆ—”¡ùEæŠ^!+I1-<ï”Á{ßiÓ«  wkË™ª˜˜˜Ni*œ—­'ºk¢$IÈÍj™&‰l½™Ëiw”{¹«3Z0‹^”>®ê^ADEä2LLÊR•÷ ‘wÅã€páüýeúˆd5 1sœ ƒÎõ $T­ê~§¯Åú‡öC»¿˜z&Žô’sqM̲(´ôþ“§Ñø¾>O”œ[mOŽÏȽ0:Ï#¤ ö°2Üöþ庘|=¦UÎô!¸@ÂT¿ZÃʉeUm-†qÑ!4ìª>w!òŽKëG(öS"Wš!1PVOä‘Ý•Së‘ š‚"Ò>Ò}€ Âr™÷pá—+6¼X_zÉÍ ñPQcÉ]Ìóf§†ìnÃàÚuî|´Ó‚¢Ó“ð¦ÉJi’&H”QúˆèÅUl•²V“ Iç>¯—ëÿ}¯“i7&`›²¬ownO¥ê„Gþ]!ýzš²‚MÖAÿÆf$˜úZW»ßöð༠ÿ=PÇ©ýeüoD€qž=U©€NyKƒÚ¨qÓTЬñ 쵞6𕀈¸Qmam l©™›þ9¯¿šT 'æðŦaŽV¨úcü9fˆp<˜Æ1½-ë×mXï$Ûì wÌ„µÁñgš½«~?Í ôÆXÃù1«Á‰ü°÷Ä$@²lXŽWM¼„ü)NÑé¿Ru”€dFwÚ_»Ë{¿8å6SŽ; q‡€3IàG††9ÚÎŒ"†š¡¡S‚‚ óˆ'ãz»±ö=¹«íèüï´»GÀƒèFsÓ…i•6UQQ6A⟖@èNí¼•´jÓžô,~j¡7%ÔÞ†b¾;A?'‘"%Øíßäáš8(ÒªB÷½å´EV1T_´†G0ŒÌ­b cÕòÎãTÏ2ÊS# †ˆàÍ8("<%jÞC¼N Âaõ6„H† [}¹î’s:=~ÿF½'£àiöË#ó ÝWñu8DÝâø" ˆ€gdË´ìºÏ·¤áVuÌÞ­p0´ØxñT§ô=¯søò/õë$IŒ4fbÌâ¬ÓR0ÆD“盘Ržç%^v|êÅl®&Œ‡ùÒ¸'#¯SØâÆ1U†1¶ÝS«ªtiÖþ*FÊþšZS[º§ÁdOÂÀQ;É Ëüþ€c@yÒ&1,$hQWî wƒ¿#ºDïdX!  ¡YhJ€ d. DÖ9–c•X€[G¾ø_/ŽÝ|œ{œ_å§Ìûϰý6&/ð%M°ÀÜth<'ËááûàN3ÛæAGí$h)D ZA}xþly’~Ç[›»»ãf•µv¬$ Ìh¤@Éf<ù~…¨2J÷Y•"êÏÙÃ#ÝÙ*ð%!ÇÖÐh‡QˆSêÊî•$&Š"H¤Z…ÛvíR=Yz‘;–η(wÝyž_'õM¼<µE8ôB¶AJŒtèž•…TC¯]|ú|,ÍhmÃë Ç‹Ž$š7Iži]¤ÑÀ=Sî¯ôÐ5½Ê«Àq´!¶²Ù óÛ΂=\ŒØ]Ü+¹g¶i=£=T]wJö~s½´^î]Bð*ê• ˜vÙË´¬o:NîôKEtˆûBy>Y€–ÊZ4ÏT&ý¦Op$ù§h~©òÒHüóûÒOÏ?~çycø"árárÅŒ9rI 0[Œ9D”QAråË…4fGÈ# œÊ¥ JQ(CGaÆ'š"Ã5AKDè£ã# Þj¢Ê€ñ;Ttji­ÕIcCæ‘ ¶FÔ ÞÝÙà¦vÿJ8º§Tî…ž8dGŒ ò0 ®:UçË«JÁSañAœå|ÖÞî6µ}›\’[§p̵#™œˆª„¬‡Ö¥¸S3¦ÕmÓ´B µ¬•Öe›Õù9ï>ÿ HC« ýì›6X¸Ñ­NJùÁÐù‡Hˆ‰ªÀèCÊÁÖëuzÞí»jª¾ìIŽå}„¯ÐÛVÊŸ,Iâr‚ dNÂqzŸa‰þk´ÿ¾íóB¤OT‰–ft‡ Y6¨V·µ/aÏáÇaqâêìPZ7Cçx«ï¼Øò0¢y‰ï4›1õÓz˜›?cñ928¬›Ö,9)JS$™W50§6JN¦î ÛjnaK&²«âÔö8¸¸#t°°ÿ ÷ú/½ýB^Ž?!ùç¿æk²‚yÑ@”¨‰ÝÁ’‘jCu•ð{oÄùŠø·Ô~ƒƒ·ôêþ†ýYz‰á¤~Úi=˜Ns?ÆÝ¸û¬“ØåË&ÈT&þà²M$4¯„ÙX<»™KþUWLžþàc–Åüggƒ×8ñ\'|e>! w‚…I FoB…=Íõ©¾ÒmÈÚ;× B™]8ÎǨۄ!²* ÚN v‹¿¢Ý¸Ul³*«oà6R9Ú4¤SpQH¸ ‰9…¼AhmCy0f| =ÑCV"NÃí¹Ÿ‘dá7¡m©Ö…vŸÍüßÕ„œÑÇïÈ—Ÿ‹“ :n€ù£Õ¡ âôn;ç'ÞÊžñs}ŸðÑù´£“E‡®?cpØ: †Fõ“‚)Ë94ª•'ø{ÉÑ·ÇTèN¶™w›‹ðËõC‰ÃÍ0z D ò@ÿ}ÝùÃ9J‹ñJ§ph™jñUYÃÅFP€€EÑ&o'%Å¥þFHµ°‰¨ˆ âÝM‘ÁlxR€y‡Dë÷è‰ Fe½Gàÿjj mÛ330;¸Oã¯Ä bFê^õU3ô‡N£4:0–Ò(Èi?äžÛ;ß,“ÆIùÉ䎣¨úÉîuÈÙ³é™á0Fh¥%'Á5 ™ML3¶zá2¦ãa±¤÷âú¯§G«Õ³¼î*âqãC¤CàN¾Ï€YòXšaQ_¶77ülšÿ|p‘¡÷e˜FÓ—,*Îi÷©#œêI#× ¦;qæói÷Þ©…N]4þ¼úæez’ö1‹ö>ƦÈzŠƒ¶x»Øl›^-gåtvÝlÛ½`;°ûÒA|¯KØ$U=/Ùæ?ÆllF È 9@ýÄÁpe-EÊFJ&v÷*§u'Šó0\Á“ü!5kªàH2¤Iò¿]Gà?!*÷Ò½g9:R/âϑԡ~¯Á« tË‘P†š„`‰î=냄BÐÕÔ¢ÛªÌተÕL•3êòPàtM"ÀrÿÞw=Ññ|zAD±*ÄR *”L*HE)MG•e’MbeTP­"ÒÆbR FNC)MÍÝ0þú\}ÿ<^ax”w Z¶dâh~éd}·'û±´î:³½pœû›O©Í²i‹Œ§¾Äi£ oUXÓ&«.ó‡¹%¾d³¼:ÓlÄY>?¦l{=Ù?¾:¾?ÕþÎÕÅ¿þÇð­¯Ç»<¯ä»Óä«Ý‘ÛRjÄñ †×¢Â%;‚®`ù)æ³ º7¥ . eLíà:¿êõÜßÞqÿÔ+ežjˆžçÿV85ÊJ>,?ðŸU0„t²äX¹ŽÆ¿hL‰ý@ï€ÜÕ ÊLør{Rbu»iæ©ÿÌ„ „r˜”¡ûË”JPÍúVkÓ¿Q(×ZÇ4Kˆˆ  Q>ðà’‰ –ñCû7¼wÝêˆ÷û[©U§èÏÕGS âÿ'êôªIp>R@…(K @0@,HÄ%) Â1 ¨D@!Á Ä ÂÈ¢TDBC Ä B’C%Z¦I"«ÐÌÄó=3“ùääÃePê ˆD¥+@`¤Â“ã˜K3Ëì¤QAWýk!©ôpÒ@à@A 𪹵†T¦C´Æ(wCcpý'Q¼ÔC JSõäÍpK<Óèç*‰–>Ý€—‹ú¾ž¼#àuýw~Š[•}41ê~¨n31R+·ÁΈV¶?æãJáŠö¢j^°·9y¼W” ÊE^mª°A`r4­#e ®ÄøjŸïÀ zÿº«ÞÿŽp¨ös‰¢%áª:£ÍÁC’žLž!ÒÛ>ª~ ­;6åäùÓùç._õÓ–¯¯ïą́­E¡Þ‰¡ã€žËƒî©îŒW-àJ`ʈ¯éA¦Šˆ‚ ¨ˆ s½ùèïbmX<_¸þ ã_ʧãtþòÖÛ¿QÉRƒò˜_" A>‹)üƒ[kr)O¥=c¯ˆOõ{ÌídKN§ýƒÇ’?Ëâõ:¡Öêô’yèûUîÍÿuÿÏZ©>CÏ> ë‡hO]_úá‰ßÁþô§Ã̉T )UR©Cé’ºøLYC;T©höþ&R ž*­æ‡&Ï~²èku">çI!QÜX‹éÔäcÅ™¡ƒ(ÿÈþÁ\ôT†Û"”D7HÄF¤÷frÌ ‘ã{ß•¾Tò÷ᩜõn¤\Ý0µfü6ëˆ}TËå|G~‰èŸ {\ü²×&LÆ Š(²Ò•…DYJÊŠˆªU/Â8í%å5ñj&öÿŒ,¥fDK3@Q+Vðg§ÛW·†Õ„;îneÇ©ÿÄOtœ$Dݤ«÷NŠÀ ¢`ÃÚbs…þMä~‚'D7É CA$ˆ‹¿ÁìîÐdÈê+ÜÝØpÑS<‚Ìû~GÁ·}ʱ2DG^8–&dî¯t^=UÞ—¢7M7BÀ8Óðòyüi¥Yb˜?Ì;guñ>!Þ-,,ÆÊnã J¿«Ø9ÇËW¬ŸÆ~b~¢Œ®ü0ê)Jÿ*Tª¢¡ˆT83ð_ö6lâÄsnŒJ›'ù?óÿ7ógîi`D¹á‹Í ËøDO\®ŸâÄl|ÕDÛ_¢¨85•dÛ³ˆìæ_pÓÅZñwE†õ²wäA¦Èˆó™GP„ü_}þ/òhØïG”d“žäÓOóõÐNĨï…`_û§W3Ïχšòô’rU¤݉?ÝŒIú?¸ûCŠbª¹¯Ð•ÔHÑ1©L̳ó³EQ ¥Qd0Ûη¾üê›ZÌä7ç%"8L5‚è ¡ì‚RŸ)AHç¿üÓ§ENâãaejfý†3®¢R œLÆ„ú.! Za™—9Dr¡êmQV£`ciH‘²¢M’-øuõ³ÒЛ~'÷®Ù[^ûÞ|H¤ˆò±˜ÇÔ³ÕÝÿ‹~ÔŸ¸¢ÏKþsï§]n\~Ÿ“~-ü¡ÍcwrµÕô¾Ç‡±âTbß*be±Cg—ÔÛ}Cà>\ ¿ÑNœ¥³øSQø*P‹ÿBÍððúx«×ä(ù*­G‚ÐèÞaò³NWñYºÌWÞµ7Ã0)›é ŠÑɸ¬-ؽ•!èoÅèvöQ&Žõ‘7ßÏþe+ §$UQ‘—õý»y[ tòï0ë\!±=«²ªe¹¤O÷·Û}¼Ä?F}ù$GסŠBñâO·Ë©ÿ¦|¡W{ÙçÀ”T?Uáøçwý wÕ4L ¹2o`3”rÃ"' º!¢®ñíù êŸ_â%b~ÔóøSøþµ«”=Ö¹õWš+³Žÿ£õ>;ýÊîÇÖµj×¢TE~Šg¢nÆWõœˆ¨dK_°ä˜«(‚ï‡Gg8¬Ÿ¨‰áu"v·¨ïïXb/CèÅA›ße<_~÷ Iõx¿àMe‡.~îwÎ/‡‹ó«Ü¦…=߈Πk’ž‘èÿ8gó¨ËÍ‹åŸ+øþ_ʆo¨¨I›J–ê.¥ß™Mþþ¸“N{úO¥QþvŠ,7í@Ïè zÞ¶ŸçiOIñ:·»gÜÅDÿjµþ¦(é…¯ëgÁéH1ñ¡ˆu—Ff.HÎýøÃ=ý\ídúšf§òô6d?úý÷&ä¿ IÜ‘ÞæÙØÇê‰Òç½{!£¼ß$=t " EùлÞD9e:ݽ½·{&þOÈì«¿oæsuyþï±Zϟ潚øçüýbðRÑŠã¢|—Ñ QîÙQþ}﯌ÝÑç˜|]Ú~ÞçʈxÈäÛTTIAÔ‹ìüÈ‘ m.G ªº+F÷€­Ÿ—¸ð<>ØMd9GãÌ´»(œPù>¸†_"gFާ:‘ßb« Í}ìNТG¢ ‘I"ªW$å4ÒÊ¥R½ˆÔáæræ½ý¹Œb«Œkí:‰†^/')ù›'ý-Ð.2=¦8s_â|wgwfÉ‹„U9²4!Á"ÖJ ;*ª’‰;"âó[mî¦k®¤]øá‘tÉÔ†Àþê@þ”P)ä®}³í§»¥)D Mžû1_H ŠßÛç ^´g Ë‚ëA¨©mc<"@ÀDœ.=ÇEOùƒÔSkឬHÿ2D0 ‚Ì$*A¥Kl”©a•l’ß1ÿ¤¨=|ÜæBñÇhWû«Ä ™U¾ÿñû¤Ýó“ÒQå;³ÞÂ|7þJ#Š^6‚Íè¿á0墑ô™?à¶ß¼ŠCJa,Ñú#çMèXëÓ\žKB²•ŹÎ,˜4½Œ‡/ÛãÙÿ ²Áç".¨<`N)7L)ÍUýª•)6Jª0U8ƒÁß 'ÐÞr~mŸ¡<[öü©òbZi*Œ •M¡&>šÇâºÀ¿ ¿ÉYý#¦Mnpª­rbÒ–¯%å4”eQšnš„óŒ\¥,T÷‹V¯üUJ³JNጳ¸*³fï;ïžãE~iïsóI0ôÄû¿ÿwý^ÌWý‡ïÿQ?îÍxOäGæ~S›# S1 „¡!$TDÔI4I>hMýLaêŒ0ý Ûžƒ…tÞ²‹†ÁÓù}zºßÉ}÷Ù½éížDéÿ(œQî9O¿›îóQQRaAFC̔ѨL3Xª©Ýøg÷ï܉@—×€†i’Uw­ø½çOdž_ù¬ŽPz-UDrõÓ~ß±ð´ûF0fb@ô}\l?ü):ÿ¬Ã¯WßoTë.þ§WÜqÄxù‡{=Ljg_œ†ôžïêõkóNP~—ÍÒw?ks0IŽ`(W l‹ùò´_$ƒÇ–¤È^)&<™V/…žUvkùºÎ:=[ø­k _YE}K«;%ê8Û QÇ^I³Ê<îo#dõn®½YÈ´Ýa?ñŠÒ>‹•mCZ³-t•œëAr{oµ†Màzp8Ó…~ªé¥üYo£ÛãÈ£¹3hˆAyLÜ,CK 'Ìlj$õ±_zµY”‰*ÙqUi™b*d´ƒxuÌ tóøæxðNl¼xi qdö_Õþr¹\é˜ó®š9ç»§»å¼Ê?ì¸waÉIÜÙxF›ÊàøDwT5›³•ôš;jú˜òÛ}žë¢gô=qsU[9¨±<ÉöäüçAŽÀàLªš,ÜžØô|üÄLÔQ #þòÏ7èšw ȱn>?§4c‡çf \vÈž’rÔiö¡¡NãážÞ=8<¨M”tÿ§zù³±$™Ôö%¡Ç!ý³æa úlÔÒD?xߤ8*(ŸßDG¾ûûùüHïCîÂþÞ÷o~€|‹_\Z8Åøyˆ¢r¬Je†~àc“„EødØZ¬k®¿Îˆ^N#óîçâ³è ¡Ïs¡¥OóíFaeJ&fḣšw îBMvÄ8§ ·½ñ?ÒáÏü”5>ŠGç°¢;[|½ï«Àø¶þpª=®eý“Ì Í´&bacŠ¿è@¡•ìb£ü‹í~³ä^”ŸOlúxVz[ÞCA•ÎÎ¥"ÉÖ¢+<”­¾täW¥ˆV-˜VU÷¾†ÍTqŸg‰ÂòÅaî"*+[äýù›lL8]yœ.û̆Ø:­Œ Ê{ᨘ©D ¬ZþÿË<»ê1rDôW$¹ày;ÐÓ×ïãqåï´î‡}ñ‹‹Ø‰mØ*è¹­|—ÓÉ=§É9÷-ÒdöÞ{Q7eaÿq8°ã¢ÿ5Ì Ÿç%9:p?Y¤¯W#1Ëáh$ÏHã@lÜËÑà½Ã¾í'ŽðÙª(ª©•âÇ*̳âá§ó@G½ý²íyð}ˆ…ña"™Ï;}¶z¾]ŠqNžQøNñE¿Ë4¿âæEÖúÕcTðö¬Ús|àØÖ÷jÉ݉.å²E·W›ÿ‹}燫|V[‚J<ÜÆÚjcãÆÐµ£“7ü e3aÄ©æ¸Uªfö™ÚH“‚$óÕShŸ=ç—·9:FÛhP·Ÿô¿bßÑðü„çš­/Šºñˆ…l¯M•ªè»dÐ6³j¡:C—R¯R³úW¥WƹÊÄJÈäewñÉkÈ"fÄ­=švœÎÁß®‘Ùížoh¹T`½øâ¢¨šVœ,¼KÌá,•xœ‹/Xœß*_'"3y3QsWö{ú¸üü¿ 'ãýD?¬°ûÌÙë¿Ù‘êûS ÍýÅØSdûøîÔ;¼¸úàŧíƒìûwcXóI{ ®ŒpŸcgü#}¾Âo9 Ÿ‘§ü½-uô—Æ<ò·Ø.X¸i¬îcSˆb­„[°²mm8ÊSã©ÇÜjü¼Ùy db†«¼Ä'ëoøOš÷Cì­¢Xƒ¹p‡º³rÞe,n½hðW³—¾©»¦q¥U¿'j–¥¦OXúL!ÿŸ´o†ÿ¹úsêÕú¥T‰R¶¶¸”5?­$T7àæ Å0< TTüÆ=oößÛÿ&ïãZÏ¢:ÿ„ÚêÙÏr9C¨È¬"×gøFRu²e¨Gÿ«É, />ªNòô;èT¼*Z݃úï…ú'@¨DKüX?½”äxP©þÔÿBœõ2ÑàŸÌhR®ý¾+»ÝÞ¾Õæ1UuÕÑ~˜ÿf¨†xaUaZé0Ííb!3Í\‰$O%‡šYxlg™ó:‘ysÈpè¯|/Š>[圯B48Gýkûþ“v³]XY`jhD¢ÊåYÁ3ÏT'5¸,¼ÐR¬°yMë¡Gø’UÌö `¤‡0ÆÈˆš}_ýQPû¡~/ý_ ¢b ädð ÜkM¥oŸû¾ãðj);’òF‰ýN¶¶û˜Wú“åˆu@ï÷Ì]ˆEàÞ9»£"M=ѶhkJ+“€á8ùéì ú/fzã‹ìÂîÃVTBª"e$ƒýlb$$‘ü¿¥G[ä²oú¡“ôäu òk¿fÃ)·D) ©äÎT¿*§(ÿÈ›âÃ$ ¨z„@tuI¢R!"Ÿ+XÆÄž@Ñí@pãþ‰ü¶6’}ƒ‡Ý‚D'ÁS0M`•û¡ÕB ”² X þcØòÄü›¾™,îOy9ž3úT‚x•6LVb•O,Wµ=å“ÊÏûÏúL6SÏËTUD¨%¯JiÏäøÛðô»H¤ÿfWjpdÿê89µê^¥}£dI$Ùÿ]ÁŽâ•9,óI7lÃöž)æNÄ‘¼¨èþe ©h¶),ja+iÚìp`©Sé©%USá\®rÃÁñ%NfçJ+áù,¿`²Yg×ÿc­ÍKSâFuV“ØÀÅOšy™ å‹&Êž$Óš>^ÍAêy+w¢Zæ÷˜˜£=iV§[i¶¤zf nÃ©Šæ¦ÍØÚU”T³ƒMÜÇZx8›Îd• ÚÔoÑÍÆq1Å4V™ pcžåæÇ6Ì,8†œx“H•ÕÏȳ›ÿ|ä;Nh§Ã§b;M˜•*ŽSŠýyІHVßßv&§’Èw8±4©÷¿ì1ñIŽÕoìc‹Á7ð”ó¼qX¸®³ï1lUSK‚´ÆšÈ’0%°@‹ÄKˆua"X†•v4É"¾»¢?î)θ2Áêj'a<•Vú«#ŠyLuJª‘ÌÉ$ï}´©S×Õ8wo‹ßp:œ7>²²%à dBÄ‘"ŒRB)©N sÁê…#Rc$í‰þÒdF—ÔæïÔ½ìªì<ʇžTñTyöÄU1R|J5Uw>cÁ³æCÚ|)²²SèiÔü¹»¼è²m=Oiè‘”zä§Þu¶T®·S«u’½8aH¯1Y?™F-[UÊÌ»LuHÙÔÑð¤ùŠð¬©UVªÊ,,Ë$Î5bSñ>DN†ñU'‰L})’prPúê¾ó¦4øØ|Çj`zkwœô”Ãe·1ÐèßO(›F¢sPãl^«oL‹U2.í˜Ù[·) hA6ÄܬŒ­Ú Jݳ+­†8ªDdp®‰ÑUMDä¸ÙÍÁ“LRÒ°Å8ŸCе*K»¬§ ÅeJû^ŸoA໣i*ÁQèOäN·Z&ïôUô8!nzÞ´¯Äüb§.õœj=þ]‹*úTþîîé2}6=‡ª`9,ªŒwc Ë#&û±¬0Ün7`aÆ~Ùî•þÈçÚí“é”ü˜TöT<¯qùaüŒŒ€¬ÛÖw·zx GÁ¾a8 &ê_ T‰DôßîHÃá‡ã/α®"MÕ2"(2"x§ˆb+¬Ûå^[zG|$WÞà'Ê =ÇŸ ž²†‘òÈõŒ%؆¡ŠŸŠ¦©«j6Jz_Q„÷J¬néÜÂCþozNôšwjI;‰9!´éݪ*´Íš)+QÚqWöÿñûpœ 9ªªR+„ŠÅY!…;:×ÃvêמÙ÷eQ\k“öÛ6;L“î¶óøì‘ùK<ÎÐþþ«ô•,~­8Gkáñ6²xžy$ÔòzÞ„‰+­$ˆÃJwI³¬âéBršpÂ^˜öÇ ôOõ¾)ï¶õ| Dɤ‰¨Œ®¯µðº u¾4Ws¼É’HîäA6TD@üÉ¿ê÷}ÏWµâï~Ǜnj7ìѵâþõsŸ$ò ÿ¿'×aä>ãt˜h«#´?¢QT©JT¥ 1?m¼dEŸ^œYûZd•­ØÖ%L1ÿÈxм>Do9Qå 1%þXPAƒ<¶X+F!K7cï*·¦Ã]‚êûŸªöÿfoïØ`ý[ï!ýâ~öãJWñì7²I8¾×——‹Ä§¼ŒF@´“þ«s}11ú¬j¶cŠª°Og¼âzÎ †#dWû?ëï>+Ïã;Ó©ÎQ9a{âF$첤;˜NæØ²7PeªŸª¦Aúªx±zäàÇYf‘†±J ³C4h¡¨1 ("DÚ2M­¦µjîY1f‰EÂ…*°ÿà>oÖp›•Äëu¿X®¡¼ƒ©Q&;!öìì½é)Ë”‘²Ê²N¦9êETNG9x•G±éúNRÇss4Ô˜±¥%º9«1 c­Þì*R•*…T}wdŸÞ@¯B7y÷›4ïn™ìÕ‘8*lŠÅbJÚÈÒ¦ßØÿäiÂAF7sÞô¶7;ø<Òbxê8w“rqpÌäàáAóá’•Ã‹ÎØ<_—ƒ¤£ecÚÐGÖü¿¼nÄâì2bi½Ö­²òDƒ¨è©À(ÒªN¹ Šÿ ï}dúéR©Bª¡‚""‚"!ˆ‰Tó‡?Aô*S4÷7I³rªÕéÕ0*B)CA)ÒK"Š I%RE¶Íœ\ ×";$‘§šœÉ í‡)œ‰ÞÙ×*¢Ç$œÝÚŽ´\§iñ°ÙZW¾ö¤\MU¤®IŠØ{í9*ql•>9¦ž§ÆÓ‚‰²ÈÅKaŠp®ŠÅO´U*¥C-µÔ’Çð+HÞIƒ 8Í4³´úX}-2Fê’Ô«’YȬ;˜œQÉ%IÐæD6n`v'îÉ鑲úT¦&ʪ³£ •«_JʵCaTKIð䯨Íòi)XÂ1RMÙ‰JJ²WýÝ©Øv¦7*¶fAÍ!Æ‘>g„ŽÇ'i<ÍI´Ý’íÇø¿ùÇè×ÒwðñDHo„DþA3ßËÞüUSîB,N+~°ÐÎï½H‡Þ²-$àô¯ÖL’°Â½Ù0þ¢â­Z»×À§msc'4 ‚C† Æ$pKІ¤ÒÐHÈÁMPi¢cSÓei£$”V¿!³$‘õ72ÃJ¦œa¥890ÔªL$„VŒ8•A ±C,7pÇh«&+fÒ´ö²ØËaaºäSzÈÙŒb¦,Æ4Æ%V¡‹ÅL N ® IXš,!JBÍùÜ4SgBE%…R­›–a[+ SéV‰!¬"à›¢ ÁE‚F4ëÕéà ð–c¸`òȳ‹S‹L‰HJm#%å1nÄÔ_C ¯ÛÈü(¥)S>ÇC†UQ©ÑA30µK"tâ‘Éb,‡“ˆã'œQA1D Ó*I#Ð:ny°Æ¬“r*œøV ˆ„]âàˆ‰DPLAÅ1#C„TT“ %‘Æ0PIÿàÜÜ”•ñaCù»æðT}Nf óHÛê?ÀÆë<ðYõ>îN dûÄJüm1ÁŠØx76o5uÓñ¾grª”R¥JUUW+b<òX1‰˜ÇÝŸuFD–{°i JŠŽ³gkÙËkQÞx;ÚOc’Í1^µšRÚঈ&ØQ)ˆŽa$—DÌ8R¬œ±ˆª›£iW‹ƒOCdäïvSàwM0Ñ;’[ÉÔ²$”èÆ']%R$ D)P ”iR!"xÂ,B¥$y¤‘R lìE~G§ãsnïX,±Š“¸•âi‹cGƒ<ün#dÊ%¶Ûj"ÑeˆªVÞ/'±º´Ó& "²Åbša³FÍœ¦Í8•ŽvN²âɹg¦)žâÈìRC–Îóšh©øÛ=)Á²»#93ªS•.ÕkÎõCeìr‡íÝOrºõÑUúíI5™\çì#ÎêxW…wûí<êqWTÌ`´‰%ŒåX¢×5ËKMJT˜‘ÞôÄ™†ñ7CrÖkSpªœ¦h„ÁPÉ)Xrêo.Z~á#ÈjÍP¸$‚I@llzæåŒ`†ÄÂ0 ææÒElÙ¹[)F¦RW3‹v›¤J&Æc,•«B²À¢8),Mìkd+µ,K6ÿél 7aµ4GS©¦’l£¤ª"b' ,ª”hÜbl#0›aƒ¤±HÐ\¦Ô¨¶±#,suíÒÄA¸Où¹ÄûYØŽò£ÉŠk#Þ÷kÐ9ˆˆˆˆ„;ÀóCÓè>Ëò;bJD-¶>¯•èÿ¼ëOÐV;^w¹öŸ·b¹´ŸMc)Úû®MIþ9Áð*Kü¥L6qÿI>V1*i³ßQ­øš=!î²OΑú2úÑð«ÅJ© HÃiÉØïn1“ÂOñv \"G2=ÁȲE–­‰BFª €‚B €‚""X""H"Eb9¹Ä©+ Ò#R½ +M1¤Ó°¨<• ÓgTÞJ¨ª›*I¥R¥TRË<œ[ìÚMŸ’9»Îrñuý_nx®HÔ°!tѾÁ¹FIú83nÖ³².W¡¨Ð µ0kŽP‹;›`Ã…‰î g9èSp82Mƒ•æ²³Ë<ð¡Ä;Þ2HçŽAöØ¢ZÁœM 62XØ2X Ð’I´¸:̄ИråÈ7.á„NÒIc(‚À†vn#ƒä‚F Æ ws€Ø†ŒC2”ÍhS´”Кäìíct•,‚rg#N}ŸÏ]Èå*E•itr4`éT¥w£OKª`ì9GWêOŸ•³Ä~CšOt{"¾hÑ•ÙsMg¶ýSûžã‘Þ9$Ÿmíb*Q%U‘N°wä$Á„EQUUU†U­šTª©U¡¤©DJ’¥,@XŠˆ`€†%QH€€ˆeE ¥UUd¤µj)Q e**Â*¤J…YiV "V”’‚–ˆ–„!0€†bUV"h•AEHQVD«¬Uƒw“éÓy8) vJ²œM> ñiè÷߬È0ï®g~hç/Þ&€œƒ{–L)¢<$D‘ˆÆYnÈ[ŽE­€åÚèsº}.¼i$ŽóÅVý.ELw76Iöš‘ú§ŽÃD¤UcI‰SOkð0šWê|ž­ª{êùÕòl¨\"£ÖÊ–ì 8œ|â1ºq‡¨^xÄÂ*~óþMH ø‡ÌŸ:u:þìvý^#í æ† qphš‘*´ÄŒª©m±b%A‹ Ñ…b©Øê’uÑa)l¶X¶Ê]ãßy'»ï½ç¾Ùº¸zžLi£ßXËo­bæAͲœÞ†Ê“L4<1òš“§D´–¹¸« m³dÃÉUÚàðm­†3×P1a$ð‘ÞÃãjÇÈ«æ¯XÑU˜ò«¢ÀÄ”IÔ„PC¼ë::#O„uêæï²ÝÖU•w,1îcIb4HÝê)TéÊlañË‹T²´Ã"ÊÆ2£¼ÅGc "„H"Ûv-i™7917JŒ$BKDL1U[VÚ1†4‡D¤ØpC&Äá ž*O¸ë )_qÀšˆµRʨö)%SÏYE1bdв¡V7·$HÓU^„ëá»J“N§c*•*LIX*,…MGZ=3½ÿ1ýooý>]I6>»Ÿ…þv†±|GŠN]4èD ±ŒO|êu9$mìï}wÉÖ|M˜ÝÙ–×,¶©Æ»žM•epcbÍMµŒOŠÌjÑY"ÔãyÝÚ9´†õEt1½~'FíÛ±›˜œŠ'&ñ¶èæçÅ›pá³: ÞG2M–G%mnC £1¢°,‘V–ÚJ¤˜Á .,cY%PÜq7pŽ‹UR”²‰d¥zÄÚEuHøÔÝÍ:Ä&švD’1…uL9òRϬû]9Â|‘Ê}÷ƒ¹TS¦й"€½(T˜nÕ%cyÒéÛ< ƒÇ'¸ø>ïuDÓDAH•NËôÁÚ9ByLé3º<2cLl­ÖO:Õ*¶lþ¤šž 5áY<Ó¤U(òU²D¢TÓ¨Ýï~ÁvcVÊbÈ0„'45<ç‰f³"1D\vд°`s‘ȰH¥1 „A0ÆJÊ*L—DB0`Í‚šŒŽ@ ƒˆÀ‚ãÜÐ|ŽE㒹Avµв&qA¤¿ÈêJ,A% WØv±‹s°‡5(sBG 4V à#278XØØÜØlbã·ÂŽóÅ ÀiëÚm+­ÅIå4ŸÃi6'àhlŠÎ¶NL;j銲±”OLJŽíˆNg•¡¿¦fÂ(,"ðCˆcæV6œ² ÁÂQ]Ý]^¯|OÙêþô=ê|5 ¤Ô¥dD=¿åH¬~ש/¯rÊOò{<“ßé( ãh·³‘¸Ùc‚»Ý ²–Õu:0@wÿäÈÜ|‘…~BÇõk½ÅIau»àsJ©wÑ?*Õ¡¦ç9¶”6zü.ípôg±T–äC}Bœòx}Ù‹…ý.pã·´{íoìæu¡åoÊ~âÿ)Â^h õ£+eVÌ%÷÷Ó´Ùï—pu”Âï_UÿŽˆ]ï·*k/q+¥C¯x°¢±çh«Ó°Ý­‡Ê¤®œi˜n¾~R¯ÇèûÿÛoP°7× ™ÌAÀËÑÞ@9wð!ýŸr§ ›ËEOÓüåCà- ‚ŸŒpÍ?™ØíuþYØŠ(¦KÀìv67ý#ßžc»xoT¬#óePV•• éY**þ¡éâðW;ÿ_ÏÏSˆëÚN ñ’d‹8r!ðdÅQ\œTFv1 ­b¢ZCCMäaÿ2FRÔy´ÁIV"•%Hª/Ü8¿üIÇR¿Ìs^P öV!÷ç|mÅ':‘Í ÄBAíŸåéù>Ç8u@Ã2>ªŒ¯’{ï™Ô4þ4‚GyD‰³õ•´«HÁ¹‡±ò~€1§neºÈ'q \¤Þh?ƒbCDqš8ÿžwÀSÁq™­TBD 9Ÿ»l(Z¬1㊈g €@YêÈ­0Ʋ#Éî¡Ôó ‡b†Ñ©*)ѳ“M•P²´câF$“ZzTè¯?Sã—cG#£±½L¤²¹#Ê‘f–™âTi7ÿz¿mØèæ±6æ›Ô˜R|¿æÉTÄ{lHjAÒ†àñ ÚÍ …Ò®¡1„ß©áóÃ_Þÿêô?¡/Ró¤ú¾ðàZß “åcÑ@OIP¤Q?EË QÉP~$9HÄ$jUòØ?KN€\5ª<A·A¸Ý?Áï?^PHúÀ@¦¢_$ròÅ é’¾#ä(ŒHž1›º'Å·F¡1‹!ûý`¢ 4 %UU ïùùY»Azªk<ˆ2 ™ì!õ <× #ÕxônD{ß ëÂôï0¤÷¨•Àëœâ$3 ª*ŠªU*K ¥Q?¸ü6‰±ûÇôO ªŸÒWS…uªªqGcr¡ÁÖp?š>Ê'íÊý$GSw(W7é6MÑÖ™ÿjIíÉ#×;¯:S·Œã&añrÇpk‹îG\|?3´' ù$(ÅIRNG þ³­ÍïçéHƒ¹²kuÞ²Ãp:­18CÓlñÞOí{Óâ) ˆˆˆëO’(òUEpØ7ˆ½.fè: ŽQ‘ÿ8´$ó¿<Óד^(rî ày|nÐíË ãgìÐãRB8Dj|áÛÂÂP ˆ§,/Ü>Ùõ)fGÒa³]ÜÁ˜"1Q9¬ ‚ l$Ù³hÙFɳ¥7T|Mž}Ÿþoˆ$"Vq( PÒ^‡\Õy\g½9 ‰ +`‰ÌîùMEŠ/íRŸ-“†û%¤)¤ß*ˆ•(([íæ"ÌHm’Oà²*HCçÿ˜G®GÕÙïÖ¸ÁΗÏ÷±Ô\¯ªÌ¨¿B BE•¡&l{còèž)ÇNMæ½ Û×¶õ:”ÌTB[lʈˆŽÌ¡¢¡ž¶a¯Êècë™åV:ü=s°ÖÚŽ©c>ÙíZ.SÎÿ¤î¼ŠýîuÞk»Ðþ¿ôWUU£³õrýz¼jîÀº&òçé Ù@í³‹œ_~ã×Õkq9FÂÈyÌ“BU–ÒœºÄyóÒцü^¡*tá7Êuá_Ç“ ïÎÚøƒâÿ'Ú.Æ>O7m^„@çðîrtº‡lÎðSáIÑ>‡*>1û*M›ªªŠ¢©VA³4Ð0"`$Hˆa%šP¤ bS }®ƒazáòLUDýtÙºÉÉ»žŸ±Cë,BØ–Ú$BCQM Ã$HHÊÐ(z'Ô+ê©ùQD‰ÄãZiÔ=ÆÎ|ì~Óò1—ÚÏ WT™f)tp˜HÔ¥8˜ý¦™&ÔŸÏups»&ôªxW'2y'Hóöª¼ºÁÀú¾Û¢FÊR§ºÕVJ¤©]‹•e-E+©øü»·»rzN.’1ø]ÛÁÕÂb0;Êà)àÙ¨<*Á(X'†Ï4ûé`† TH‰ T*IBݨKúÁ»¾Aàõ9«R=*ýêìbªªªª´ÀÑÅìžwuñwöÏxâÓÔQüO¥>½–-²ËAN·‘ó/CÍ3:Àç“ÁâýÌÕ¶!ä û?ÁWö>kö\ØëµŒjî{n ²õ‘Þš;‘ËÿŧÜö¼Ò=vù\«*ÔŽNèìí~c²¤óøKéæÄúfÕñ·bµ¥cGî7LjV àèw©â‘Ö<_ _·Ç Wº7 ½“óS‹„å½*»6,Úu8´Ó%pP©ª”Ú*mǃ’ªŒ?æi¢«bdÊãMÁÍÅΚYÈLbBIlбŠ©x¯{ï¤hà uÿ zNÔ©°uHŸá8F¤ÙÄÏó]‡ã<ÎòŸ †e© 'ˆ„!…£ŒT({ s1ñÄ6HÉ$¨v#ò‡—)gÜq9Ÿu(² >ýE©„¯£'¹ÉÉÖIØ—©ìMÊóØz_ {fäáëöSfdй¦DšX•ØÌëy¼µ§œqìŽk%¡Ry™Õ[+dBÎÔ<$ݱÜàÅ(z§þ󇯋9,ñÃDލ®Ãì˜ÁƒÑëúßGréñ¾&*l°ww‘¥XÛåOŸDÖóÑ:ä6{ò6rîWuÒ<ÅO2¿çC¬Ù¿ün‰À§én“¨Ç9 U™VWÖ÷»-“±òòƤoŒUMÔÒš6ô MmJà„¢ ‚aeµ„ÑKèŽÂ1D)æ³Á%¶‰Db¸qÅdö¶{?¼ÿ’‡µ=J71Œ1ÑëMžãJôuCµó0ÒMGŸ©ŠèØò4§S$Ù¤x),•VÎÒ±½â³ôãõ#F•>µ|ÎÊ÷Øõv.—6IÈnÉÍL,A© {ÂÁ!Ü9&KžsAn4׸šåçæ@ì633ƒŸ”!yí)`”MžØu8ðâïŽ ºäîhà¶#xª²J¥TæÍžMÄã&$áÆ]aØå;ÉõÞ§j3nn“º·OYçE|Å0{ÌcÖWrãÝ ¤n¦dLb¸(Åi_IÅ7ò>…:kÏ:êÔU)aB±!"A!DC-@D!Q„CD¬@± K1)I”SÅM1 C5TÅM T¤¤1 À0‹,±D1)ŤJ‘Ô6†#¢ÒÆþ“Ñ$üñ+Þ“»©ÅÑÜûŽ¥žÕ™,8§³ÙA9蘘<ëzš“MD¡‘„%! HË‘û%àŸ`Ok¶K½QçW‹ßaæô¥TàÙIJRs7GÆí>4Ç\æ~ew,„”u9Eh±¿ÖŠšN½¤øÞN·¡SµÖÂmSuY¤ëøæ ’ef&K 5Ù=¯I⩳S:<1fêFI $XG̃A#Ri4IwÈÞSªR¥XDJ¬½dC®°¾iL{¾™æw>2UI1Â&¤ñ…,lÃ#«”o$Ùyv6˜›I’µIŽL$n²7TŠ‹*ÍØ˜Kª@ &Q€‘a‡`8=w˜®õqÅx#Ñ:ÑÀç&ã‡^òÉï'YíV(¨©)TpSˆ#r‘€I-ÄJd«¢t|ÓÔ>¶½c£¯Mx~Û†ý<\)Mýûë¡£Þ¯ºëG9êR²»û|êûÍž½ÆÃÆqÇ@X[ø!踅OÉ«äùç=oÚ¾â0ÀŽf9ë"¦c¿›ÔöG•A.9‰tøüÏŒULièÇ õË/|ܦ#^]·ì¾BBŸräŒÏx›òïH‚Ñ>'AžƒÄ8H"¡ÌÜÞïÉ·éøf¸~Ú=G“)½ã>Ñ>%ž Ü>»ç}M¡l“ôŸè1:Oÿ—2t+íÉ¢Mäæ²ƒŒfpt¸ÍfÌ'|vGsŒˆM擱ÆŠ  *{&ÎÀ„ÈqÊõ º½_òffõwt%OÝùfÁÝx=çÁåçñˆ¾Ë¼\ìb2?}º7¯ú°ý,=*맯K‰õ)U'äYñTJ<&š’UÃw†Ñ] Æ-ƒÄ4±$@qŒ±Rœ 23°ÞAÜI¨q»‰Ên J“c`¢HŠÅ˜"~Y4a¢””‚ŠLCÓ£slh{† ¸Bs3X“,Â*XŠ”Í4çbj¶;£ùy6åï"1¥xIÕ´tM–F ݆ #UĆÂs Ûˆ:Ò¡ð >¼vœÒN¥ßÝôæhL>qó#\ìó*œõS˜O–Š>{h±‡ðòȰä‘Q`Ÿ¼®…iQÖf˜ÝØzÑôŠÌ‡v™+‰ðºÓÖûÍ+ç¼ÝÀïIôž³yÍç;LFÅ‘¥M#HWSfœpU0Ù£IsùÀØsoà’ˆoj%éšÉA%qnÔ¸Ù¢qFļ_ÜlÔã#y£-²Ê¶ÖÅ9·¼¬ŒÑ²¸9¢¶C½àY÷Þbs͉S«Á§×Wª*¨ñzØú£ë?º:!V*ø©KQ0¤¶ X§WIÞ!:äó½O&EWgÖanë%xpvl „×óu‰äü—n¸ŒŽþ)Ž, óÈé ÁäMÇgi¦°zº2xãÔmC­+§–Ù•±däÇT’øÒÄÀÚp¬3àqI 2¥Åçª:èÈ™V{è£çQÁÖ öÚ“O5  ³tÜí´ˆM„Pä„;šÏƒ:¨Tç×N…QE/N‰ß鎈2,ù-˵!}ͪ¢'¢æ+å8p.7˜v%ﵪšÖv³³®jBˆ!ÑÛ™¦›°)þû¿¾N«uéæùŸnÛÉG¥e–ø BMÙ;%ó)Dî^z§¥ØówŽÖNZ¥åžf8’½.a kN±<çÒ«‚q{Ü¢DJ½±P$„ ÁɶÉTŒY1Iš„бíï†Ñ3uîÌ!†ÍÖk‚éo‰0v«Àã¡.ÔþÛ;yd„áÃÅ Øö^EÚ£Îç½r¢ÖùãÉêï‘Y5û×[L§:®ÏDè°›Þòù£çÍàtûÉÉ5z Ÿ”ú„& CH1#CÐ BZ•mGF1OMb‡“$ÅG¥¦QˆŒ# Sxl˜L‡1&Ä…ña ¶à„\ D~ù|Ü•I„ÉØš4¦Y’KŒbaP˜Ji[?yÌý*¶~â¿s |¡º"!ÒŽDwÙNU©@ÈAÂNO Sûè¤Di?€8‰ÉJ³šÆ,a€êÊ$Q:,aCº$@Â_§ ÁïfŠ4œ Þ:1w†FƒÙ6I&•¬L,‘97iZJ¬T(ÒBØ“à #3r[#(oE“@a ÀDa.HlTÝJ­cDš†‚ËMÓ Sçi†©RÅ’¾Å0ÊÖ“(²)h¤ª;ë»cÂ(ÚÉ98±8Gj§ï´g..ݶœ¢¤Úh¶IÆl8«‚hždNRa×À‰ûŸ3ûp†ÓUÖyÉÑ’M4ÂË#60–ñH©a4±*DÁŒCV%ÐÁe!’˜@–@dG]j0¨¤”—S‡Aõ(}ªÖb*v;y–ɸ㱲Ŋ›<˜‹V±¼m#’·!‚ÉÔ‘Á+òá27u9I¤ý´³háêphÅ^rjžó‹eÆdm-QaWE0¬EF0É'ÏcA‚›¸ÊìJœhÅbªÄŒ’T“enØÄS%í± ˜lI2ˆlDJìH4´§ATnØæ²FÃâ‘RFÈ¢IÄ2lèÆl2MЍ¤RȲ¢WA;+ÄA(ìs ÆBňª%Zab,”HàĤ©ÁRo¤â©³Rl‰ªX¨[u.óG9ØT3Ï+¨é9$Àa^Ü!ß¿Ê̤"†Š}âû0DxþΑ>9»3ÃÒ j=ºHórb›Gøßó#ë < ‚ó½.v¼È§¬”!2(2‰€É’ PBJ*‚P¨ OÀ“ö_aû›üïä|n.Ž çX4£ï¬‘»†Aµ?/JùŸÃ÷XpSeFê™S£N“gSsHÒÎVFõ#¬§¯.  D÷.FZ@aq²9‘ÎA‹Ÿ›;¢*ý+ß÷Tðü»Û—MóÃóymÐõ¼D>ƒQÙ¯ÎMèÒßó˜‹_M'eÁ3äÚ7ìpƒE™Гj÷ý'¿~2C­yvQëÑHiîi(ÂIv–%øÝÛôª8¹,’ÊNæÊÜÜ”:RÑô£bÖÖ Â÷½îgÛ®tìTܰæôâ¤S~“Ë$.ª‡vrès’lC:•ÉBB_±Úùý*nÄDòÌé;çi«r†|¸ÈyXÈõêË÷vVé¦ò>»mÁBnÕ©¿8UüWÙwÕ%‰OB \{ˆé³ì¬ŸÆù^4âú¸vŒáÚp;L¼¿áªÒcÙxF|úÎv/Jw2ry(|4.P³ÑjÁSöÇK‚@PêZUëJ1 ç혈”E,Š¡?ºaÑi d!¦Ì¡ë6DîY¬ãâÖ+LU–íaE„'z{BÒycä'pòñú©õßÄv ü‹üÎÎÏq7úò §bª*Z“øpâƶT<æ& ¨BïG‚ªžcÏ“ á,H½®HOºc$ŸP¡C)h\`ˆ…!°3ÊM‰ ™"0“?zDÿ'ÝIè)@F&"ZbDJ(uò{*nðxFun׈Ýé$}·µEã&ɳþdñ“£ÚäxI¤¢‰>°°Žœz+ø^.Ç“ÜRä8÷*8?b~çîJÿ'ó:CÍô1;ÐŽÿ6'Zp¨óR0ó¬žô”›¤R­ ïÜÄ6R¢ÅE•I4¨™HÁßXë¤A8ˆMe!î‰MQj¿…™!U*¤¥R¤ªRªpS‹!TǼŸ šF–ýŒy¾V›4FIq;†“£G…K0þãÛBmaºx\slei\Ü\aü'(Øè‰VB“RJG×$ÕKa-["J…Œdè‹'ï©Íó¯Chsr=~­Ñv¦þ›'…‡’ÃÎö%8žÇt“J¼UçlÓMšx°M%„¥ ³È8faKa4É‚jQº¿¾­•ÖßR«K˜Ç&'£‹"l,¶Sw%•±µZ9ÎÉÈÆƒ’ %ª*F*¨¢À¨ÉŽd‡y<ݸ¯˜ö:Ü~ÉÖìæÉüoñ·O%=¼âŽÅU™X¬WbJ ÒSãþäDó¾ŸÚØî<Ñð;ࢪ•¬Iˆ¬O2ÉÂvžBä…c,¶MI d8½nØõ•†FY™êN*›I;6{¶à©ë“ýxÓ‡µóá§èñÖÃi4šF1í}­›IÉCeJ°lÉ+ óäZJe“ ˆcÆ# ~Ú»¤zä{,4OÐuýÇ[‰ÖMçùÉÍÉ<âª;^LL©³Ö›ºGÀ{jmè¢;ï`›¾G¥8:ÝŽ·z¹¨©õs8¶ï*§rÆSJà|. “gwruª^¶B”Ýg‹M›4Ås6o¸áâ°üŸÃ1üTÕ) Žêÿî~Ú`?)"OK™2"$#àxJõžcÁ5#Ú]”~'µŒ’ l•M":i»ëk›äqrT«æ©¥U•FÒcN¶?ªwOÏ{’FÊ7F:+Ì'¼p$‚I‡ELUOHÇ9@¢ó:$1•B ÇÄp‘VP ÃŒèÃC*jU  ÄDƈƄË)Y€.L’LTÈ`ØQ‰5 –$j¤*Äm2GD›>¢9½çœiû¨Sº}fçݦ*wÔb¿Í‘)Ö.é¬ZÉÖ[eCÙ†*ì´”¤(ª¢ÅQEEU5TLÄFà4ì‘ÀÐøÆ¡Ñ‡˜AŠ‹£š")B†ÕRË-OßýßMÓܰ?qûxú+TZ‹Nmó¾yb'ë*ÒœÜ‘ÙÆºïbv$ø‰Þ°ã]šñ8£¶i“ªøÇsÅÑ´;œì÷wGoúqþ Äëj’“Dæý&N÷d)éW¨œ»œï ØpÌ%±W`ÁìWw§nEë„ä†#×$PÂe,äs{ð ΩN ŠªìñSoœ%aƨìu8ÁÅ`ëKETTDT;ã1"‹ "ÐrN1˜ Hb$3ŠRs‚»ÕÚOžZ©‰Öªéó³$=q$™Šs•AåU!CD$JpÜâj5#UUÛ,WFp¦šx¼ß9%Ðò‘^}ÓG‹jzŠª†B9ûk¹ÞîMw×s1Š­›ª½óånœã¡´úÑþ¤µB1ÜÉõÏ—%éÅÇý‰¼º¼hüÿ§öqÊóQGý/UN§à¡¯ßî”ý™ÖH G·WèOüM¤ŽE2>shþ>ç~j •+ì-TæD6X²¡-°X†Ãš×Èø“ ³ú/™œÝQÛË߆mù4ד>(èO·MäQEPè/C²§•† •MS>Áìjij¢©UZ(ÈRUU*if·<Új·,**ÅgÛ4Æãˆ42ËA 8EŒbª¬V%¬eb¦–Iˆa†`’–… aHÄ@©Pˆ– ")€ØÀÐF†Y#b±LÆí7)¦2™S&•Uø#âŒI±å(oHD è,¦‘)XÈàÅ€¡š$M.“ÌgG±‡¬èäê)¾‰°(Š«„Á¢‘*TÔP´ÀÑEL1LUT…Q@ 0…AHDŒH‡-ŒZ0ÅsfC §µ²¥Y*¶j`£þ§»÷þs–²Êpù£gFÈÆÎDý¶IÂ$“ly6?‰DUN#ÅÅ8AÆ)À‘"EbS[ˆUÓñå 7!በH 8+÷fÎa»äY ,•e,’¥zžšqXï6o8‘ù?I§Bl©J6ÓÍ87)2Â~ÃD˜«"•8 ²°ÑMÇ4 ÀšÌ¤Ê"a›+-…lÓJ­›M4­”aí|ê®-ÜU8'˜I“cÈàýGt›7aâ{Æ4n81øá’S)„uEzÊ4hl††ÜLâ*ÊDÒ48œ[ã0dCpz¢ªIùSÒY$DÜ’1#ıÚЮô´¾Ô¬–ÞnŽ¥ERd‘TQAP ñð!™JUj"b€iReJ ˜ª¢‚€  Z…*¨Bˆj Zh(h€ ØÙ:P¦JDÑ@PP1Há%1¹öÚŒ~IÁx<&*VJa\$ê¨APJM0\0Wv]ä„AE"øç8¯Ò—3vAêGÅ«~+‰U§œ¥q:ÏÄÞF¥pz±º‘ùߤàuõ¸N1ù> ñ"º:I"¨€C,ˆ°(A "í³‰Ò{‘íI&¤ÙS÷Ç˃ì?]CЪ©~Ëš9:œ‹çÒxuǵ¥®5²aÎA˳xžãú‹É¾CQ«jj{MÍã+@uˆ”AÝ‚8ÂእUE,J¢X,!C½W‰B„Uâ0é킼A*œ¤xFƒIÊ«Ô$fUBÔR$“H¨|%†=>ØöÆÈ{É c£Gyì’Ÿ>¹Ý$àNÅl³±!6aÛ'¾¬ïO!¼Š#ƒtcç}{Á=\ÔõfY$Ôl óªDl¥Y,P¥*ª¥XlbwäãFH94¦£qˆâ¤‚¬‰ëÈ%‰ [£fªä–)V0ÄØXŒ’ipÈrz$Ñò¬· ´“sÁ^øÆmf.ܘˈÆLø´mr> hÎíW€w© ‰ÛÇq";ÝÔ@CÒ•ZTE$…JJ‚R‘…‘@ a ‘'ý³o}/Kîi–û˜÷•»w±³áíÛy½¡–’ ”M­ ’Ã~?jN}‘mË”e¾¶ŽÂì!†Ã˜¤"˜“ºoqÆÈ4¢d°;8äjXРGÊXÚï"fqjXƒA-x.™ ÐÀY®#‰³ÉE 4$‘0èB Š ?Žo¡”9Õ¢"G[h@í¡FI À Ѐ€Á!bKWÌÊ>b~" ˆ# ¿|#¡EpAÄÜÊjö³ ì v—.A_@#‰Ê4ØEŽ‚K3 ‰% –B({–)ˆÎEœã¶‚ï&-Vêüjó¬v6nÓùÔÙÖºw6P‚ ±"™ð‹Aa;X²Ô4½¬u´ÙÍ»I†ìËNk-ÄÍœ”P›Jêl;A.#´ì0Iô؃Qçà?Q±<ì„"D0X‚KóÐÈÒlr5@\¸5²á€æ9(4·\ÞÓhCÙ Þm¹`°bÂC˜42I$›4›YÇw‡MÔ(âw‚3õÒâ9rMh Lj+8„\³nW,sй†j¡ºP£ú bçÈrAH9¨ìäš™.hPBh- ‚0v”9èù’y?+âfÔ2™IeŠ«‡¤êa¨!šC_-+ҨŃ–¨É“}84GaÐèX¡ôÝbä0zRR ú»<"?Ü7˜Éƒ{Á¦ÐÒ„!ÌAbµï4ݳfÉŠUhÜÞWb´æÆÎæÍ+m˜Ó%džsQUêX*É$“IlYÛå!â†I3ÑS$PëprO¶ñ&Ù;ã$•ízÁmˆœå†Ÿù!Ëpnžr§áqƒ·ÅŒNÜ9B $dJ$Ž$Ž"Š$§‘È;&8o0Âw˜i Fö_Ï‚&–%TJêv–'áTúÈÑ…SK"~‹©çWS§[RvÍMŒ›,ßy Z¤‰±L©_…cO(Ãνý‹0v4L}ÍÄ@V#õ€Ð”>N£«€¥¥ ;1¬ó£‹™„µ"1Ec=‰ÅášöÆý½ËÍ8Ù&'sÏ¿¨¼œ•£bŽSìÄynÝ»ÄÎdåœÝäMûÓ­‘2­¥6“ôcµ¿_z8rdcIK0Ûf ŒU`2Y!ÂŒv$Ýäö¢G¹<ònÝÉ|G”æàuN§S‘²8='Yͤ÷K‹À˜o'ùM›=N´ÓΤ>A»‹’B;¤œPîw9:&(‘$Ùù[ºÿð™êTæÃ„›ðzR°{^Æ]®©ý'[ŠM)\Yê{x˜àö¼ú{'µép ©RÊ«h¸¯:é–a¤cõÊÐUÅce4Ž-£•L.l¥.8fɘ›ÄØŽfˆa³46Sv›4Æ ÓM¦­„-Ihv<é—¹ÖøÏPé©7uÌk‰ŽJïy"¦ÝoìSß`êXŽå› Û©:IÁ*o'ÖŽÉÉ4Ó’§—v8$›,…YÚNDÐâäÄ–;²Dã$N*["«x¨YO7yx»vNJÈëU®fNgxOX”>¬Ÿu‡t³ðÊ7Þ#·„©‘›ˆ 8c÷IåCCCAú؇­æÿsÏõ£5­QùQûvªã_wÞ¾ô×­ÕQÀ€Da¡DUO¶ù6Š~÷üÒ!ù^) MœÿÀôßKÁpö#G¼0 Ÿ\ØÑ¢GÆ<]søfÄ-{)ö¼É-„¤ »"çÐzKE8„jnirÆO°zÉ'VÐÐAb‚ㆆKþMîQ|*ìÅ›SF g$Ñ‘f1×¹ÐØ¼ õ:9Ú¥¡Áך7nš•´“ó,uk›¥prw¶áÕ¸–¨»`œ–66%ËÞÁÊ5ØÔB(Ðè\Àæ²"[]DÔXqŒL˜Ác$ZGpsC@d‡”#J¦ГCrÁ¸÷h!hDQF¬Óƒq†lXÓb .# Ô[CfɆ0„Ì6Žk¾£A¨ì8Œ tÜ+!C&å¡cMœ˜•LvéÖèÞ«zãLnb¸95!·Þ‚qÖë çTÑdØÜÜ26šI3XjÃ~.NmŽ;ÚX̲Ûe•±6cNŒnrÇFìLaƸ6Î.-8˜ ‰!…+ˆðˆ°Å˜\F!a C@ŒГ€‹…dTqÌú¨è\,Ð\Üs"8Q¢ü¢PÍÛrLBj$‰Á]®ÃSIè²Bpp[n ‚Á¹,„ã4Ä–"Pâ…„è #‹µ»­+®˜êk½¿{ƒ…ì&•1S„þÝ–Ú½©»ƒ­O±Ü©Ó lÄHÕÙafA±ØÁ t¬ˆŒ²`Sln­Õ­+T·U–.ÅC&ìÄÄ;´,ÊRÚ‚ˆ‰7Œ›DÁ 0 ‚UI557}áÀMºøL4í<[76iX­WN›´ÝUÜØÉ+fšWšid¶Mœ\U¡yà j‰Id>–昳Ie%X ©DYR$¶H“©ÄÝ ÕRŠRŸq&?Åßÿ?köôìÜž\‡*$±³¹^PÅ„Âó«±Xïrðq~78«…Z´¦M1i¥«4Óv&?a£nœ$z+È~e“¨“™#ÆK,8¿*i5)OG¸íœ– `÷+,à 88 ©îj|o¾î;$ˆpBÇç$>ý"CÉÙÁnKfbb¡N¾'r·JNjïÙ?IF,Ý·¬lÆÍ6a¦Œa³Ì­•²¦62S„ ºLœ[´R¥M“‰T‘Z}¾gäˆm±k!ŽÀA'pâ=F¥‰,9!rLVžÇZhwª¥M‘Á$HêwÌIÁ{É‚‘û¬4¡U©b)UP´µpTN2;{û™Në»4bÈÔN b¶S²ÇÃcÌ˼ASt&¢êHÔ¡5¢B+u; ÁОu‘$ò0ŠŠ… "I+J²4©„‹ã,cR$žã€§TJÙâá"pˆ‘8/Eˆˆ€ˆh¨$" •`¥O•Q;T;zÕ“*º—M²Þ÷¡ÔÇr±Y‡c×ÙÛËÝÕ8;Ö§QjÑViÇÅøöiAÞg8òZŒ?øx>cŸ¡âUæbLR¾&FU£IÎGGÌÉ}‚YdUÛ+Iha&¤]J4ŒJÚ0 !‰FØZˆµ*…©'‹ù øSXJ˜ªö6pN DäÇER=f‘º¤;ÍË'brtuÄ÷¸•2™±§Dìƒ{.l’*ÈÈb“u0ÝæF1áa´2îH‰<¤Œ¨õÉ%„ÂdÌXMÙ*·+Ì·)À¼·c]Lnº‰‚0 2ƒD)£ ,à%¥b,œXÆ©…S%–ÚŠDÃDÀÞb›1°HèÃHu-!‰cK*ƒK$©.˜MM1‰ŠJV+%QK%i[4ÅX±K\£(“£½î{’œ›‚G|“Œ“©]K#¨z»›–RBqv´Î2›§bx®R¬‘jx¬4¤Ñ£„«’Ò¡×#!óxu›;ŸRb¡ô¡Pù¨îº®õSŠªð9½.o札šŒy²q‰&G ˜BLb99Iô3 £ƒ$õ´šI¸M”SS¿ÜÓ~¶$‡b¸½<˜p ÝÊ‘Á)fÄÚ¥}mÙ'O—ç0<4A6 ’aáƒÈàKΉ²g— dpYTóc‹JèÆë9T«&(ÙSŠœÙ5]i¸Ùû)!ÕëãLƒeŠ¥ÔlŽ‘$ÙET”¨µaR‚š: ívGZŽ ìDæë‘ØTîMÝŠoµd‰ïIH*β­R¤(É‹.(Q RJ*AÔMžåuO2¦:І&˜àñp‡ëD:¿Ïèý‰#VMã}a©6i¶Ñ5•DDDLߺˆÜ6w|[œ„;SYÑ0rGjÉ€ 3³³^ÅúEÎKªáé]WàždÂ@È@Ï¥˜ÄýÈÈfþnÙMUëëöÿ³¸ìÿ8þŸy­ß˜;¹»¾Ïáí-³H-·˜ž_7(÷¸‘5 K]Á¤¡÷¢OŒAÍ<˜¤|óÏ÷åëèt)‡Š¦ˆ`‰šFÄ©R– ? &ïÓç&âÊUT«àœ¦ÿ¡;?î°„î›?F4“+y‡\ýŠ=ÚGŠ´p€•’=ý‘5u~ŒÛíþ¡ùÿ¹Zé¾7ÅCŒ¹V‘Ê@=×3š,‘d³î?ЧQûNǽPª$ý²±NoüÐ}è'CQ‰Y#&BeŸ´æ|Ïô\â|Éëãvô? yŠÄýuzÑcõ›Ý?…Ò4lKÀÐÁ®Œx!©åŽÏŽ%ð`àÑÁRÍ/Ú·éli!cs­f!=NöÌ’x§«ÞžY4Y=ö ÉÄû’½ªÄ>ø\Œ{Žz#Í’tàð馕:Õ£àlï•¢§‡ÌRqT“ŠžÄ=†ÍHqq'\"{ë઩þÜãѳÌc–.2E%¯–޳rš ƃVtˆ:žçÔŠjõ¼ï ÕŽšDù¢Š/ñÿØò ×!–aù-U8 ‡ã¥„7ßÿ¿ý¼òÿ‚w&#ÉøžÚTt§¸ö„) ªÒÅ–HzÆÆ„Â2i[¦•„Y&’•?¦¤1>ÁS®ÇGGâHŸy#ï©FúøÄp;¹wÿ›6U™A‰Js0Ûš ‰DF… d÷ˆ`Ù‰vš#ìL 'Ó tE?$Tv°ñ$ÔŽÇkKÉÉÕ=úÁ–ÑßÇ‘æsNelÀûê7Õdñg9»÷³ôx+wy¿»Ùok|$Îð˜î=aCݪš¬"®Ú È8ds‘ùŸ¡õî¦À¢ü£­ “ã}Oäqæý¹7å{§ö…=¬}wàK¢úèŸr"BM$·u VÀ* @a ¾ [H9a_£ó^˼ƒÈxÝE5µ×Éh5åÞm/,&‘~,r6Qß­x‚¢¢ô7|¿ímíOPˆ‚"XÅE~ÇU÷¨ïxDuƒ *’: ‹øzqûéÄ?klp•Z½oè0øΛ~ûtžær?u*TðI˜tÒ'‚'ª‹RKE)7V–EV¨ãÞa«øË:¨šT¶,ýç©$â‡yü'TíQàA§½NÊ+ÌŠýAè`úŸÅØòÿÜO’|>â‚*q|A¥D_÷޳÷ß{£G!¦i¦?ÈÓÞð•³dž’•D‘:u¿oæ7÷’¢¢“ù×MÀ uò:„Ã'EœH‡Cx¿ËXFßõÆ;ß)ÿYXcÄÂ$† Ý0‹þgøŸêüÌ“k)€qôçz›ŸdÙ;!´DP©)V-«°@Á H›~_ü ˆR<€Þá/äU[{ÐàoÈQ;}¤Â"øfèîÃdÑ…n6«0ø³Ú7Ï8ÍÁ↎+ÖÙ†í÷m •‚â®7m³b¦‹bŠY™‹Ã5IF§ø.0X%™œÁ(sôH(¦k”\БÉvÁ¬à%;Pƒ”ÈíE! —?Š`´±“b I¨ã¨j££5ººlÙ\œÙv999æÇ$³+®ôl›,’ªZ•\º»ª¦2C9ôà9œÎ”®íÍì–bPÛX™dpÓ“M•lO(ƒÿ~Ýæü[µ¿ÍëûŸÄÅ€¦Ôl¦‡2«þQJOÝüC…ñ›õÏ:Ä:%HT² 60VÊÅ2:âõÐ{Ú¬ öÜTDÈ nÞEw†‚n §8×6@y¬)¤¥BNôRÂìÙó$ÜÿD¢©% Tª¤TžjÇ­1òxŸJåyYyÎ ¤ëBqQQTùè&‰tœ¼&Gd!´!ù<˜t„A^f‡íE›p@Ù ¿çúAWú!€øüãíøýׯÈ?O£Î3 ɦnMl.#ÏÚÞ{ñ\aë5ÁB‘;í]5 _ oŽrzT^J³"!¹ TÈÞ—<ê078gµù;z¾®/ýwmY«m§±×àætUqĘ•†¢Ìfâ9"ß@ù¹ÿiü¨©ëBÉ Ü~ˆ}—#¨ë¹<}ŒÕÊú|#ëþƒ _Äzê$ùÚí\‰;úŠÚCg8e>³ ~6¤_/Y#v=ŽŠÈÿ& Š**˨®EXaÚi©÷NInsy÷ýàE²§±á§?Û¸MQçús¯®oNRìíîOùS¦¢ W½^±1 ö”¤‰1JÃ# ËŠüeh¢ª4¬}ÆUC ªF”Å,U‚wÜîwk£ÀƒH"û ¾çµñ‘ÜX˜þYÌ9ƒÉÙJ±Ì0‰–ž¶û9;x'ätÀ‡‚*Ëß§yàÕý3œqªP€Úþ•¼z£¹WH¹ðìî ¿Î];Í7©â nßyE_¦}$B4ý¹½i{uÚ[$ùÀ|wßö-‡®ï÷¨q™W²þƬ40l²±9Üß §ébu$7¼:žHû” Оü¡Š»hÍâ¨*ЧTì©¿ƒͶóT%>¤Ý‹AfR”Báß*ž*ÑDUURžæþ<-W»„îÊá˜ÍY‡Ï„7±E ME5ê ³µ¢ËM ähª¢1ŸrCø4öYæûcoDNnù\ G>¦C÷Ç—7]j\ö­c®9òÒÝãÍBÔZžlýŠo(ÔÎÕÜ!5ãXnåyïéò|ÙÃ…šÚ±!¢jnCôÃõú¿½s R‰þ4?ÎØ;jSEdPM©ƒ{ò”uJêÞg¤È„åýƒ ÝV üoÚk÷ŽãNXˆÀT5皬Uœç«‚n¿î7ËßXè_ø>Ñǯ°àÿYÿ))€8E4¨†'L>auD&U¡>Œ§Ýó`M Ú˜ác1$kV@ÿ› ÎÓnĕ­fLÿ¼þGOtÞœ~±í18·_oê„¡0õÿ·ôžGˆ7'µ”æî_bÓ D?“LÀ²HMYM †„Ùø,>O°é‡¿?+>Ãì–£Ö|w×ÿ”¹`V.0Ô¿ÄOìm’Nîf#$ÈK´EêJ7lÙý”Û{QTbü«¼"¦6ÚîÖ —óm_ý»\bνS7ê£üíaé!E:)xZ¬èk <þ›‰³_ÌŸ]àzl/'RN#õ®'­¬!ÎDz•›÷öºÐ&Êë—{ba«l¨¯m™–,lFpKÙýÖÄÚ›$ïôÜäÊ&̧[‰Ò3‰´Íú³n ]£Xrµ’-áT*+ØÓªõÐ°Ó òeIù y¥‰ÁÄ^(mÑuÒÞÎ76Û2·jq¡H1<_¿ÎÝ^Æž›ÐÌb¿ÜIEDAGåÕ®Æj+¦õ¿²˜-,ºj »*wSŒÃ½Õ^HÃ*C.y*Èì®MFÈC9CÜ?Øw[ø:n¶¨Ž…[~±è+ÜÝU{?þw\AžÄ(¢¨FêÎ “ì`=?ë­b*dª´«ÔoÍÎÆ=ÂÊ'Í_íZûÜÛg7‹ZNõ?Ê}§êC7%eã³Ý™Ü÷]™ùo=èîBMkíéžõ‰ åŽpZ\Êë–Ÿ VL?bmêíed¬ãˆ#ýW:©d%⽡&·¯Æ8Ãê—%““³›Äk;L“a/%<%?ÔßM,XHÕ‹T»~É0ß*9¢È!}zvíÏ«ÝÏK‡ÅïQÛ.tðsÛ¤AƺC›lß§´Ó©SF®$,yuµ7n_>ëe鬛¢ò]øÙð¶CÆ–ƒú9S<[ýÈŽo¤OWÖ¼Dýªvµz?µGÁ¬ÕÅŒ9þÌïÙµv;š[1è]Û^´ _ÀðïÚ¹"ü±á¬UwC9}‹õg3ŠÒ MÇÇäîæˆÍ®»׺N˜å™rYµwOùëÿýו[?š__¡ö]¿3üë§$ó\ôl5¨/#QTekL,£¢{—?JhUpfüK¯3²¸Æö"(=Žçz’ÿd}M_ìɦÛiª¦3³§=¶™µï¾âd°R«]á&ãðW ?é-Öþ¯2ߨÀ*ØVÑöÞ¦~;½ Wˆ6ºØEháåùmÄP²«×ÕÉ1j Ë–%žˆI4J+ÇQ³,Ë¢’ªO`BnÔÚ(êöGÜ~}ÊÍpÅQê³™¬~îHÿ¹h²èîùsÊ›Ü7™$Ó—0y>«TN—õ˜„Ò¼“3Ew?Å2{×¼{SR”Á~ÚûrmÞå‹;wþŽ5HÂÌŸ£œWÚ&û8÷{Ò7¥Aá‡)Ì}un–)<+ùò³¾Óò½–³£·ú¹Ôç2˜15Ìî<éJÉhd +uQñp¸ÀŠ^aU/TÚ¦›µ2ÿèò§Á¶Oƾ¡ÇTêðîü3ÑEÖV6½?ìOvú‰×r‘Zˆ!:¢Á?6– _¼ /Þúo*ý€üödTP-0–àD%(z/¾Û‚gjzªm~ç ¼ÝGrUÊž¿*ß;q߯»’‚}Ò(¨þ$O¹¿òœERêJ;4Ûâd˜›Úl²”Ü´Ò]%–k3HÚÚfEBWùYb¨†[hShˆ}è~"³t¬Îrî…ˆ#,>Ïû’ 6¨E”UDSø)"àªÐ;xiê{/Ýàáö™@¹ c ~)³£H¬Ù„D@ßò6‹<³àõØ—ñþ·šÐ­T<›â%@Dù¿ÞPÒÿ´H§@ÿÓ¾¦Ÿàû–¶ø0›Ç5‡´evGÊEñÏKâhÅA4‹Ì`*›Ñ»d!&qþfé?&~Ÿoë÷Ñþ‰œ=§ùìý|ÇH×Ô{xc%¹H2¹ˆej°@ø^â|µ Ñs×ø8w¹sñÉÙüoì}¦±-šúºÔ4•Š ‰RVZ-µ…Q·Ã…H6©–cúHA\µŠ®œpA¶¢˜Ø…E+X²"’PåD þbñއZâpüÞØ)V5s¿†“‘fðä““6Í/è÷~Wóÿ‹£êlí“Pqi3$Ž«¡ð³×ó“SC¯ìFƒ÷®ÅqÖh!¶{" µÒX*ï±Ä‚‘¢%â7[žó©¶¤OìT(ì`‰‰¾ûô<Dz¦¯ÈøYëR8øÒ|T˜—n€lnC„§2¿»ÒûsþÍaÿ\>Oýîkþ~BCðy8w“«tŒ<|¨By Ç—2ƒóþw0÷¶êîÁq<ƒú{/c½•L©¿ãLQBT‰´àríÀÃ+™‘ä-/ö–8]ìnö<£Î‰ÏoðA#XZN/ ñãù™>'s'¿²¯1îU­»0¡rö8¬ÞÀÖUOmÞDƇÀÙT×µWó;‡ ¹¹†gÏ£¥›Z#WîS™} £§±3¾ ú’³yÏ™`c[ìÚ¥ðUžjîìáâáù[ÖZ“Oå7Éç²®_˜®s[’µžïøW›°áN±ƒåÕÉm$¹µÕþz— Ä¿Ó×À:Çël½;ï‘ø°åAyŽü ¶þàE¯LÐï$ÿöÿƒ^©·—éfo Áä3FÖ&Ôßî×Î 4Æ»3Ió_ÊyÃÁëQFÕª¡(¨Š/G»gZ9Bá* ¨žˆ*‚¯ñ÷ðþuHÀx¨¢#á8@º”‚cçc­Q;ñîPaNƒU…ïw8AÀxüdŒ$QøF’t@âlšMÝœ¥”Ò—••A“H9‹ŽËKŒXóD`kæ÷çù™òý©ëÿß=‘ø>κþ^-Zཇ„y\èç÷‰ï¹t|h¼j«7Tí·ˆÚ•تô¸C¾¯Îh;ÝN]į$sybsÇ“æß‡®Î•Ò^䘯ةZ[^ ÓÀrrثڻŽ*h¾“ ¯Ô§ú|€P‰Hà/þŽçÁɼ®ð&¯+ì­x•¡/æD{±ó?Q¿'zqTš{ؽÉ"¸û¿•Œ/ú¼YÿWµ‹ü¢ÁdVIÒÿ†ß*˜«lgÄÖùØ-Wúˆ”FŸÕ°BG³G±ÅþJf=ˆK‚gL}øü­=Â|~gÙÛê«5lªë¸­ò *¬+ôýnÂÇ }ö_ÛÝ«4þG†M÷žó°—Óuo]xB'°¨QA¢¨–T¶æ¨öL®äæÿÂLàÒmûG$ð>•õ”ÎÔƒ*f½ˆ¼;J…'ŽÇ]$³wF³í^³‹M¿[G%P•Hó`ÓWÿRÄâʹð»z¤ª8“<ÍN1¦\í~2žºåv žaÃÂP MÍEËTô-2 sÎ^ÄP©å² ðúÛ÷Ø–X»¸];?è*¯Æ‘½~ŸO¾ˆÇ€Šh ã?Çë›àÃV%†ù™ÊO*rTÃɧ“ÂÎs”ï×túüè÷£âèŠèº0~o‰Øò‰7›n3÷‘EU¢¢8”‘Dð*2U;5 ôÌH\¬éii¦«…ÎL¾Mš"ƒÛLÉE-ÆXí±b¤Q¿‘OŸ4Ràk½\ñs{å~Ìá\áÝÍkÀ‚Ö-|ÇÎ{®ïÙÎþ×ü˜Ÿ9ø¿‚”›¾‰+»wæ?u·åõëZÏ9|-S3‹Ž O’t½Ýï¼{å¬òi·o%Z¾‡e×»KÃ×ËŸC»²ã¿Œ\co5ݯ£ïÀ;‡£±\Ô©d€ð|,qNQÍË~ÞÊÉÛÉLï†<–¶O»–ܬ«E`b{yÎßä´A­t¶é⢙ÈíXÿëûY ¥Ï¥çd˜ì*atØ•–=ÝÏ{*u­ú+*Yßµ?åªÊß[b ôI1äÊ1%uÚ&qn gxYOÖ”ŽbùªnïGà$îPD:ä#í¿ºpû•NÌï‰ä^åäÂq–:(8Ä៟ñ¾U§©õ¸.¤ùw4º/¬ò1¶NÚ —æ}y‡oþ¾qÑõØ›ú(‡èŸ€U¯Ó¡ôØ`È|yß>ïD9ñá8[g++ÑÄ ŸÕ!ù«ó((‹ó½ÏÖÖŒ¦Ù}geDSñ-X*Š8rç:»Ô:z¶ÖõÜDZQêår£ È‚ª*-‘<¿ƒÃ»ˆ_;íY¡¹_»íggð¯g­]1Åíõ®¢&ô15=Ò==-<7·|o†Ú«ÑF°‰JQ-[n´s&>W½×ù¿¬í ¤ÿ¼ì8Ðô ×aWËnŽnÕä^"¢¯µkOfO¶%e‡Î´ƒõ½O_Øþ?³†Pª~¾iÓ¨"5±• Vµ­+bª”£XÒòÊQj¥E*,EˆÆÐÊæ‚YZ2 †QI‚gniÛkðöº|órˆ›Œ+¤R¤\O¢Í!šyÝjCØB¼ÅÕ ÄÝ•QŒû9Ž)M7´Ä)˜Ì\AB¸Åa•ULu~ÈÛº¿#äv[Õº‡œãäðX ò4é´½|!ß=ÚÕúq¼¿çí3dáwËuí+ØvmÚæþ7öí»}¿³ÙVQøy^A žø°³ Îð…<…̱‹'dÎ.AË‹Ýz]o¦ìxþT!‹ dk}foååûœ¶<­l׋þ;lš'oÛŰB~Ž dàíñz¾|’ÁÆõ>×½2G›È½ÿúŽFw-Ÿ‰ôýWQÇ‹»s?ÇzÉ+–&~ª—"½ªß3½ƒÊþFE$¯ck¶Ø¦´˜=,¶³«™Žô{H­¶£ŠÔÅãqƒå¹Õ¨yV1Yµänʶ+Ù„ˆêVJмU›©_r.Ÿ ásrQt­ú¿‚аp+¥Ó¥ö7™—¹”®eŠÎg8ëy¹)êÊׄæÄ‰+Ž#€îŸåžl2Kê¨ËV«# “Ëz@æháhUU‡ët=½wƒ-9°GªZ8¥z\zï¼Õt]œ<†xôaîQiÜ VïÁÃú|l¯*){Ñ)äñÝ›$TQÙÇêC[¨´´åÏaªÓHü¶ e„’î[Yu«=fÛh¯R‘=ú«œ>Ür‘eex¼üÕæýŒ4ðëÍ‹R¤0jÙ±ÅßèØšäòÏuøÅàIÙË¿‡7§4Ü("Ðoj£p-÷ï¾¼…Þï4qÃázn"¤Äß..îëfX4²žëóÝóªÔb«kM[tî ³ ¥nâ‹Oõ*ˆ*¢s¸L[­¾»·U´]ÃW+Ñ–‡!+ qÓEK§’'@ðó*"g‘,»°äÁƒèaŠÍ”‰NȃzZ¸Kîh™R¶öw×{nôŸ¯²©_¥ª„ÜÕ†¸»M¸ª¶Y#q‹‡e;Ö§ï¬ðG¤ð½ŸØž·®Pó ‡ÊûÛ’|~‘PÊCƇSJçí7ZWõSl§‚‚›³\(ÚkŽøM%¿NáŠÃ‚qIšá›3õžn¨«ÃC…åËŸíð¾·t:ºµª æm÷× 5õ“M.ńҞù‰ž v¨Ã½=¢ÿ·¥#ûÁÞx #ì;B[jíÇ•vÏÖFã; q2÷ûîô»h‹ÛÕ«¥%Ž]óÕÖç%&Ñ*$3Háê–a‰e‡úðÛºt}ëå­Çhª»<=›C©þÏ‹ñ“¿€¡(i¤¡)I’…¢PTwk`Î¥Y_&ÿÀúñq3¤s†g*8P-³,É@¬Ì­×÷¡®~·å{m»P›è`ölefèl¿©½<¥õ‰d)1­y#fÀ¤?ôúøúï“íÿKäy½‰U­¤Í¼YÜŒ.¿ ­ñ½·a{¦Wý¿°²y«æwÙlûÈYÍÌßr3a®W/{©3Õb: C ©öÒ]«Dck½Ÿ ‘ëb.E¢›'ÿÕÜþÛ»?Ëõµ_ï;×Ë­Ô•Âél×vgÐáîçԜ塀RåoykØùÙ/”¾†~ŽËéØ=ƒÚn[ñ»èÖ[fùù™4íäÔ³] €”öVî­„qeC6÷ «×ú‡7„}S\èˆÃerü¢ß{’ªÆ¼RÿɃñéùhì½ûE’Ç^hÂqô8A †n÷šåY®¨Ý…ëÓÖïpò›:Ë…©Â%3¥OªE‹Äšð[èŠ|]-÷Ÿnö–©éù8|¨]S;G ×ÒýÛìŽ5kXæ–)<;”_§ZûihCt±S=u__•±ØI•Ž?£sÃölQ}o#&F½—-š ^Ç%m8§ïtô_ǯ¡¯JŽ€ÞÚñ¸ªBì&š{\ªMÜË ›e9NG›ãª\ŠÍEã¯á¶qcÌ>T®º—Ô⪋ð2ÊS¾Æo©O¥`›ÁW:ˆJÕfCÇö¨ul{§²¬S"iOÓ!†¿ÅÝ |¯ÛÕäY6ÁÚnÑ+?öe¦Ñ—Á$Ìhn—Ôºöw—7àÏÞvsšÇP‹„vðu©+Ã©Ý /á?oPð´jo84Ïã­g—}‰-hjö:yKœŠùojÚ#úÍhS)ö6~¾)²úÜNÎìm-;D ·>µV­½”Þí­õ®‹lîMÏŠef­~;9qM%c)jöjƒ>͘V˜Îåûùà€Í©Î§Zco.ö‘ž¬-æ UG Quør¬››½¾eÞ {®<œ¾­;{[v,Êq-X¼<…QV¯nçªÞ%)]^OÑ3%0ÜV¯†öɧ•¡øääÔ©¯fŒ„ZRuü¼x¡è\Ÿ'bÜU‹‘X³˜üò±ùÖ›0jÅÞâaò2=}÷™'€t%“)¸°Ç?I¯¥…Þ˯{n ¦\2MáÍ>l7ËTÔ~»hµižYZ`\(PÂ쎅î\Û|Ù™sV¢êêèåU^‡¤ä–%¶ê˜.¼É}lªE­ÆqJР?3‰’.î'T©·„V$·9¸ÜtãKkå&Kqeu-ó|zöµ`°ä³Ÿ]¸ º»Þ#z°î|¯c3Šd„¶W‘{òA X´î‚hT·sƒ—¦¸SÊè¿4€ez·)òZ€b¦o+Ë<]Mx‹S2œ$ËÈÄ4±Caƒ‘ëË5;Íô|U½¸U9¸Î~Ãê¨ÑôxŠ *„ê±·Ôî;å4–Üè·,KÍ«õ{g:{ W× ÕYmüÖ´hI|žŠ¶§~j¹fä/Èž·>z6/>I°²÷s?°¯ªµöë: ÞH2§=ÌRÍþº¹–¶fsQ‹­Š ]ÈÒÆaÂW¢Ä$½å¯[ãX/éU×—%z›5]g"ã298I£Hãß¹öaq%Ú1÷ºQjégÓwr\›ÊrYŒ÷°]’>­š¼«•êQ§rM¥"±£4|û°UŠ9¸mßÓO{MÛmŽåý¹—d}œØŠ¼þ=X×øyø/A^{?¬ùrßLx$ÞæÉ ñìº#ÒbÜx.æRûP^ÑiªC©·ÁqqkËZŠ&¤¸3ºsAÁÚÒŸÝÇVáÄ»9[:h#Ë‘ÄË)/O‡6;õ³6­^:6¡ß.Å<v©†iñ©DtFy~Ž ZK[ⱟHk`·4’Ï!vHu Ý쥃'<ÔÉ=¢ žœˆ}¬Ëuø³4dv³³ Åw@Þ̸¥†*¥Õ­iåN%™"]¨l}ûeEf(*µ9±Õ._/»¯c_W7bùPM&.¸Å*D®_‚5¿ÞÐÖ¬žB"_Ýç4ú)±áàaÒŸ¹IýÉøûà8+‰½HîP-?ö\‹1îñ’‘³ŠÔÁ~gž þï·¿åÑ×ÈñŸŸÎ‰+-*5*²µ *±Ìz’€ò—¬ û‰%€ @L´ˆ@tþÓÒõ{OuÐ|®¾γÎÖÞÆk[kï‘ð&ôªú.>¸¸K®×ü ™:]ÄO¿±£é¥U^ÉH%ô¤ ðð= ˆÝÂ(ÑŽ+#ù½Õ.ŸäÞpY*i •ò¤œRvó×ÛÔ6[,Â"#œŽ>|0þaï€[ØË]m]2u~ÔC¨Ìi._R]ª7øO’ûª>+'ÅI”rpžßÉÓf§Ç´9f\Ï¡þ©Ýt9Ù‡•±J2ÀYSÞgðõÒyœÇw/Çׇj½QOZŒ ‘C÷8„ªx*ŽÊÈ®($Ï tf%$&ÄÂ8.ú§ìÀ.”^#cr;V”1>ûÅþž·aUAPLQKô“wcÈ$¡¬FHc0Ê5…ËzB [Òòôƒ§F4B¨•”?A]7ºhËa¾‰ ôÞào¾rlÞ‹dTœY¾k˜I ¤eeAê~ÿëo¼[/JÍûAÖÿLPs¯Ê .¬v/ G~íÞpOÉÓ ±Îè‹SªqHEA3óíª¨¿£¬ÿäòôuQç‰GU6­]‡e~W¡åõV7/‡\ØzÉwül:tpΔ4î—Wvœ‹Y°!Á…ÕÝvÿÅN‡9k&/f³…¼™²è”„ÉpDi›É(l"{ ªg(I…Ðã·‘t»”Š×c2:%4!²­Ö *•¥7tóÌ9°»ÒT¨táwg…¯ ’»óësž±À©É7NJý'§Ã:óº³MC6»jÇ'c(¥JÊé(LT¸É²ôoÆt}„f;{$ÔB’ÛI”Ôa=à™³Ãüºç;Ùõ8à,+:5à ²§G6ÁGT“w› „ÄâˆÖCl³|¢ž*ˆ†+'¸t\cƒº »~‚U"ã£<9U­gD&ùSÝÇåÂk¦8¦#KT;Ïb…½F±1UrBÈ“.“M!©•LJJfz)¼Ádz:ºC~Ø+ Õ­ˆ$IÑàîÜÅ»ØÂt³/ lÛÞžŸÖE=ÔŸ«ñÑËç×rišt‹k¯ò›à²V,Ú<>†½Ú&Éfûʺ©ew7æ~ñpÛ®}©Q*=­íÊk_Þ^‘ÃCàÅ×;Bš`ƒö3™Ë¹:0dZœV³¼ÙÆ™·¨Ì‘\a3—‹OHÂ(Òžô,ñûfó.ö¡ä*¯,€Ÿ/Wßy<+/ŸÍü-WÆ/º_­?ïfo4Z(íôöjRN¾c8<Ÿ {¶¹™šãÐô)õ¹ÓQj×¥æSóQoåÚî®A+Š´øí[ìî¦Z÷¼Ê}n&‰•_âgròÍä[Yýµ0,ñëÄ·»¯™<}}[îtm³´½ì̸leäÔ92<öÊ…¿_GCãù2_;I+´Sû)îJŽV¿bKY®³—ÙÒéŸúþB³Cv6Qd\¨OÄzZº²Ýϓ̓?OA[¿—¿­põw¼/6{3’œô¥—‡Ê‹þ6,O tí×\Å,Bö8·qwÛ±°Yà­-³G…­V× GØßñaÄe®HcóÙ«k:Õ4º“b+ ¬­Ö÷<°þæ\~޾ú<Ç»VJ­´]0Ô¯ˆÓ_±©Ýÿ?ðfT­‚1q9Ùº[––'Ká3[­gñ¬z²åÍ*\TˆÁÀ­†¾_‹n%,oÑv‡"2¶^,û:º3tåâݯ[}Н£·äZ È£ãªnHÓÒdÇSBWü¯ìzw«}µwÃÊÔ·ƒv"°;>§`åô¯f§˜·eídÌ¡Më¹³_Wº†h·3‡­ï ^ÏBÝÚ÷áî¼,¯ßô‘P±óO¶ŸK¸5Tà®çvÐÁê âò!äýXáä2;_3n¨¢/Ù5O—÷8Éšˆúhìí¥u€ùº è)|׬”z}«¬«Ç§9WóìfwöÜp½÷Å=wÀŸqŸ–†R}áM&ÿ ˆšíŽœ!®ëuåZ:r| J‰Tº‚¦yå§cÀv”6¢@ÈÉS¥íJ¿Œ™uyNO©’7nì¾Â"è6róL?Ñ›©‘|¨½ÇY ãW*D»_Ëš^ Õ8‹"p­¤vײu¶/=ljmÏø@Š)~†4µ_<çìøøAžiù?ѪNµÞq=þïCµç|¡`*jJvô?{AµDRÕ.Ç ÷-ÞïO±õ*&ªJb¦ôøºÇÀ8º>¼ä7u;ÿë<”΄¨èy½ÿ7FÌ“íu¿?êãr–£JLqL¢*×ÌfO¾´õ8yÝ¿|áÓñŠA";úžØèÜ“þ¶—3ïix‹øáºâ‡ ë›V3 ,Uåå6t³”™k›ÎÒ4"óŒà f^ˆ¨óy¨‡Y’Úè,"êÈçH¨±^ñð Osãóoh¾ ¢é”˽Ñßhm^vã6PãOÙ—§¯Ö>’¡&sÝkË}b!šéÖúRñ‚ÀÓôR`‚Åê|O/=¾Ãu‘Ÿ¡u` ¼²ÊE™nD`§’çgŒçHÛ,ý¾oñ,ß_ärÿO¢…‰åµGШQpF-pʾ€Kn}t¦bc;¤Ì^"³ƒ9D âgú±ùº´Òô•b ŒMèzW)Å a ž†}öNÈuÞ9ñ 蟸ªŠa”sÑÀPÛ.ûk¥íCOïŽ0ª÷_#ï~hh?8«ÀDà¨(" w¦n.ÈáúÚÛv॓–Çp;™:@ê+"¦Y{’u{~-vЩڀAþzÎòñ‰RI¡4dâ!Ô:ùóö??cøÄ?©µÚñ‰C§wø˜¯õ?Ù!;HìGG`Àß_Ö+ñv$I iÀZÙÕ5Ð3S|<Þ…O,ðýï­àaŠjz³ídÚþ†Frhä¶UÔ䙡.|Ír"Xâ6ZÝH”h·gP–­° ŒŠù?sþÏå§âŸðyîãwÓ?Pš>OñqÿE@A??Û [ÐñÙh±¢†Ö&<Gzž<_ZÇma%$õcbtK. -‡ÜÆ‘8>¢ 'ãû"}¥0*©¹!šï Á…©‘‰`a$.8C1I›báN¯ÒúaÙ7_Ø%Þö5¾MJý×…(‡ñ¿S<{íqœX¦DÞÏu§þĘs »¼\”ò…¦´¥‰DÝ¥F-ýÚcšÖ²­U‡žiÁÊå±+¬˜ÂÖÊ–¥*20ÂŽPDè)ÙW»<åëîT5°'v(0§SþÏãtO>J‰h¢ˆÚ3œ Kr˜‹;zGjov¡ù:¬ ­¸ÝÅRÙ*u’BÉÌíÄwÿÆde{%ÿæ˜Ä`…Ð_rZjäpÖ˜s5“2½ýfZî ¾ZÊl`ò%úl!˜åLC¡†{o³<¨ï ½IO«ÓúgaïÍ1þÒÉé`e,WrÂ~ëç¨Ñy=½·Ûg½×&‹‰Ìq/.\54švLdF¬lJ6¨ %©²Ôzf©¤f ¸‹b£•Jª5•¬R©[h5…­µkiKmŠ-¶’–Rë’BIúHð÷I¢n›d›0µðÀûä²ϼCºìÚBŒ³æá¥yTM…púÄ4ЇÂù·Ò8ø–½ì‚ÜõUG«" ^ÐÖ±n("DJ‘‚G'×cc`Ý_½Á:£¹ Ì#ú¿}÷€~ñýÏëþœWsÝÝ T7ƒsŠÛår…u^kÔòc΃ü¾«½kp%ÙÂ¥@ñý§Ç·yÈ»ýð©¸_(Øyê„)è(ŠûêÆz·a˜(P<>`~"Kòþc½wÈá6×µ~¾Åh-º€ÿ¨ž™é*©7³j.épõpú®eE_PL"(dž½3]Q+ÎÉíÈ NŒ#¤üèD‡â­mäL¤Ñõ~Z¹—ø~—œœIõ?Uû ý˜Ð{´{Jûê,ûÜìž$Xéçò?yËRïù’¸tTäP+Ó3C ,Ãék-éACŒˆ*¤Pc›=wÆ0HVbš¤ý¸’›¹ÌØ“'ñ>?`ÙµëÞFna˜÷f6ӛܫ+öÇM•ð¿} ͳ®*ÔˆÐs ºKµ  TÏüNe `S—öÂÏ葤ЈPÑ©ÒØE—nÊ}'³ŠËÔWßi6•\·@‚›O2‡ö ¿JâÈ ó Äñ8ùNNpwÚQÄà?6üüÈ#ÝÿuL æáíù§wnãáŒ"–”PC&|»ê‰¤$Ц³0µƒ·È¸ÔÈf|Ý\¯d=« ?žMû N\ïo…ŸOÇ_Äß›Ã7IϺ0º»îò·?Ê–ãËÿ \ºÎ™§wþE 2’‹lÁ±F’i¶Þ‘þb½Hžy“½G…è+03˜-þrD±O­>ÀÚCø::ïXív#Ô/ÞŠüøS®E…D°£3™³÷ÿÃåˆ@CÁí*^¨:°Àõ Êñ_àOÍaÏÈÄÂÎ4Ð>í4¸ˆ52ÿÎ$B"~(QãèròÙøÍà/¼ûcñ?Ü*¼lOc>¦L Ô qD×¾¯ 1Ê÷¥n€‚v2þS7ü»ýàí÷E÷}^“HP`hÿÍþà…Äû›g‹ÿªíz¬«q}µ–|5Ç3ØñÛ­H€;³òwŸ³æu2±úÍû¸|îìÐ{ƒÁZi Jiû„a|¿sÛL ´¹'Áèœo)Òÿ¹Þ=$Â:`¿òBxõe_Ø?Ѷÿý‹ÈÄr“ï<ÙOR?<ý|­zÎöÁâ¾ ÃÝ®Ê(¸îæY}³2¼–79ïF{¿FfJµ¿*žÜâ"?Â{*ý{c.»,ÚIxÁW3ßAñÙ›*ÏUµôryýƒ@nìÕXOñè1M±MuÕb%„Sàý'&QÁ:9Êy †ùè[,:¡û!V©  B3 ˆß¦^é~<ì¼k?Z^ð8 ª‡r¨½Èz*"!Q‡àZÓA?æ˜C›•ÍÈrù / j .¿Ÿ²Âèrâ‹ÀvbΙùÞÜê+ È’ѳ~3ÔÕäØÞÚ¯Œ‹xÿ¼¿EQ…éi—PÓ³zl7 êü‚ÑÕåð:Û| ëýºÇK®ºá¼œƒJÑIjëè_=_¼€}ǵ MÒáIDûeQ„6 @ÇÛ¸ã£òŽoïõzŸ_Üà§ÒRR÷ÂÛ ? À‡ØQfʵ±èà{¨§û? ˜f›FõZEû9=Y@7Ê#ö’ þ\¿>Ô,HDæ–“¡ Þ‡}É ‡!¹»NCo‘M†8Sˆ)"ã –(hC1J–’+%w°‚%d`ä58ŒÝ&ú7¡DÈÅRQ¬÷‡qT{ŒÌXˆ"!öôp¡ixZZ°‚å“Ã^Pw"GΑ的ŽTIØW8oUœÿ¿ïáäѼÚ(vàäzT^+â?*mfWÉbqi¡ŠÁðƨWcó:™ý‚剔,– / }¤-%?G;]áÛéûØÎ„‡ÃèÚÀ¨Q¬vÀôFD“àÄþŽø“žº\­D³.5…S–Ì͵Y}|¹FÅ9g¹š*Û¯’‹ÿæqN_+Á>ÒüqÐ4Wç{ͺ‡õLC€…ü³‚w]¯^*|ŽX+ºQTjz}%âUáWôÕ þ²ŸrºÖù•Ù&o÷‰8RÏøÏ¡Qß«À‰ޤ þÜcüMãýOÅšƒO›sóñ|/‡wZù1ðúäsמC¸|¬¬ì”DŸŽëJ!ˆÏ_+õtò|z"ÿ/Fš,)Ì:/ ²Oî½ÇOÞƇÇ?ÍK!5 gûñ‰˜ÉóþO£î=àŸ¢üKÇÁt{AöAðÊj÷6p—¾=–áÁ›œGRB ƒ†ìóQC“£¡°‡ùP<uâ˜C.ßÝ{(öãÉ>Î…žž›å`©ü³=öœ8»6ÜÍèSxg°é›îÓ•(©©Á£ :SþBhqPÖPfH(Ä:‚šx¢ƒÐd†6I:TãµÝÀÃ5¥u¼t‰Áݹ ü õ®í¸±4°šáÈK³ÿ)É-k %y_ŸüÆ•ñŽÅÍßÅ_´ðd!DE(a/ ƒ -kL&ë³}Ä« H:¥ÕŽ)³¾;w¹z½}wÿ3c¥âÛ¶Ël>ºÔkc|[±ã>n|Ÿ5O“üó¤ ”¥Óöl#ë ù°/¤„ƒí CDÌÐ)Q‡DL•!2¢…".M%5º І¢þü'û¼q<„…1,Ô…@P” B”%ÒMí)ý‰äñüÎ(Û÷‡,´?°þ:Â|q«ŸïvÿU¶ß£4|ŸÑü+˜š;Kmä±a dAûý!\™ýÛÍŸù²mÐöôükªj*ñ‰“‰»WiwoúVص]1bWxMÿÐÌ™}Ü|L¹=¢jDe‡[Û0X&웜㻢^Ñj—\ŠõS…‘ú(H&Šˆ#ÐAy¿«ssìþ6:èã5õŸlïxo¯…}yyœà?mïÄýmÝ?ýsÉßÑçöR¸ºÂŸžŸ,††¢~!ßüŽÿ«É­jáÇü6¢ã_ŸÔs]Qþ”"žy[zÉ‹Ëo™ SˆDÓÆv(x…¥XôZoÉ1g˜m3óÃÎïºæ†ŸðƒúÕj *,ŠKÔË%Hj†úÈɪUd}xb.'Ç͇|í¤¥ _VÚĨ˜Ý)ˆBLÛi€E„&˜a1 @ëî}ŸÊÖ¼‰¾ÍˆpIã-'T-…`m”3œA<ÔQDCïáɦ…Ý)•Dd™0Aù–ñ'HÄÈ“ P)QS•!ns‰ d†I„ÉR_·ŽJfüuEEHL/N ̢—¤ç_B~M¨¨º›î¦¸…ä–†’”çÉ”²à‚Û.‚àSÇó3ô£ìº(—(p›´K ·ýFµÍ9†‡ä`ó¡V…Jûž€êû^w¸ÏKÙï:]*”ª*ºöáÔ.Ûý=qpÛq·¡ñGâ)ü?iá½áø|} PÀ‘N'g%(ûrH¿ 8íIºhV¿Wþ57å-î-Ï~«®²¬½œÅ÷”³i=ÀåHÙO R…À%¿“ÛÊU~Æéx‡fk??ÜA«(¶á"Ï:î{=_.q)CÖËä¾ÅM^Óøµ‰ó­ñ¬%ÿ¿ÅV2žŒâ(£rÍU´>u}“]'×uyÏûËë_«µçŽÛjÜRYí§-¾$GÅËH«£÷ù1Á¯48ˆ˜®/ ‹ /Š'­*H\‚UhĈf •ŸÝcÞtü éEöûPC´ƒï7’ ÉøŸÓT-DŤ" *õðãw&„ôðžò]ãü-ßuV…+Aìà¾ryD<õOžÌ!å°36ëÛNM›;Tš\üBr¶åÁò+ûÔA -̧ðüõ<%| †äÓ*£ÊÇ"]H¤hCåwFF AGWT`ôáhue’ºÃ¨¼7UíQ•R»šDô`|︜„B¨iƒ”ÿgÌQ(T'ó;>’"w‚}ã‚{ï´ÜÛuÁº™¸E¬©ikf±ÒžN<Œ«­Ó÷8^î»i{—QCÜïÉ@_uÀxá†ÏÒµ·'ZÜœ! ÐyÁÿøœåû$?¯öÃí^»Þw.‰8T—Ó‘#ÿÅöý({{„=Rª ’*¯þÂï’IáòÝ$‡¿er™›õ†÷ýœ´‚â¹µià‚rÿDé+' ˆz¹n" ’€Ks.„Üè€QÞ}ÍÞñeÞÿˆ›ßz“Îý/Ê7Ÿ*Î ™DÂ2{ÑDUAàð}7£'@î¿ÁÓüwb§ÜûI¬øàëlôÀ—G¢#¥B6Ùtå]뺣±Ç¨ÁSý¾¬YL¸¾ä/ó¤#ˆ.äÇò{?iØÿß®"ÈûhùÊ?ÚpÝ—Ö´ gô B“¨š]™Â‰ ¸4+ؘŸÕ°‡à_û¾Æûë#+}pý*Ÿ¬ôƒúC–š'nFCêCT¨¨~€nüCìz‹Þ ¿‘rÒ¢$du‘ù¿Æèõõ#Çbº¢æ\ÎÑÖOá&ÉÿGúó{þÓ§”‰õ”d)ÓÔé-»³ •5\If*>®† ÑU*訪·–Û†¹ºÒª¼x“ölÖm4ñ1?Û ÁFc aí„A <Áâ dáWSÅs94Ó»d/¸W¯Y0}4J µDme…:‘ç¨ÓÌÅcR—säÓîrûýøN|‘ßý7È0þ`!Äáòª& Ю\ ÛiÉ2v›”AýÁà+"€¬|‡; =:)Ú[—wò"Þ{ÜAl¯-)Cãw‘ÔŠ$#>+¤`È;°ûŸ‰Bh§(DG;ìô6CÉ@:ǰª*~õhÊ¡nv¸½ÍÎ*ößôTOÅUPNÆOé²kRÉö™¬Í€ùpÖ¿](?éÿÎý´ÑÖt ºœ|àèÒ‡äÉM$DDU$å€P¢P´{f}Kžñ6F0E"$–.À™›‹rß±Ãò?çm9ýõZ_uúÑg1ýÕ•¡"ˆå[Ù¾¤HN§ÔÑÏÇŠcaýufô2®FIhQþV¿Ê‚lî}¹sÛ·S°êï—g]‹½yyÓÄØ¢äÙ[Éz*Õ&Öxœ]I†‚-ï*'§ÄC¸äBØéቇ,?´ñн¬l®Ó2%SÍ·Ve·íû“jVM]ú‚ˆ ^r²¸¡U`QTj(p±ÓS¡áòó•GÛʿˑ:ÇÛ·Þ7ó†F•Ìnn6•|´×U»FÜu&ܪ;¨ 0‰B€?Ý2œ/Y#Õ†%ò“²úökvH!òó=‡¸ëöz²T0rk²ml¸×SávÛíG/K:^’çâoÃÉm#y˃Uª÷,-žÀóƒ¿é+ªcw Ž(îÚR,„›eó#çU—3~ ²ª±´4ËñÓÃý‰>6úŒÖ>úºÝzÓC~ÓŽ’;ê7ypAÇ«%ך¨šºtŽ*ØÓ-0.-vrtßypþyödžõ’'ÉOËIÿ_2 ª4¥¨h+ýx@5¬?~|o§ø^ïèçt¡Ó¬/¦©p>áy¿éôÐ=è ˆr$‰/"wˆ Ã3™L>î®›È ú[þxñö¨"€ª ïT_Àãúý6ò’ð—.þ•j„°a™¿Çõ±jqÿÜj æ×½:¨Ö•½úÌ{æûpSìÁÁ'x¢{Õ©Oç©9àÕP³eðÑò"o§Ðê—û¬ŸçAþu™Ä.É…wðU=ËD­e­HNP¬úC¥þ{–+¿S¿?Æ»]¿í÷z·î™®HØÛ0-S¾a£ŒÌvñÄaBåÿoõ±+þÒJüiÚëuº„BÇmü–êZ`×û¹|`ÖxÊÙy“ª1Ò?^_«ƒ­³bW E°î§1ü%¿o{^Ý֎ܸ`—è÷€í™ƒ‚º;P m¼ûc³Ç$¿]–HOìNÌÐiÆ {¼…îTßËZ:ÛþZQ×—º£ú¸:-rèÙ <ö’¡¬š½v”öD“wýÓ'™R”Óèïü®qÙ­ácۆⱌÔÿg¶ý-Ü“ñüƒ6#,;Ä}êËâý ûî}Ï­ë×üNLy™ôϸîb"TJ‚ ˆz2°(TDâöZÞǶ½0ʰ²BEψŸQGkõuùÛUD·]­€p§ÔÀ«ÇJ©Õü8xý¶vÉ$ÔLjÀãømØÔ©ôHj"C7úpk<±²#ø?'†tè@…ñ0¢ ˆÈ /^Æ­Üù¬_•V_¿q‡¥£]ö¸ƒ»åÓâ";äöeTìʧŠ@¿~„™(öÿêÿ±§ðö0ƒæËܳXnÇ âŽ 3…¯Þ·U÷í9]9?ªÞ@šnZZxýbLðµÚaý°ëÞ~“Ç{ÖjTÊàÆK<î½fÊ }Wúä{Þc˜zÙÕy÷W÷þOŒ üKÁ<)¬É0TÑûi·ËÌnRÖKI€kþ„ýB3ýïò^j«ª¬ ‚ª¢ˆ<ßþ×ò}Äúâ‹Ë>·½r}oNÂæIÝŒþØ?\Œ‡•óûG–!GÕDyÆÎÏÚ78î[}ë®±ÀŒM…‹§IÞF§`±:)X‡M=ï5Ì{GÇ%ýt¦ªôrª½}hµ6?cà㠱؊ !õ6Ðe^ï×Ýý:|Ñr>ñ{¶-çU¬5ý®§½:xÓ.ÈP˫΅ÏW´Q½úÍ xˆ `‡aUþ½ƒ:å&eÖR&‚ÙW¦ð¨¨±í|–ñ¾ûC®!zÁáð9¿/Lj’Vœò•Ó«>&…‡9Ý£ž¥õ<Ù·‘¼’¶ú(ªÇÐÃo°äWëNî½½ª?Åš›/ì)ö¡Ñì§GÁ•šr¿ßßÁÑQ‹vLO—oK+çO÷Ì=L±cúsfŸ&ïSQ³R„^ößö}'è~Êfýt3³"gù°C½CM±D (Já­9\°’ËB©±‘ÀǃE´(AA¶JÄDXDᨠH>±â?¥Jå}Š[[ßþñú¦4í=¹í#áüý ^.c+gU̧Žˆ îÍ•o¯¬^‹‹ “ÁòÈg¨ùNq¶çÅB‰%w©¼yLÉʆ‰¿”1~$Ï &/©èýO@ÚéžG@ëùp䔑IQ48Ša–¹‘ %£ü—Ì!ÒDOÙëõ¬k¯NQ:N?`NÊ*áñœÉÛ€‹ßîü¡tßÎëÿOÚö·æóÎóK§÷{jœóœjrîÙö¾o;’/Y]û0²ªŠ±ðu{n’Aá÷.-/ “®µ-e)R­X¢Þ6ä)DéVUS”Žù™Ž=LHÒDU™ÜƨB·Ù$¬Ý÷’(îïݹÜÛ3â²ùJ«Vkögué©Us¿-½Øc{:G—Y2™¿Á·ÄñDø°uÊIøŒÞ¨qêÂÔf¢UsºŠß܉™ŒJ2§U±+¢hvøÕ»îùY™  ŒVqCï¡ÒK)v˦¦ve=¾&]•aݪÊÛ.öæùTO—òІAH B/}θDL?ú$7\¶—?¼t×½$t÷ð&©4“㾉ô 2xF†/Ü"[‚Ó˜?´[á%™ÿ-ºªôw—/YQ0Û¥áŠGÙ@õ?C„?“àý3ÏùßËþ™çó'9ýÞ¡êIþ—ݶ­ƒlµ± ¥…Eà$é½íù”`ä!ðÎá@V?äªÐ!ìÚˆ¹Å¾TÑ\+øÅ¡S®=wÂóg¦ÖDæ£Û·_u =û!_cgÎÚCÒÂ;¿týAßÐY¥ûgÛ±Äìqn•Ø ¥×s{)Ý×áb,~]“ú¬¢‡sž÷ Iç{ë‡k4<Ë_÷s×ÙΩÊwtGâô±÷ùUËß"Ö…ô<ŽŽmh sµ¼!̸Å|Öß»\Ô­û}Ü øà…mpCèE6Ó{›š[÷MÊKxîu/.5öv(‚uIÉd+:¢ë>Ò*B£<Û‘ýâŠøE,¿&r8‰Ym*6î/±ÚÁ4W¼ö×ì¼]OÄ9kþ{5Í0û!7yUy޶ó]m¿ðáð»žíQqª*²**úŠã¼PõF`{ÌÁËF¤¨ì@Ö ð„Ü_=š‰^Àü§)A†Y†hÈ3ÿ’ð a˜I2óyO0,°!÷…@þˆª {_–* »Õœò½O²°Š‚Â!¥–zû>¿{´Ÿ”zùÚ¾pmx+ãHç ð•E Ñ&.ûÛúmG;Ýa±úÏÌ8|Ewñ¸>—ߟB•ÿÒó®ÃŸY“²Ýe‡Ö_È?”Ȱ$ú̬F)>+~æ±b#ûSë~gÄØù]¿ëg>ÿOÝ÷rÿÌG]„º(ªBÌ%{ŠYàa9røÝ÷`}5uæFÐWHÞFΰ-?ض¿±_äÝÕ'g1Æ"&6!Ò×…pÿǦ/Ê<¹ý‰g­³´”›.óLmü*.¾ËÊ7‘9•ù_^¶V²¥Eg00Ì%Õµ|a¹ló,s˪“vžó‚Ÿ³>ÕlÈ×ËïÛ>Ÿõbj¬Sìƒì˜?…üþW~v~€'̨8U.[÷©ÈPùvQEUš=DC«1šg › )¢Ìß¿#§ôßöâÆ'ûÖR/ô¾& ;B€Iß©Ð"Y¬ É¥4>؃Àdš,óxP†3ïo¼–à±í§¿pUAU¨åKo,$°òŽ_ò¸(xÇcxûÜfþÁU?øÿÛýE¶1ü@}›Ã÷ç!>…·!zÖütì\Ÿð¡U^å;Îïœ#“ôBŒ™l¹Ü';9êïîVèÕj•Ü úzÞÏ%H?Üà‚þG®}‡}*÷2ØÿU,·}AèïxKÅ¿xm¼AÃúYÀI¨À‘¼dB _À¯æû_B¨`ŽCù}CÈ0¢QùŽ?p rŸa/NiG!DL»AÏH+u°—êN_ºø'ä?d?ó°z»È%¡½Øi+\^_æ—ëcü#÷šÁ>ÂlæÍOáÜÀ±?“kÕ†“3Ð @²/¹ïà ÅVÍcúÊ¢Û`̈́Šˆ\Ò+à·=£Ë÷#Úï‚Pî㼕u™»lH­&”d)ñ6f¶Œ±a7jkûø{¾ÿë†EߌݱÏê­®’öÌ2½…!Å€K $J–0êþ ì˜¯é½úò?ɶûîÀ³_3«÷<›«Û¡§ DåCäÄépÃé)ÿ/í1?¸÷šÃ“]ðc²Ð໣€|¯]C–CÒŒ•È»Sž+¼ë/€aÉùR1(ĉ’7‚šv Oh?`Ÿú¥ŽÚY˜²=¢ùëá¾W®£¸¹zׯŸOúZ¼½(’ðÀèè–_æ÷ÈÿH¸c÷UäÀÔ=ßv>†öG˜ŸøÖÛ²kÜ¿×V`ÞÄ#ëÙ&Òu푚ÚY†êðý‚KÑ_ ÃR™P=Æþ ½H@:Oß$ì«}Ûf+´ÖúÕJ¢êW$¦c Á/‰€áµ‚»¥<¯ÃõNš9»óN‘¯sä èÃÑ7óÀ"]•#ª/“íÄ÷1†}R‰ÌÝ×`ÀTõ£¿ï^Ç!îi·Çÿm;g£¶ ñ= Œ‡Ö¥¤Z•=Wcð}F*ÅîVÂ&)E2LP åá¦S¼² ËÎÄé£rû£™ÛSôçéW±ì ˆ¯N3ÄZÝ¡5¢ÕT²u4º7yÊÛ°BöŠ• ­HߘdÖæó–°g($4hŸWì÷tʱEPŠçqv¶qã¾³£‰¢îðÍ‘ËS¨¨’\V«C“qâäU‡¨‹Ý’‘’»¥¶Ü7ëq¾ß»w ¼~{êŠ#àëµÕdê—Ÿ¡¥V>A§¢j¬~žiÂ?îjGä M“uãŸÌGNÅN§‡'>È™ç¨^ ơ؃օB!ôA”ðÅŸ½+@P<‰Î&†#ˆ¨¡b–(¢Ž>ŸK›±£[LÅ¿Ýi¡4xúñ5Óyʬƒ¨>®ª*9¢ -{ ø,$Íõ¬:ψèL†ýÉü á¾M多þxk:½3sËé²,îÑÇ‹ø7w|´Ú0€˜(ê, PÉzá>Ü9OJ9ðÌ d/¬>ôÀW‘(;Ñ!Mà„øÁ ÿU²ÚQz—…PvzèÚ`hb§]NÊz xX™!IEæG½Z² $ô8sDéŠ[mÉ?ŠÅ1¤#F8©šDêÂѰ–-%"5¤QEVж­9™CM@áDK2]EÓZW¨ˆ`˜ ;.SÜ 9+LQ-oYGbWP™&æQ:‹ò Eáò ÈÌ©/K´÷J'0&ÃðA> //$‚ü3c–Ó“f´I11ŠB6*¨Úņ3 Ò€,‹"¬ ­-R±Z4Z"Z 0À¸3AXPJ£ÖY¥›&µ¬‘MhÅ2`(Í­+ UÄê,Wþvœ¥6ŽLƒ–¾*‘§üúÞí†2ôÝŽƒT˜N5Üu¡â¿Är’ü(`ë?ö4ìx§®ëÕ÷h>í’bQ WÔ ª­1èö{µd;°S¤ôbŸ;>^ƒ&néã*0çlyzC ÙX8¤§mpIuÎHÒucǶÜz9€ÓK ¨Ÿ ÷O|,&-#”*ræ<ðÜ`lÉT(R˜©†Tè"P’dÆWÉ^£Ÿi'õgLð¬?ì²Ç÷Q›6õNúgæÈÉ’H’5kUÌuC¯Òj×èÇý¥º§îþo&ÕݾH›Ó]áÅ7@î«ú™¡ª)5¹w(;ÈX’!ʰšB‡£€;é¹HÂ>Ô…“oÿ(E‡ª­z“:ŽÊ:•/9ÈÈ» Ý/Z}Y¡qVÃ03ŠG¿a±vÃ6 ÎAÛÒ,>F†0¯R§ÎË Ñ–*ZR1ˆ•%TO«$ b¦ðxiûXØ7{äè‘^!ÜyéõXÙ ~ÍýcE^AÖpÏš/æíø§` €o½ùZô«æð;â'7ǼÓ* ~qu¢¶¤ª‰ Obê>\ lMh8d ´ºé_î• Ì~Ù§Är»1½¯uáÏ»¿º=_™E-H”„MRZ>ÐÛ¥ä"iþïç8nRGØ“”¿ÇY·{ÎO½mRË4 SBq<¢YT°ÐÌ”ÔLAAFcHd5FFJ”‰ˆÈBC†2sÜqd£ Á$J^ó^G×g­ÒãD<¿c×w(4}rV''uJáÁ\p§)N+•@¨. ýà od$O†r‡Ý'Ó“I7N(WÛ~^ ²uÞÏuW4íOwŽ<×¢?ªF]HI­°/‹Ô¯Ó4ûØ{÷Ðò $Ê& u`f`z*‘҅z’¦*Ì:’áÊ`¦À`0â Õê©*ü-?+’u£^¿{7à™7ºù$=ô!Ù„ã!`XY*bTy†àV»"NÙjM©v¨ÑJØ[{‚#¾DÓÆñаÿ¢A1V‰UXÁ$Hf:ÊJ¤Š)bЦtaX@X·ƒˆë²ÎI@êHõßÛ­ø8Ü¥ªÕa™Ç)Z[3(¾­ªº…²OA“€ºeƒ ]'‡ñNøÓÒfÓÔßÍÔÒîSê·+êfyF³G:L léUì‰$H;È„œ¡óÍï»|.D*/ÔfnâúÃØÿs&æd’R‰%ñAã7!òBëÓqÐh.+D*yÚ’‰u­h¦X4©˜`. lYTj*‚UPfgbjºÈNv-¨:‘,œ •ó”<x惣Vbt òÇ0I΂ËhVL±à£¨¦Ì*JTlÊi¼0”n¡½n JO´Î}Hh2ÄWixp†žs×c¨* i»˜e@ÐP€L4#@­%*Д@”ÄÕ£PL½xÅ’‰¥ª¢* ¢ÖbR1,HM0UC.,8¤!¬sƒê{‡s`ÚäXªtZ8˜¤Y/Sp"°zfÚ9زÂ^fçȲ)Щ ‡‹ó»^ÿãŽch0âëãW›ëx~Si—ÔaÞ~T„>aõTgN³Ãmm›ï'H¢¨ÙÏ=í¯G?¹C€&C0O Nk%% îƒHÙnG¸Y@„*ÈLöF {àAD8lVŒ¶ºUâÂû£?)ž¢[Ê¥™œö¾à‰f_DJdF…z‹è4³éE–”Âbªq¨&Ç^%¬Ô©Ï¢ÏO‘{—§ËÏñ´|)çy}9èÉirZEÜAÃ2ïI•Øi4.ïÏŸê0c€› S“pHŽ4µßîGã4õnòìÏØpNÇ #}ãÜ€> y «@4 AR’\•ÚAäíx:Ct“C@Q@-L,MPT  !B@R4Ê¡í`É‚UHI" ТЖ¢H)Š¢¢)" "šZ¨…  ¥TŠ€|è8¡ ¥Ýº2xž ë’Чz˼ÛP ³ÃKq‹pÂ8ÀÇÄMÔ„ŸŽÍ·²ÃÎ\MùRn” »X‚ñ¨Jyxb·,öƒ£Ï ÏØ!!Ëz-çÊ2âpê•­bÚQd32O6™×0Úƒá©·Óø©Í´ŽÄ“‘ÕHñ6>ˆpÕˆYÝ2Gzd4÷‡ý¦½5ªÁü‰„ ïéȧFul9æ™v60ôö7!àrø’Ñ3M2D°m·P,Öî'¶bêÁ 4Ë+AM4ÓrØR8§ölâÍáÂà#Ð67ÜSuÉÞ£ÀÔ»—A(ôÙ¦³ åðKñ¨ëˆd“'¯ièûzCG;ÔU­r÷µïÃjéÒN3à¸X.n—â¡>ßkМ¶y7än¥Òbe´¤*Á¹˜ DÉü.–LÌkuépEA•f§E3£â¬€ö@‰Y!¢Cv;£ÎÞ‡ 1 .:’J¡ H=e…!zäIFÍ[ö)7=¹&a÷}Áð²Íˆo'½`¨‚¡iD=t/eŠ)y!Љ‡&6Èôí¶i§CA¤0ŒÁ@AC " ¨^%¾4.á½U/'3]óÈs„åzø þŽá;¡™¨ª<\qŒ²DÛ_x—´né˜VæÚzqú}‡õ\w6,}­9½'v õß«6ó SDKwSè, ãRžëÓë¡}Y‘”z{™WjÒ±IEDGÑÖµôvêÊ‹¾•ÞW-½Ž/éq¸ÅéÕ™¿E|:϶…ë^K$:Ô4ó÷|Oi¯šçÏ¿ÉÙ8S9íÆ]*$ê¤ë³íðãÝÑ9n{–fS¥•-¨ÉB1ÓW‹&q¦s÷-‚š-´UÓÓ; äÐg&^*'[˜V$Ä•ž$¼Rõ5Ý•ÕíëèÈmßk;os:SÜ=Ô›)Q_bËÝa×ÕCOS^¤»Zt]e{hâïwÎiL˜NsÙ£õe8¿µþ óèï~ž{Ó7T1íõ}Ž~—ÝòòžÕê¹Ö#‰E´äÇ.´RŽï‹Oøáêvpå˧ßýï³Çr•ˆ‚'•%`#ÛPª/³jl*å£=¢€®6(ªÝXTÄÆÀÄ™€àÉ$!!ìÀnÚôrõb{:Ú<`ºéªN-ôÏ'ÌëôœÈG½JŠg†j`ÓrЮ 6 §³Ôñw=ÁÃÁ‚*ìá@ÐB¾»¹»0!Ç‚nËÿ9þ ˜>?Ü8¯Üß?nïdP}È!PO'TQÁ¤¾´1pß“àι4Õ,­f˜¬¯°» ãÔЩ2­ÌP1­$ŠL#ý…¢?{ uÅæ.㘞¥…/ž 1„¹Ò߬]ØàÑrÝØ¹SÒç‘lYï^›•à…î ·KA†ÎìŽ^TÞã …žU§€¨*µC”ã¼uâ÷ìÚSFâÍŸÔ©Vž-jÚtçµVûY%‰¶lº]9]3§‘š˜Á+ÚÐúÐÃ3gíc³…ªwrò½ºgÉ{O»*2#Ù¤/­vŽV7²ø=^4ÚDøGƒ43XÙ{#™.™Ñw[÷- Çå ô7ÏbóÌÚñx·+ÎEN ÊUA´z^+Ùè{½g['héÇTìå>\µs]BwÏ pu‡=mÆÃ{MëT“!5Â{3Øú~»Øw/ƒÁçÒÍ+ Ë{r³‚¡íáÊeŠäÈiˆ¸åÕƒ"£VPæQœ#ÐÛ¹ÚáÝøÿí};«Úåæ&ÝF÷×¹œ±´Î&!øY4åwK;—§6Ò¥:±Ë¬ö Z¶t hg±,·«CD2ÅV͸w-ð„ºw)×°²D«R!T§oΫåçSدôKœu¾½kC„˜õôæšBÎ~¶ò.ËŽƒ:½¨¬Xª™/¼~Þî›í*×ÉuñZ®Ð”*bkZK­': «Ó·j 'J ÆD€T}oÝûÐáï-àeàb¥øQqWÊy}Ö5*˜ìKo) ÎÞÌ©°;ó¥¸â²Â·T0“¼žöŠniêe=Ï32+¶¡£ITUW-lÈ™*¿gÔžêá¦Õ;>#Ÿ8næóð¹JL ·Æã¨tvUa6–[Q<Ši",¯:6æRÔ±„¼O+oðUh²œèTy¦©¥5¼xÙÛÕ40 ¬bl:ŒG•]ïÏ~«’‡-‚êʨH¢F‹_hïÏÐ÷oRÝ‹åSÅøñÖ7Ä_“ñùÔ+·ÎÕÉ7›ÆÝ¨õÙ^ò=–¨zÖ÷ž.!§v_Aígbª«&ä–êôs]^Џjϵca§¿Í;ÛìºÕ­á¥¤¹4SÝ&šBØY'Œæ·žø½—_‚7ª[âg¹A ý˜:ú»uòé?6 gfä¨FæIm:ÍÚí ­¨ÒËeÖJÕ–šõ­Õy‘˜m\|Èå³^‡:—[ ¡–©•±ºðØçZLÌä<#Zsõ,r°ÁÀëCj‚2¦I ™¬9@G@È›ªõt^~´ ¨ª»˜û™|g™&÷j7æ';e¿”>O/RäצÓÏ´F""íçðÍ‚gƒ™ÕÙz“«m×mÅìÞ‘‹¤Ä˜¨QŒWØ8tGYõ¸R;/Zþî ïÀaB èði¢ßHÓ…²áŒÌŒV{>Ÿ¸ø»lC¥-sÈZÐl© ÜDêPÒùÀ¤ØT‘Pã'èòóhžÏ—2ƒÉÆ­ˆÛQb(‚†cšȈ‘*cÑsm_MÇBj¤»Û1Ò)Xbw¤3M•8êÃÒtì‹4ð3Ùv@¹©n0 ¶D ÚH0m¡$’‚|œÓ§Qµ•­¥-¨Ñ¢2Œ£ ¬¼+YxW3?¢Ð`åÔkÙÒ³£‚..”{rXžl¾, ³®>‹õ2Þ3³¸,@è…Ù•Õ#‹ƒ½ÚÌ\ۼ΄Ú6/leG{‘ZT|zߣ¸jÚÑÍ«;\I²ß¨CàÙÏ­ƒ,“AqÁ …¬yTÉ”¶'Õ³PÙn,:—ÿb¾+ººÚ²Î°¤”ÅPk]»¡^Aa‰¥äo µÌ+À}NšçðŠêT¨ñÉw’ìX àZÏ·~ –‹ùv ’‹õ¯tSî yðÝ5¾¥³¿¹£ íyŸ ÉXÅe–s5³ ¬Â±ŒÕñ;i¬½(uðeÛÌšEí¦ñŸŸç¾˜¹ÃòD æ=¸a¦ÇšZLfX¶Y,õO¦m{¿“ßOÁ¹½žÎ¬…4l¬ö—°Ó9ñRœu«Q…€ºOyáÔRÔ°¢Ïì:)¥òAÍZ"›êìÇy{èóìEšöRôÍ›‘·$òËΓócçFù#gNÚÊ7±³×_cRåðo¸ŒUß­ÒJ±»šrôN•|’rÞ‡‘ ‚𧻎Ï·¿´”Õ…/ã˳šÍTá „æ PCˆhÞ‡wZ-fËŽ­[í×Jq9©+¼­îuj“RìÆkZm¦…¤Qh^zÎør´ªf×éI¢uc. ÊàØŽ|Ÿm¢¡”»e æ Š3Ɇªî3\(Úkj†•7N 3móc³7g¦‰«gÓ¥¦Î‡VU8‚~LCV¸“»Úw»Z”½k6ë%Ò»¶u_…øñ¦ØŽoG$VSg•£ŠjD§\RŽ¥T@–ù™R(Nшx•x{ Ý.Šo˜9ÛI¦¤—âî·›ÜyWgÀ‹ívZáܘ†I&E Ä‘EPß<î®÷š:÷Ü»»òñõÛ˜áAEæf¯¸jf˜Î·)’'¼®š rõòCuzoÕÝ·b©uj¢ê.£ ÜJÚî;~¯Xã©{/B¦Í}O³$›qœÖ†=ôƽZ™³SÅS:÷›:\os%Å[(†Þ…{¦Ô ¹®vmÇêï¸3Aå[öB­r-…³¢Õ+«-Xi‡•A‚¥õˆ©Þß·riâÝ¿$ö­a—SAüxæ§÷ä8ÓášúÖ~¥ý‹LJ²YÌóԅ1YhãIôÙYS:¦”Ù™)N»o®r6'š¦]æ¥÷¹-Ô±¯›†¿5)޲kC‚¥M'I½ÍŽYþþ måÜÞKZ´ÑTÏynôénlņø–$ºýò¡Ÿ†ÿJ[×,MŸMí1?Cˆi)EV2–œ¬ôÅ>ª¹¥ÝYæ¨ë-»•c°Z· r†Î6«æbҫȺÄÒ¶CBµ‹©>{³"€ÒÒs†Y3ÁŸ<„„‹)’ »ÓËk-¤qÃ$ãUx‚PÒfo ÈçÞ¬Z#c橹ìÁuÍq&lá †JdÈ­R:ô¾ÂÚh/òq‘#Mù×e•Š•V+¸°8w6½R­LÖG%¦—ã®hVv\úvÛi*Ðæ2×>×F+—lëãÍž¤¶ÆÒÌd¾Ö°ËZz2 •©“Õªš™j3«<Ü”± nQo`… Àe>‘ò¬\øàáA§háÇq ö ËWšþ|ðSLö˱¬t!wû0Õ“š±­A)ßx¶'wZâeo#æÌ2i@êù-ó\‘Vq‡RF¹6Ö„æQLT„À6m9òÛq$F½HÇS³  C£23,1wºÕ K%½Go{*Î5hÏ0ÛLȹ¶Æ{TƒYKÊF©Q}ªõ› ˆúÐ8»iÉ~5³eÕGLâ!+ûf:ÝÛœ\ÆÅÖ4Äã2~ÿËÙ®u¿içû·!JnŠÉ©,Òé8µC\2ØŒÒV@QBöN™^ïçSLú+À¢ o¼JÝ.+¶"Ê–e¨·QXÎ,¬RZˆ(¶Äܱê±åÒÙ÷æÖŸ&1‡Ó·N5±Ãîu»ñÝcÓÝ ¨.Šø é§UõøAòðë¬>±¢‹t‡»’ƒJé¥JûGË•§“á÷S>:K{Vó+Æí[ Î ÉáÇ5É8;6 ­uÖëéÛŠ¼I_s“Mqr餕`ÛÄè¹ÒÂË÷÷¸ Ô¥3oÇÉ[æ<¤¨û²áfÖ,hkß»"nG_ b+ñ[Jn¶†ÌŠÍ¨ôpTT¿Ö®Î%³•äΞ{|“Þùß¼ÓNÑþnéî(u/õ#z¨.מtéik9­aƒLW^DZ‘2¶_zXø2ij"^ Õ•_fÈýlí.<‹Ïøuù3â¨õ¸ÑÂ`ô ›ªV}=¶QJºòî±a š-¾Œ¸®\³rœ=D°‚Š†Ï¯0õÞ) L¹\ö®¤ ÈT8ùÒè<•Qs)Bµçº(ÔXTîÕ(\r8ÓšÇb½Lxs2ø»Õ† öàÚ!é[±a$³É#î¬/B~|¹ô®ÅÀ_Yûç]þ¤Äý­öÁõk=¶£aþ$´˜¯•î‡9Äæ³³¾pvv¯'ÓO›»ç÷tíõóÏo=»¸Ç^ô“ìÖµêWÑëzëŽþßM[êüx¾Üü|ÞO­Ëkù¯Êg ¬Ôì^¸íÕf–ÎøË,d¦¤O©»L)¼¾Õʵ çÍvìq=ŸšÛçK2ܹèE ilÅÑÀÍŒÐÞË5çË{£«Ak¬%˜*JØoÓuó`•ïÅnÝGÝŽ'G”­ˆ²jM¢·¬ÅD„c“G>‹ðÄC5û2—Q Åôn²c_ _º÷Ê<-ÃÜÆ+ZÕﮦ£ä‰¯½ËÓ®ÚÞÁäÒsÏN}¼Kòèkâã0ÇÙѦL‡J­E¨)m—ßÈC¡Œ ÉWIJc®Çb­5E­xA2O;p£²á²Äõæì¯¤ë?è¾tè{–¬~ûŽ3ÀÉ¿76i†ÖØ *OÇ!·“>†¹>­¤ ™3§o”i7‡™æ¬ÛΨüÔ3j˜ê™Œm Ôâý'€ñ«1 ÄÌŠ¬(€ªª2¶å÷Ó¡© Ö×Ð…µ*É^«¥§^ÞÒ}È­}qtoóe ñ±jvòfî¡&CQÁBÖ®Õž"¤s´qïéÒe&ᨈˆhLÃp”3fú2ta×ûÈ_7±=I÷ݲ qsÉøàåÜH+ÃÓ½Î=AÛ#Ó!™Y9ì ò§<ÎÓkÃJhŒäq~)$“ÃÆz½Òo6Ñ6yVO мnêÄèµëxꆶÖC‚õ¦K·Ç·TåÒ@¬åÛNº$ÆØUÑÚjÉËk%ïfмi-ìêké!¿.§9냢ɾ¢•²¦!$Å“j¨W˜™bÜÜÞq­ãL8ÝaA ±î=§= ²°ÙÒpTzlº°ÁÙ{" iìH¡ÃWn˜Î×Htj ÌÜe´©Í8¬Žåî&“³pôEöÉSk|ÝMñD¼Ây‰r¨Ö.ˆ.‰5㎠!­Öà³VozÖp6çѸpiÜfìÒKÇTž·¶{'?w_BŠ€°Nå’ªdžÕð”ÖTUŒ^<½¦Îi³¤ƒëXS±µ,Ë[ÌÜ ³Ú´èš|‰Ô•MÓ±˜å–*‚¾é¼8½v©‚¾5U9‚êmWªÙé%räɽÔlÞµøØ$í2mÜ îTó¤».6îq/ã ýæílòŒËÜ5vµ½üœ™¹Ë]œ†Æ\ÐÝ©q¢3™‘è]\®A£rµ;_¥f®£¡m™páØ«6}¹WË®ƒư;ÓªO6—Ó¾Ü Ê•`½[>¼ùP“íÔæ],Í•z(K+c•‡+Û;ý}jhÇ“úYÐÛÒb×¾ÌEqÙ±lÈ®¯FÇCNibU*b¥­²·—ß—B"qìf;›¾ e$h‘¶â—wy+ ü»Ï¶­™c,J{3@äêê µf‹™å•€á›)® ]5g¬œ¹7UoÒT^AlA3y¯,·Öà¦Sp„D͹µš÷/Ó U''["`9‚f¨f½úBû0««qÉnšúK’úû:í¼DÉonùßAµkd»BMÃåÓémøÎSÑìpõÜû_/ ‘jØx©isÎ|eò¢two9ÞÛÓìòû2u_LI¯—†,U– Ñ¿…ÔÛÄøõU%1Spãé.Ïr5¯xðJ Èðãŵb51ªe–Ÿó] y^|üÓ;ý]h0'­7 ‚‘D„Hò»±v-pu/t²§ í plÙ¼…•Ê/-É£„‰ êÍKÛcÜ õuô| ÇÀZõ¢j¡¶ôt—ÜK˜–qO‹CVzMÖÊk^o£”ß=îœõ’DØøa‡µÊÑ;$1Õâ™_bë; ðßaGÞ‰B—;Îtlº ûk®DÒ-ÖØÚBxêÃÀ¢úUè“o’™¢¯½¼\à¥ðRÌWMô& ‰&rZ7k„ ¶š(™„U ûÃa×%€NBʈ‰É/ –‰Ô ×mÂT x¹\2e˜Ú¥8«¦Ø":MB¾º]Ómõ QÎYÑ«³— mBÅ&†VŽ¡½ZÌÌ®el ™¤×úM^ú“JMÊ*é ©¢¸ÅKò 4 ZØÁ; ‚TTÖTG&d™ñ~?# ä\ÚÉø‡éªÓ~GǹùØñnª½] êr’†ñ * 6br#Š-‚ª*( ‹rt‡4ìÕû!U÷XN>ø#âýšwEO<Þ…æÝCŠm×Þ>ª;ˆç¯IyjH 7‘1Í&܈ÄÌ«"£¡S>ÛË•ÆJ6Z¡§¶tø.-V¨[c=ÚIâã·jÏ`/¾‡H>¯&ŒÁø·Ø-?‹óhy¼žfˆ? ó÷¹JMÚ /“Ûñ~H›œîp2Ë",ìMC:pŒjº1`Û{÷ËÛ¨íàÁmZjü”D;LœòÝYÚ@è乨i"C“±‘ÊŽÍTopâ)Bê@(·=MçŒ?m·C¡âp<ߪwÄ{Ö¿¯H„†ùÇŒDµv!Ršëæóø¼ß,|ÏvýסÔTD£±FóàåãRšÚµÜ»µy‰Ëó…r0x*A9f|Ûž÷>|†°õ==œ}¨ÒNê¡Ã˜_B.rqWV$Y !ãc6Hba`VUUs ÈVØV8ê €DÅ·e«•Ru.ïù¬XÁr:ù©ÝS»£ŸN³ãZÅÂNÀšvbä¼iY[• 6áÊ׆¤Ma¸ŠllÀd˜b=öNWs0Ðä‘hÂÐDÍaÌsTeìZhùÒIÕ,ßzÛGÝ<_–Êã¡2OÕ»ÝÙ&1êµ¥„™/ÊN¢;¤™zDíG~|Û«ÖxÕZT]H•ï–ÝQsiZš±.^\ÝjDš./[¡J g¤*';ŽQ¬ò#gWÛò¹áyÍtà|h2ƒš«%çöGjˆã—IÛ?fãGr![àÁ#í¯Š¸¥…>ÌzñËßćÒL‡^ªƒçåkqcê Ç“–6PŒ`PÍ"dn@ΕrâÏåMÍ}TZÆZtJV.×YUU„âUx£”…G)pTDÕб»\©TbÊ™ÑRá(‹‚F,/I*ªE•6=Í211îé¬AlèÕTV¨Lƒ£aŸŸ.–KƒÇ7û—¶ºè¥GÇi*‡øÝćuê€på‚'LÖ¹¾Ö±Ò¬Ä;< ãõ𠬢††“Ü,~éÊ– «w¥[¶.,‘›9¬à…F€ÛÎß‚åܰà1p8*I¤¦\ùVi]Øo]–¹-8 Uáo1¦]§ÚK1I1›Ë{¢þKÅ™6šÎfdç3 /AÀíÛ }Ž “—šbÜÃw|ÆŒ‘¨»©EÝ­¾Zo«ªÈd4Ò ×¤`ð•c^L.–!Ë%L‡!ü îá:…i“ž•׆rm ‰U\ªÈ€SeN ÍÇáLl fk¦EAU^ ~whôB‚‹ê,î1½îg³…^†Öºfñ·×µU¼ûœ4zP#ìbÞB‰½atÓº&Ä938v'°ë¦Y¤Z¶.®9S‡ ðp+óÁèe‰=DI•®=ËÚÜ4@ë‘ÛV»¾¹x‰§)ªâhqKó±í;A2   ¢„»ÅL½uņ܈`z(¥IC gfŒ3t]½ß‹ } Ws—Äß[|¸ª( pú:íÒf>j÷ãYx¿‡žéJƒÚ㤉sé#¹Ú\«V®4q÷+Å@eA¥›Œ®1ì^sÞŒ÷e=ï ŠÄŠ¾Ë§iôU].ë44½ˆqÇèù|ÿOçÝŽï©Ù`Ø÷öFÈ)3HÌ}ýû{9}¤Ü/¼˜t)sÿž›¾·‡ê»ÿ§„O»H•|~<¯çŽn–?ÓÑpó|ë“ tx­éo§ìu/Ìõ2a:Y󆚇݄! G¹eûµ ø š³¹êø·m%¯‡òòßκ¿d%27øß ?XÝË|_Yàø>+ŸœŸ]:‰z$P«dêcåU>˜¢ßN«4°å–±6ÎfúN,jL´áírnimUæÿRúÎÚÞpÛ$»·«ëŸÅt£@ؘø %”[AÄ©÷†{ßW0nˆ* »»ùc ].½¿*s¾¡^l¿>"?3ºÊÕt]¾ØoM¢ Ú¶áÇÉMÍGáù±ãX^”æ´3¯Þô¢ÕÏN‡™ËgçWŽ=Ö& –®Éy“5iÂËÅ<ÎÈöxȲóºVĬåÃ.óÑËáßò!úë$Œ/¹<Äê,»/Rmà-•‚ñ:Ü(2K×Ì’_U–ÆJ1\q*˜ÔÐÄþ#ìviúkØ9Gµ-æ!?}/šï‡Ù[EÃ2}¥Æ ÌeÈ#„Ê™c‚íGj½œ½öMÛ3¤ÌÏnÐâz?A›ô mè¡à‡_Ûâ‚äG(Û.œ0ÏßVg ŠmC\–öÚqíLÉ}:{M¬ìݬ0;•±¡_:+k¦öK+D y`e¢óIvï‰hò;üÓx»ýâù¾wû¾ýÆ>•^Ìþbƪ? _—ùЇ´=¿T÷DŸ Ouõ»ê" ädï ÜkM¤n ({ÿâ餥̀aX)3Þú~m¯«L|½z~òBÏ!=®«ô¹Tõ]ÄTÝ”Ñ܇’±†DVejàÎL÷ŽDKA®÷#áTUÛMeKPñîp@æ]Û™RÜó®ª`H=È9`<ȃ³óµ¸«—å÷Ñïξúd#cÂãy÷pííƒö;I±®O?Ð÷¯ðá:7Ö£Z·Lýþ1<´¬QÁãæÅ¯EØíöx¯ÊáŒeº, ¬Î/B~ß |¹Ù-³ÚU¸÷^XÙ™³Õ:ogT<Û¤P¡g{$Ò$ÚY¥¶ûŸºý§åû³ajÂÙU³ Gê—ò©kåÜePº÷~ž÷îÝÖ^ûXå¨ur£ªÅ‹ÊÑRÒDùvë‡Ê¤™Dn1ÙãËJ¿ßD?m:k|gÖ‹ž†ÒÆÈ)ÀœvÑ_HóÓ†ËÕ ûp@íl±Ç kmQ2–e R!\B¨ $Ú ù¥A’Åk ½hD‰u”ÍPÒ—®â¬ÑêWÔ ²|²­Z3ÊŠ4 AŽÎÒZÂc.—`¥È§UµDH²) JªÎÔÇb]n3¤¸Öoâ¶â8õpÚà ªˆ²…f,Sžä·Æä¸&,¶Â«’² ¢¾¥†%Õ<Ô¢}(N›™Á÷ ¾H{Ù•zéˆ0ÇUõæ {ËÔè‰4Q†fde1#9«"WMÖjcÖ+Œ¸Ã•UBÖ®hƒðlïn¿œˆWöJIç O³ñüš×ÚjHN^^cþ&±»NòÊ4[!ðk¯¤§ÀþWícÁC&L$}IÛé}ÿš\ÌPõÚ¯/AÏ8€—≊÷ôY›꟟Jc™÷#ÁÁï~Í]Œr)LÃÿ¼ëAd‚Åô Î«_Œy}Žö¿våç¬}}gWÍK·¼b…×3+ךU¼cq5N×®e÷XàášÂ"óáL±E{Ù6ífóîÚ{ír[­¯Z©,L»0_[w9¢¹{{¦Ùj±ð¾V‹›å½ͰÉ0 ,8òC‘ø‡¹.,³ˆnã8\#‹‚å1‘-]¶–»ÉûeìffcÈTVdŒ´Üäí¢µÃ„AÖIàÜ}ÔHùn*Ünr¿>¬+B²Kab$>-[&=î|––²‡(¸`ÑäaªÈÈ¢w0 0~‹ §›TýFáQ þiï”}àó’}ËËËgÝhæ0Ã)BÁ…rT|d¨“.D*,¹b •QøR›˜@À~œL½Ÿºá»¾ÁCˆ…J|È>Fœ’ ”€¡¢&$ ÷'(¢¢‰¨žV2íõéck+v@„5'@ »ÜÇUL͆ʉÚ>T 4‘RE4ÐZ¡Q¬¨ÄX©tý\¨aaÓîðóI<¤^3Žèg™ G×/kvk~è÷VÃÕ$È¡*¯Ê/H¬ýn»}CÒ¦”##Ñö™QBeíRS Ì$”Áõ´­øÐ—Ûpg<úF¿¯á[_Ù®¶uIÙÅŽ ÑîòŽÙí–ãËöEËíN™§wúö€ÊQm˜&ãv!ó®¿4¶:)EäôÆÈý6":mÙë®ldEÓ5Èï`ÅWfGLèÕ¨WwO¨äwv9ÀUsÙê ZI«Ó¾bB½’dDD4#¾XëÛ—¡jÈîwÔãXi ­ê-cC8 3-…¿QŸTEËtÏ‹f(G¹Ÿ™]ÁCBG§U7àÅÐæ н}sUè«,ÁU¡*ÉB¤P²Y‚\ÄNãaƒ.Ë*½™5 dhæëç¡ÉØX‹Õ`k/W•Q…KÙ‰u#‰Eê"RÕs9áìüYãSkZ:~‚ïMúq_^CÞ磪¥ªAèv8¯Ve´_Ì… Ò;rÙ çöªç̈01–w¹9‘ê˜i1A„ÓçG»ÍÝd`²M%4‘AT•tEÀÂÀw »éT„ÉÈK}Ï»©·ÒÏ®Žn·£Öú’³Ô!*¤¨Ií¯®y}%û#·«ÈB…Qm.½Jî‚êðÇ ¥6Ëh†TNYµÕÑÓT{ó|n( ú‚O¢6âreë)AQ%–”P‚¶’·v™Ùé‚¢©ž’É`¦%FÒA;Eía\¨ç1ì;~± <ÝZ:ë®-¿ï6ß<—”@‚:+BE+-©i (QÎ/·Q6hÛ4™Š§4g•&Aüyè\Ð{NßèWèsù=·ÝîS“B82?{¿ÍÊ&¬‘wi?”pGøÞ'ùæ†ò^“˜—üFÏ#ø¬yrÃúW+ýwe¼$_ðø¡7ÞèWö`3º‘ßë¸ÑÅo„ØÕ•:ÜuÍT;U`f‡1Ñ¢ƒ×êrɇ´ßôÿ^Õh°Œr}wr6vºà£ŸÛ¶Ýš_}õ¼Tý‡Ûçq¥j¿k±ù®ÄuBEþóì­¬naríiðÅdÃôA­k2JÎ8š¾w9©dÊû¼¨¥ Šî~ ´\UŽ.Îi¼è@] 6ýôð”ëœÑBF‰´D/Ýç™1?eü”çZçËÊûá9SÛŽISÓEæ]MÝ£#—{÷M‘Ï/”n‹ÃÊiM¾\œX–/k¼–CŠgbkþlÍúß1Î<ÈÂ$XGtpÄðw/WîžSjß­zâº÷â'õœ0Ž-MNµJ×pý×FîYšßHm”G(>çï;bWUrëD²ÖiéhíöŽ«;"ÅUÃD2ðï¿›>•þS‚™aª÷XM˜~iŸwl,F!’öñ±”]ŒãGàwãèÚõã·'>faˆŸkS+z; haÑ2>ŽõqfJäQ,©vvšÄX‡®;T©YE½îèÛÛbØåMÕaaÏx êìeB9"§à‰jwÛ&OŽäݼèîÞÐÍ¡™Òy¡©3®=¯ ÞìbnˆVOŽÒ0€´ÌT¸ÛKº¾üâ÷Ê‚‘še¼šø^ë ù>ðÈ»‰4÷û`Ñ7AÉ6«’k³²[!¸ÛØ?ÅøÃFó†)à‚Úh» ShfDKaªÜJ„˜T…ˆd’’˜²ÃbÞºµ@ÿ`´P&jøØ 9\Ì6±Ê4”Qb0QTJoÆjNÜÝÂJÈqfpŒ6¦ßÌOùÑ1a €Jª)!DïÏCâ”>ûvžyë‡HqtYqï~¸~ÿõ•<¬–~~Ðü$YÇÀËùÓÓùã¨wççã¿ ð¢«Ò’OTAj=~ù ä_Â_xq½%A飰ý³ˆÃ®$úèo;Ö¯ï©1ïœÒ’]Éíùc~¿v„Cñ–y{–u²ž/ïTy€õ?¹+¤ U•X÷Gk#zú¨'ã°†”@>@Ái—ÔQêžA|.†Ãáä²·&ÿ«º †"©–*ˆ Eˆ¡6DГ֫`;!ŒøÐÌ:°   |˜Ø üMà_ÌýOè ±W«ïÔù›~®eÿæýš«7Í™¿€Tmž¹½©Èg(n>7w[U]XäJïoòÜí]|?èa·×¦ñ/g 6ãô? ý·ÅÎøà¹pyF»¿NGÙYD÷Ⱦ÷ò\ßg8E^NÕ?žûOá†nJË¿wº>çºëŸø÷žôw!&µöÿxSÖ$ƒ–9ÚIFW\´øb²aûkZÌ…’³Ž ¯ò꥓+îðÝè¥Êk‘ãaõFË’ÉÉÙÍâ5ˆ ¦I°—’žŸnúibÂF¨4Z •Ûýé0Ú#’k&þ²ølíÛVÓÔüM< l^Ÿ¶| :út™?v(ÛfþnÕNžGÊiÔsGÏšlŽü¾W‹¾Êùs4÷MdÝ–îV·#¢Î-w–²3ò«Ç.?}ùÎÑ=^õäàÈííé·…wû_¢Ù0ç¿=¼6®×s6Ï¢u]׬çºð÷­z¼7w~by¸e!§ñ ©ÞøpããþOvªm~ÇéÝ'KñƒÌº+Ú»¤üŸý(•[¿žu¼¶V­µj«U]5¿î9¬´e ‚ÅaÈÒH:'»Cï!ýh›ÈùØÿ²K„ò7åUi¡ƒ)ø¯6%80áuÅPÉu¨}½v¡…õ øÉzˆMïâöÅ4ÿ úGw¿æœÛãÓ’SY;»¤ÙœŸÑý°ÝeáImÆ÷G}„Êþ:¿êÁÁpTÆ2J…½=åw’HŒ«’µG&“bŸ±ÃΡJ8¢Ü_ãó¸| :2ƒ"bo|#üw¼ÛÞ#²©yÒÞzø±ù0VYVjÍf¡ËûP[²E=ö5¤Tµžª%Rä?À¨$ζô<+}«uÎmíÑÈRš2À²öÓ -kMm˜¢Þ»§‰éШ@ö Q¶CH ­Œ,ñyyà[†Óƒv)Š—£Õ›m¦è%w•íÆkï:Rñyò¼éôÈÛZXnwÓÆ´ö/ZƳ]ò;Ÿ›hrž›Ëo¾÷»pD†{à-¶ûD®Z`¶{á¾Þƒ¼„ôx^a=©YQM¶·×Þ}ô»á¼ùæç%·x Ûî*›g/mgºrövÝÙ}ßeåxÎØJ}µõ¶ùê…Íï_W5Úyµ×v›µôS¯|ÃçT õÃéÕ/[Nnô¼ÎMÛ½PèsÚÒk½uWÑǶ÷6ÆJëÎÅ›³Óè(%â+ c'Ü7váG41²Þf= S{CÅ{z»Þóí÷úÞÞîëʽ7x\f÷{Г§Ž}µ÷Ý÷k6Ê¡Ñß}÷¼øòÛSMDW“AJFƤ£ë5öÛ•%.ËkÖöe){[»Ò‹·º3†c{{µ¾Æ¶§Þ7Øõ¶¥í•Dtkãì|{O{×8·oãɽb¨¾±Aím/cJ÷CÛÇÛáÙ°Ëxz(ç°ÛV±âÛ!th3šTúÐÔÛoº[³ãC1¬ “™ ú½L÷³ÕÜí_{½J†½ÝÙRû,uБZ6ÚÙ©Ö•u’âÉ퇕E ªzÄU{Xz笤²­e5Z€™{à÷)zk[ïN©=Ûµiïw6¬)=‡Žûm[Fn2ÎÙ®íxyíWGvÉÔ£Äkm1—N»îø/V¶™J^v}á—%b;ëÏD9›¶£){wkÕ ¹ËÙ Û!l}íëÛl‰lišMZõ}2inã»d³ZÀjïtª—´Ð$ÛQB‚\æ »°§EÎ÷€N€뤽H„42b244& =2 <Ó Ù=L‚hô™ 4ÀÒi6ša0&š)âz#jdÚe=SÉ™A¦šf¨d„ €@#I´ÑQ©ä ?IŠ~¨õ©ú 4“ÔÉ¡¡¦#@2d F @Ð  M¤‘AF‰ˆÅMý)íªzž£Iì$Ð=O)ié‘¢a2dДÄÄf¦À dÐÉ€i=L†hÁ 4Á1Ó&M4di¦A'ªRˆ$Ñ “$dôÄ4ÍÉêhÁI‘£ODÓ  21 šbhMiˆÓF#LdhbdÄb`db?T22hÐÑ Ð`RD&€šÀ€I“"m4%=†§¢z4ÓM)âj6Ì£ò“jÉ£&ÓPô‡¨“A z€ôÐÐl a£@Dˆ„@&! ˜˜Iêd4Ó<”Éé§©4Tñ©§¡'êOÕ6§¦ÒžHõj€ Ôz€õ4Ñ£@ÑéЦ€iÿë¤dˆ ŒGðÊE"þROÃM›Î»"f²†ˆ$‰‚Yùí´P±A¸*1Bbˆ ŦbÊ]€l375à €³ œ»¹Ík›ckP`µűTZƱ¶ŒÈÕ’ŠÅiê°yÃmÃVjÔÕÂwÌaá@}E@ûq4„DDA˜¥¦’¸C’-(´ ÑUËUr«—Mlm¶(ÚÔKJÍP)”u(¥ £¨ÈT¤•@ N¹j¥Ô Œ”… -+HZÁÉZD¡Bˆ‡A2R‰Xµ¨ØµFÆÒ[3h¢Ð•&Ñ“Q©M,ÒÓ6Å’¢6)+$Tšú®»@m-¨Û TÉŠ,Uñß„ë¦lȱb H”šÚ¢T™°M6Í4š’ªE+3$³ITD…þ¢k¦ÀYŠ Í·ämræ Ãa¿4Q(TDT©ª©6üŸÜýªé¸u" °hhjB@ÜEÁöã^ƒòðÞ;sˆéOÄ­¶Ì½lœ4 ïÜZ_áø×¤óÃËÅU „2UGX`t<GŠH„yýϵ`?Ö+£#QWö zÆ£óç·éÁú²•(‰?¦M/h°£¨yÀ@Š)i•eAý?F 舒e$”Ë-¥$ÙI$LDA' ýý(ô‰@ˆáY+fZÉhÚ(¦Gàÿ­/(ýk™" æ€û/l¡Æô @´D‹E"¥PŸZS°ÝËðÆB_sñ=ïåA<ÞCGÛó« ’÷ÑcëB“BöSýTHƒtYÑ̶ 'ùY¡1iÙôˆÑ°;´AôQ¼ˆÝeìûÏWO/ªÍ4¥F:#)ç'žyçžyç„âb¡ÔB1vÍÚ"U(¸±ræ\R”æ%Ë—y)é]É»*̤ÄCÍ urœWjTîð]SeÕÙp¢b€©‹z¹ˆšQJâ„(‡“réML]L Êš§™z áÍ!"êæddȈ™š36^EÓ¨˜yJ¤ÅÙr)ìÙ&î.nTššª^%J€Kº—·‰&ìºÕÔÌÁð“Ü=¹›ˆ—´aæ ÜÔÍÌE—y»•*%ÞnE$"Y'/p©ÕÓ½\8šš‹(=Ü  ¤Ú‚®*к´T£ Õ®…C¨{˜·’¡Ñ¥4åCÀzb*„¢ñ&T z7EåDQ™*â&¬Xrê³4åÃËÍ<Ü—^14biꔩ§{».Þ $!)¸§A$õü)B¥HÃääšœ‚Pf™§›«h‰k”ƒÄ—y™S2 šR“…!æfÜÜÉBº¡OB¬ÕÕÍ\Z6,Lˆwq4®m8µST&,šrä(›‡¢bb&S"¬MܦÝî&jªª…U\ºJ.¥[¨º·qJ¤&æ\*uNœÃ§IÕš ”ÒŠŠFª`Ãͼ@5Os4¢­¤ñ3ä9´ž ÌTÜI±9„.ÝýÕÕ]©˜˜šw{ˆ’ôöä‚bÓÚVT½¸$ÕÜ]ÓÓ§IæÈ˜™*Lš¹˜´¨UJU®&KÔ¢&`Ên%êÝRtó5v.îîîì]ÝÝÝØ¸•!(›¹/è*EýƒÈƒïÿ@Ö0è"ä—…K•wwe5»õ€–\$ðÏâ‚¿pÙ?Èsì>¹Òvnðý…ûÎ3X~¢‡Ô3rªv’AȤb&@§q™ÆÁ×aµÃÛHõ†ƒ¶¯¹~ÿÀñU>¿-Ð%ã}¹b Yú«ÑúÖrÄç<³Âo¼+æ'çR’[i/h’¿}3à^Î*'I}Y0‘J½¿2%´}Yâ'áÖ:.pwBÇ.Ї2)DEíúüÁ» U@Pà è«óÊ%(%-(@­H©B‚R­°B´!J‹$‰–gVç ö3ˆl$TB䈴P ¼œ$¹ :UH*•0Ò ™ÉY¤[ÒœDnÅÒ?[7®ÅGJ º¤’AŠ.°8m°¨ ¤Dã@Pв$íÇ4ÊQ˜Šð…@Þ6Žå‡ Ì2qêd™¼dÍ„åsdçW¨ME&ÊÓê7³½œzÝà¹{è¼ë‡[­°|$Ê™ª§ssêìÄÚu5nó0Buq$ÝÕÚ°öUº³!݈pò…%Nž"Õ‹]^ÛT‡''{«&];¼&íKÖRÝz„EeBr(Ú²ƒ…òQDÅ“f)ÚSÌѤñoUݽv Šƒ%Íÿðv\'𠈸‰üõD ' ™`~ÈÙGyöPyñTb¨ÉÃI1 pbGA H­Iepزô< @1¯V‡S§„²ÇâŠ>™±íôâëúßœó·î1vYÁ°£ô0QŸ@]—©gÀõÄÉTÌÜ)UO<0èûUø.µòj‡÷PTS¢x¢>X[{UQ¾ÝÛç|·Ô×Ê’"`Nu#»q”ÍÒ¹¹œºè;¦éb¹&L’f*"ˆ¹X°˜œš{ºÞ#—…<ïÌ·“ÖKlq#Çb£1™ˆ@±2k123PГRgÕÄCP…¡2S$¥¥LÌÈF”ÈR€È\”¦”³i@ÈU) 'b)Kæ]°y% ë<æjóJÎÇx^ nòX–è¢ z Ú[!çööEùºK¯ö‡§loòhq+NÔ•e@¡Å t\!¯~C<+ŒâháÏ8‚Ï{¨{Ê"ªP¥‚JÄt(z|†ñ¿jT(0¢¤7š3>ž')à[n‹H+J€Ñ²ÖöJ†[ã/eè“%ªÜ¥ )Ò*)ˆ>J,ôÕ8ù¿žþWed;4¢Lñá¨/DÔË‚LÚ¨Þ`xÅ>õ‰9LÊÖDˆÜ#Fb$ÈÛK"™Hêà ¤ÀËšL”ËÁÔc% ’Ä8Ì&ài†ßc¶1 Ã`q‡.¼U^ˆo4é7®pJ%:•Jщ磋 ‡×tÏõf`?¢2ÜN‚+‘L´B׆ÁÙø"¿ƒŸ˜IÀáå3¦ïÄ9-É_ioÄ|Ìmk;‚D|ükE¿(ÚĨ?¤x‰~ܺÂ,N8éaañð£~›Y&-;|E<¼­+Ä$PŒ# !b'O„¢ˆ1ôŽÀœ@vK#ºP|‚@|¯U·¸§ÁLán7·†üBdu í9ã3H¯w·íZoЮ>"§ Ì´¼úQŽÞçnvê׺ªÊ@ÌDÄ&e7Jpb‚âéã¥è.‘8„E³nÃVÏ¡Ìì” »§U¶š‚eAiÒ»§Óè4â¦óÔå+R³$Þ®²Þ5 £bn ¯CV®gÚdÜžœsKRr¼p„xäÕG‹YŠ;­.Á$Ý»…ï?s[‹<¼"—Ôc\™ Vð'9Ï“Wù§Ã?>‚X^˜‚A_æ¼ G;d|UNZI!êt§Ã"@š6¹zÉÛéÎÁ>ý/€qËñ¨„mÒÞzKg™ïÁ4VÄvêÀ%3%¨ÈPyÀÐ ‰Fî~YS¬ŠuDtW|hˆrˆ=ð¶fša¾zsfNÚ¤¶ñ(¢B>H_¬Q/¡@ªÞœ! ’ ”‚QéøCË Ûº‹ÈÅÈ` É,Æ6¦“¹ÇZÓ®¬VÖ”µ+J¨í©­šíÚÔQ†`Bü09 (h€t@œÕyKyÝVòœ´Íºê+%ƒS§RšƒrÒ:Ìu&J‰’ë^uÛb´˜¬µ¨Ù2jï:©Wyå6›Éj‚°ˆH€À…Ä©_צ3ËÜ(GR‹„€š05ƒ¡)VŒl \LHIç—M]ÌİÈâZáSJ›À™J‰@+ ‘W_ªï5K8Õ%µ\F$™®Z€L$ÈJÓ»mÍUÕÖS,¯’®hd2fÙ%)7.Ö’Ý×o-™ŠS„™Pׂ\£†\ðdº®7Œ ì¤ã|—H ”ï'±/žp ç "õ•we2)…:@ðCÂNéJNù&¯j„;áíž$I¼tHñƒx=$tCÄŸ=¼¾Çƒ©ÚC¢}3êƒÚ“™p”Ôø.Øçtuzô‡Ï ‚62‡ìØ·"àEG|Àä’HKKH 6@ )(Qï—„)¢CR” ’£ B`9(™'¢( PK‚b\ª¡¸)QzñMðöbð–a—'®b_ŠCŸ½€ûÅÓp„hQ–øç¼IUÚ¨¸Häœ# ŽÜà'.w‘ÄâZû– Ì¢&ïß9²p™˜LÈ‹N}M2ýwûÿáùÙ¶ö7÷ï d'ËìÒL\ÅwJ˜…çÜ¿så6ÆÿÏÉ£[\7h¶Xy¹°êìå¡êº LeÕÉ£Ï{o²«Ú±XÑ20j9ô‹*1%YaI35õ;T;¯T=Y€Q8jôŸY_ú©Å´2TÉ^º8·¿•æ—ƒ¾Œ+ßãÍ c’û1óØ?¹ÿúö:ÈN>N«L{qòÀÊ IŠíM¥¤E#¥³Y ’a•¯´= Îz½é&ò½Hƒ°ÎÓ„ A–Hm9*R‚v­·ŒO;[ck©¶@ÖM*îÈ¢„+“Tmª6eR•&L–ß0®VÁEl–¬kZóv»¦¹nL©“cA‹T¥)¤` Š#S»†‚Á͹¹D¦$Åci7MšÊ5¹]×U{4i·“- "Ä@5”i¶›)BÕÚx·P«ÆñTºì•¤µý•‚‹Å\ØÆ¾ap.wy(óp7»Tm¢DL@øeÞ.å_%¾™÷e¾;/[^ÕUò'8ˆbÔ‡Mš`Úö¿Îð¾hØ8Jxå ‰÷ ‘|gˆÊ£©&"­u}½Œeú½˜ vbžk(ª€¡·ÁT)(zaÀ]›Ã±Ò®'TŽÌ»ÊtNHU©€ùzN¾Væð$õFK0¦¡È¢€"å–>_“<^bi˜`} £“̓Eø'!Þà0F\áâØñæPPMÞöcü+£³Pû¹¸Ý¨—_€þóï ÇÑ‚l„JW/ýNÁôÀä@ú¡¿ïô@ÉWª)… *4¬B/|„ÇöýZëë’©Œ¾AÜ¿§ŠDÔ³’aõ²¼žkuªZ-ÙÙ¦Én@¿;Ç–S Ø^Ѻ˜æ“`Ît¬nŲTm¹Ceg6Zí¸÷˜)›kNbž8z|ß5_Š\ÛJ±ÛßÊù¤ržÇ¨…V•ùR‹ÆÂÓkJbf•šRjÝ‚òš™)âôäÎj’IȰúi_™äRófƒŒB¢q†`ih•‹P @iò@yZfTØD–“ÉH.ÇÉÐkb¦/BНL-\‹ØóFì;3û4o|4HÍNÌý˜cê¤8áºÍ"ØLH>v¦m03æg-PËd$L”©€#KPYCÀôO9œ¤>Q÷qÏi(­JQ]&é¥6É»´VܹØ¥(ˆŠŠþBsM/)KÔÃtÒˆ›y»m´Dä#$#/o/ÚzÉÏqæykµŸ_Ïñ‡å‡«ëzp„ŸJ©[U6Ý2šé˰S(5ü¸¸ûïgãå„£ÇbÁuìA¡{H‰1€œXL&0Æ@x‘`b‚&k(¦¹Þ¶¥XIÑaþÓÂÝìoaÚBޤHí<£(wôšdAÇHLJ )ûèD‰…i¡‚S…Š„Ñ) ŒB2´’¢Ä”B‘,0#(È%%!@H²BÄ(CùñŠªHH¤Jm†D¡¥+2­)µ¨Õ«j*ÔBŒ  ‚~™äûϸ~)ù™À>¤±ÏwZhf< àÞ ¦dÍ AOëÊA<ö´»ù 0ËËc°19å_,ò=…s5—åT]å4ƒvys’¯u£ž™ªa©¢f¾ÓÑÑ =tÎ8ì2ÚÑ™$žÖ§M‚Fe3303; b^B”|FiEÑËŠ}¢!Ê'p ýÛ:b~¬`‹Øýï/{ðlp@î”&Dd„ã6Úæª÷J£d,H’I$…)JR”¥)¤ÄID‘¨=€ÄË*Ê@L m˜(” @K˜Û[]5©Mj4ZÑVæº[ljšVÌVæµ¹Œ!š£8'䀬ɋ„NËv×6¯LƒŠ"=ÿþQ¸x=6”"óòpZŸÒÿ—ÚÃù¿ëûÙÎpVaÈÍLÈ8Æ©+Ç)ÇIµµ­ÿ ’¼ b•òWó×`ësh©aÀàÈ^30Ãj,5 CP§?¦ï}L[÷Ër—·þOô!ø¿k„+G§YhË÷¸?™ÌýÃü¯‡ü…ýLK^?¿ÿóñ<×ýZ(:È Cà¾ÜYÿ;Š»ÞŠñ<¦Edž^®ª!ø¿ÁýxdÉ{ º¥Í‚@x€»¼ñsÅÅàR¶ëõû}žÝo0bàÃØüfþï//‘“¢Z…ÞÖã0 w«çùø%m: ž?eÞŒÙÈ…ËÑtÝ@: Š(š‘d,ÄÁ»F®4æ’¦'Á†&@¿uPú“ì>×–¦ $ I‡Â_ÁypÓ§éã)&a?Äsd>á5ï%ï¾F¤%Zº°QZªtÞw®âö^Ázž”'*æ^„lŽŠÚLÃóÎCLL*]ØL&IN*((ô ¬ÕÒ>iìßÜH­-`çÄgúh´}Ðl½+é œB(wEôE-@> Ó¾ÜS‡µçà¼áô†ò³ÆF+㚀‹¼ìsÍyLÓ—ø2A ›W¢‰™ á½£›’ RiŽçeDb¦ˆ“§ž )µ¦}cœç©RFÎc"­}DYrf±˜Èm* As{= Ö.‰±Kp.}Ð`šCƒ`j$ð϶©›§ ݵâÏf|øH™=6Á8Ýõi<{©Àh¦P¼iM2>Ôˆ*h”¥¼2q[u¥1œ u`VA™‰œÜ‘5íúi'Í=PÖÒ56fDì\GE£)ç›·0ö³÷V\ó×މ̀ñùó_ÈßûÞKRl°3ÁIA9\ÖFV»ã»x+É Èb|·‡+M#]4ç!¶&´±H:…™t¶ ÄpÚš ‹›!¶ýï²á›p”Ú:3VDàã»™Ë+óØ×EšxØpFS´Ï;4ÑÇKWj­§xC¯ò„Zu¡ Gˆxßp‚ºÄkòÑ5öÔdPض:$j““3±’ˆÓÉbë‹.ŸWDmúÛ„n2HÏ‘¡¸²&U>²0Õ¤jF¨tcAÖ'(¦ÂQÈ3é¬n Ì)åÑž˜èó†'40)O|‚èŸÈ!:M=ÄaÓT;‹ÒK}߲ѡ?¹&ÙóMt3Y Ú`„&ÞN¯Hß½cY4pÓ ËÆ²ùz­~üÊbƒ,_`È_-\`{ôÒQ_ØÇ¼Üµkà) ¯²–U#JK™¼oiZS§{sP]ÎøááEHiÓã¿t•›}*-Í)Œq­ŽYÝÍxJk,Q¨gÑ~š§äš“Å® !òD\D×NwMÀºgGõÙðÙ5!Ôk×í†Q‹vj¢dË¢Þo{ÓÒ½mâÜ 6›ÞÁugÄ`™™˜’Ý4 ž`ÙtµºÑѳ¦o4[öeëü…“.)Û/*¾f0Nÿ³­µµ?}b`©C½ˆ^¼XKÞ|\'Sa Êt:8™s¡¶äj̨½ÜžŠYšg 'doì6¤ýåúh&‘Ô@ž V„£`õÑ. _Gnº'ºJYí‰I‘cè½^>"1¯“H €ÜŽllXqå~ÎbÝ=­­ûÇ!Ž­jjg×,'›Â“ëÓ(áâ --näÙšmá5q‹íDl캃vìïÜ!Þ1y¼+D‘Âs ·eWM1«†DkyôžÜ¤›u±Tí¶<ã –DÌ9S||ó3Qc?|V®Žò¤™»dKbtovc.æÔ:k ²òßѲÄûºÿ+î>ÛjýßÿOì~ú6ü°âþ|v|ue? ûÿ¯§ÿoõþWì~ŽÙ¾rm»ìáÀ`þ¦–T”B,€šazNíÓéZtm½«‰Þ²lùó³óçf3­,í`¯õ±ýoàQ¥Ë—@æ?¶ó;KòÿÁV õžë´cÜëoluc>”zÞFŒžn÷Ûðøþ©âž]Øo‹^fHÅáÙc¿À€ôM g¨að´ÎÒBƒ9‡Ó†?’îÙ,—‹Ú añpAxt\ЃÁ• O ¸—÷ôãÞj´õoÆ,Aìß nh¦dkzAîñ ¿ „Ly篔Óó½’š¬Ò §OÔRosn:‚»Å«¦¢E¬¥㸉îð½·™\ðÒFž*ì/Qj,¶ÅèEL;ŒÚh¾<üE¯5˜W½¢ÛóͺpZUTæ£. òÆ1n˘jƒ@Ï‚R^µCzø ÀߤÎ3 3 1—[f7¹iÆÆÌ/±:¹i8Á$KAô`±W‡0{ 6€ÞóH&I’¹ R±Ómó;Â|ò¼g8Àÿ{7] CßµüŸ«¢ë Žø¤DïÞÓ>þ9¶ê¦áQ][ª™àþú‹HKŒ9Ñ Ð¥o‹Í4†ƒ²<ª®Íl/VÅqêQE³ŒMÀøûfA³*eS;‰Â×  Q Ò¸ ¹û8ù)ßù]g©¤Ú|ׇ«g…NQÖ×ôs*0ÏJ×¢¼ï•]†|Þ¯j©Î÷˜%rÜÑÐì_[ÚºæÉfB#%ºÊiœ™j¸Ã=ÓÿŸ¤¼\üP¢™ ¨¨¨ˆ‚"bÃ| nú›˜dlváô ^¾Ž®Ì©¢=ðшœd q–~~‚÷~ð¢6]ËVoàáÛÕÊq¯»áçÛÑ”°S#$¾èhcËE0š0`bO]ÿÍí̱:AÚ#~ ᜃE Ý’üBdÎÖ±£§B÷²4ETI¶vÉêka³©Ã„›¬‚â&É™˜«¤rk¦¢[ºÂ)­8Wx‡Wƒ›fθ¬.á¾—@šõEú½Ó 1†4&Œ /u•šlëÄž˜:˜iiO.±} SÓ…:Є¾™`MÞ#j…ZÀ$`°¶Tծ؈¤¹ån,LU@óEÅM<ן´'EžŒxò¼+‡½Â­‰á9›2:…:gvL)d+•Ë%Êxº&‰çáõ„|c5š—8'ñ¶¬i´;:ûðkTŸ ÓsìY,¬R™¢²‡@$€Š—ï2#N¤Òª|e|tùó5ã·7@®Éõ™úLwEl,C+ ü0Ío¥FD²¨tWÜe’ ¼ðÖôåß´šóc¢µ4>¶”À›Æ,*±ŒPgÖ=è€4P²²1ÀD“–j•LݽkxØ©`ÐT)+'iç ;Ú®`˜šfu¤™_= [À_92‘ÀBЊ ©ïhžñLÓ^®2òKP)ºŒè¬ Eù‚÷òí 2ÇÚZ1¨Ó:Y()“¼Ý—ÎÚ÷ðR”µ‚›,/êNKÈWºVÞÔÛYã·ÎXg¯Mä»á–F e°¾Æ+äóê¶Pÿ­Hy &ˆ¤ÎáyË@‚^3™Ìÿ°z-èÀy N êËGÝ{1pÄs±Q΃¾ƒ9k´×‘6V&7Ô "þãJö4Šƒcªñ§ÁsPЙˆ®»­%¯<Þí-Aº\Í-¥9²ähvm»è æ%!¸%ᦪ@QÖ¢ Ï¿PûZ ñ‹‚:Å(ìï7`ѵMŠs“q¯Ã†µn®ÑVÙ>’ÊÄØk&4çæ¥¡°¥Í iðÏϧ:ãÇc¡Žµ^°TNÌd$5X‘kâøC@#|5ö;¶êdHf™i_ Os„bG»¾•ãhÓ¼ÙDOT… ™§©ß.zA°Q·ÕYs’ŒÆUÀÎB ð !p91‹æøŸ;äùSa¨ €=øáÉ©{bŒ˜6ñÇÆƒÌˆ…Å´ù&8 ¶ïëpȵ ,dì±Ì“ƒ©ï„Ö šéjvº;áPn˜h¢÷‰‡øœ0[†Ÿó¼›|P‚È€Â( Šòœñƒ^Àº%ÑÇ7‘¶ÄÍdú³BšEÏa*†ïŒëôËÞ¼ûþœ,XVþ°t‡Èã={‡µqòqa•CÔ˜M"Ä(±H,‚¤ÏŒšñ—™Å=W—¬6³·Ñᛥ®)ïù¸æWÜ+ÀpwÕ«,(›–š D­¨gËTÝå¯,L®c‹”8¦9ûqÁ±`€ï(÷ÕêWN>)š~ò»µššóV"çfêœB޼ñ‰XDrc51±”vƒ<.0© .NÊx#QC½Îý·NÙ"T´/…È-¼ù7ÖÚ±Y;`R'_Äx±pGY Ã!ðšíŸf˜3íš…Ïr&"Y®?±n¢Ó"•áÃx8úÉ ÇE07I/ Ï7¸0›Ä‚s¢2`€c9bÔhv•ñ)– –b€€-YGæ+ƒ£˜¡¤xF4$Jm0&Øš‡F!8bYÖ€ 0кӌ²@´¸¦^a´°l¡m€}XKhÝ …5¨±2€4•¬èðwöù>_o¾Dµ‘i‹,aÎÖñ`Ðw±ˆÆ„^LøèØžxóæëLc_”ð_ûvÈ…Í[¸V…’ôW-û¹¶hiz„À}Fi¿èâ'Èn$SDá.¯ØûÜúa¾Ã¸íÛ†ò9ùƒa0¦Bí_Pwò ÅIÇßÃk ¬ ˆaÐí]£­’‹-‘w¦s÷Iuüla<|x¸¦$wg`0H,ð€2;eР8òçÇC™ É ocTxuv– :6’ -ï!·=kíTîáÝ¡„ã@4ʳR{0GÛˆ€ÔA´…ö Cb,²Á[sbìh!Ь0ldÑ„s1)Q,LRYñ;æ¦cR<6ûÊÕäÌöúuÆ&‡+CŸúƒ@Ù?2òЯ‚™·AÄyp€]×y±jM¥`í7tÔ0Û–U[Màa2¾ÎeÎ@¢uMµtå:4á ŽX]Ô4.Òê’K1¥9#Ü`(šbji†‹oS¹‚à&»Ž0â !—vî‘°ñ@Éx˜MÌ L(‹BÝ B\T3CN¦AHH£à3Â$ÓD¦“âl3@ð›Ñ;,Ë?,7†â«£]æÇ“xš‚û™(„>4Œºîú˜¦E(â}³<¨&²ü÷Ü“;AUÖºÞ-þkÑúÒü‹<|××IñL£ÉÒ {+~ÇÑí~a(ùëŸâ\žÈy…ÝÉÛÐþsÑáêëªüùó{-¿ßÐCkÑ€·dYš7F0‰LS¶*l€ÆC°>õš¸AÆ9ÔµÄî'„o|GµËAÉ7‰ŠÏ>6“5¾;mWš2Dè•ÑN.†ˆH>çu.øL•¤!¾œÌA™^LXhozOàÎv›Ë.üÙ !C‚¦ç(dØ]_/QdL «JTRžpp³S‡+]!ž}ŒöH•‡éŠÊ^l~ÀßÅ-õX OcRã­UâŸ,­þvî…EÜ3´ÊPTC¢ÊïÏ:†>”Zô§Vg]I‚W¥9Òçæ–wÎÓêýy’šÿ!úÍÁF}üxfxéGÈþ˜öÿš€¡À¹qˆfoè0ÏE»Åæ«ÉD!f/¿Ôq(7„:ÐS[„NñUXÓÃD¥das–ÌF¸ëÁhò&K¿ Éd i”LÓTÓïè¥_ Öãµ:¶+ 8êêêí»®¨Ôµ–ˆn§ 8NlÕƒ¬Ê.ów ÄMñOw;âÎñ˜Ì6dÌ<"I0Î1y_}fˆ§;ô¼¤0/ÍŽ ,J‚ϰ„ påëÞçÍxç`Ñ*غäÇÌHg!}"ž¬Lñsœy!à—–l’(WÖ ¨`­Î Â~=8Tø[xñáÌ×év¾87J%ƒRj÷òšW• ŽÎë«9*W~Ön‘7 ì[›×@j9Ðzœr±Ð;dÌmfLo¶¤û=ü™Ì¥ÊŽkÂDbû3k41rB4Io"v ãz™è16À6ÄÊÿtÍút?-Ȳ(ù•_ŒsÐßPÝ ÓŒqÁXþî¸õ´Žòò m8OŸ¤»t€a×ÖìYÌ@Е–F4ºÙLHrOéÏE!*eªtó„í•Þ8ûp p²k"뛂&‰}9žÍ ´äsôgÄU÷®’I$–_¡ìƳ£Â¦¹ðœ ÀÎç)(–1\ôÎ[,^¥DÌAº<âÛ¯EÙ ‰C¬iêVü Ö;²òYÍÔ¶¶9K00agaX^žè§Ù‰>‚$ ^iáuŒºÜR”ɨ4ÌŽ:P±šH¬?¸²s þOoÇnÑý[ ¸b9ð`‡‚¹d=“=è3^@0Æq_<êÀs?qïA7A¦¬Pí뺽:¢‘&A†ìŽª/»©¬CNÐ(Þ™Ù®tvÈ žZ*Û®lW•†Ó ›°ó᱑¿B5ZÆ!«Àñ;¼Æµ„ kÐ1“¶·Ìls'[»Wã>h ªg›‚AhHB|K*™’òb½óP0ŽíÛc$’ž>ÕSGˆAŽÀ-=Ŷ[È­°MKß/F®ÐrÓTµó¦Ç1a4§òró ÀâƒH.íÄ8E.Îß­1]]’ú|5ì1¡Û;‡·òñÇxöug® ! ¹~ïä¹ûR¥ð6À3@sùÇàVdßG}¼¾úzdG^?”_ÊT5vƒRʽ\·é¼Í«±%R!ˆa˜iʯ<íf#Î*%öa¡@ GÉ)‚ ªþ÷Ñ66ݬ:¹ú¨úšç+­†‡v¥é Œ*ƒámÝ¡S.û4)U¸Œ ;uüCC#SEZã[héÓ†{&#UA‚UÈÀ|XeJ)bÄ©Lí¥\ hb‚LņH¢__wÅÝÕâ=]BwµdýuË#ß&/¹]ð3a²CÍEõK’Õi88O.b¾òNïo§§†®É èK©2Òr-Ìo·¼wî¼rŸgvéúˆÁÆe¯À,<é5½Î›¶¿ŸôF½Š ”~d<„åR€`{ “ó~ícĈŸ<Ðf… é¿ÇâäR1Ó?jF¤Zé²½³a›5líà¿ —Ï…dDI†pü;—¯éŸtÄ⸹ÇÑ"QÎîF=þÑ lhZYRL“ Í¿ëßÓÚd8AÈ~‚ñïeÝŠ3s@—íç÷oÕmdèn†µ$Ò}µŒ;—ã˜s²o_QÝéFxåRM÷üÍÂo„¥ÊCÍa2¾-ò‡é¨KL3¸EŒØ\LÜ¢(¢$Ñâû†òô÷üÍ;RØ^õ,öô„.!*^kÏpÉÚR YäôeT¥C“LÑ܉UÅéë+ÊAb[$Kóã0Ìf¸ö/Š‚A>;LS]úY“A#ê~¿1åõ¬çÄùù´×ZH›§X™W¬²ŸŒšg³Jì»%RKS6mÅ:`€äö5ÖªHàyZó§d”K""¨•šwj0Æ(P˜7s|ulµË)Y4aÕ1Šüã`ÒVO21rB3ôç;D%Tf„[IœP‹›Œ@h¡é›Ž:/Û´¬©A[< D¼R1æt8‡ƒìéö® 25ÅÀÉVG±ÍÜ3ç"ÑT’ê5øTÍÓêQ 5"cr3ÊÍ“J3.ÊÁ™aQªª0½Ç~«[°’î2žûfµ+ Œ1½#SÌ…ãÅF1¬"¬l§|Dà•-P4åyHÂ/A Û0Fv1 dŸ¢x¡Túì®™ôŒ’Ûà”js™*•1a…xL “p½ËðT?FCÌvî9‚ÅÍÍsX4M93“”Q;;ã i.ŒR{ 9ƒÌ¢ˆæÛ"ãs¡dì#{âŒ,Q*ܸ  2fDnõìÒòBIÌóo:CS—4 <uçè:uáÐŽr`϶5Åw2·žF4ŽƒicHJóË@ýh~Q.¹MnÃvRÁ'€ìPëjgŽ;¦h"-•@ÔÍÔ‚…Qšaðĉr„³þD@?ˆü-}¬|8äûbï²zíåúO£ DŠ$yÕ߉‘ÚkPøKeÇoLüÑbp8Gs¯Ê@AÁ'pDWxqfJ'È€¨ÁpZ>@v½‘êQ4×­!– U{q¼k-+‹Cj›®šõ-xlpöoƒiðk®S“ …̽=…èšcLg•å1ßN.¦Áa'4=]ǽ¦4åu;áXž‹°æ® ¾T0‘$ÙÙjÓƒ"1MTñ˜0ÀyØw2Ew0bi‘:×@úî>áÍs ÷'ó\;”Ý‹/æNÚ½}Íì7z ?Û¨Òܨ¶ü¨;›Ó±ÍaqËN¬TðYsaÖ…|ëÕ8ÍJÊíjà7oôé¶­gÁ°ÂÂInt÷xeÖltÊ!¤ýX„æÃm A9qzNÌ1™dNF‡v‰‚݆Îùö¾ñsžÒ7§±õ×ìqõ îb`l€5?F&¦0Y$`!ºFT3¥Žî<¡”E{Y0@.¹šèG¨˜}K5TO3r±ÌaÍ9šRYZ$_4G' =3Š‹×óP%®*á¢A&lu÷§8q¦*Cm“CƒâÛ£a“™)zª™S¥³~i­«uñ¬òÌ‰Ì )ëk+‡‘Ü^ÀÄqˆÏì?e™ƒDgâgáˆT¬O ‚A}sé6¯‚»¶p÷`,¿tæ÷Þœ•¬ö¬¨Í¹Kª“Æ :l.è ™1›m,#)¦¶ž9]1[Å—Ã7I¯«×¤Q3U¤ö«lÂg+@(&AC ¥.aˆ6>~†è´ò‚ wtdÁp;Îg¸g eYÐ:uIÌ>Àš¤o_Þ<.ÿ²{¬ñ Ø»s_^.Oγà,}½»×~Áv.©Ã‰„Yâ#†~”êíLR|Vld$Ú˜H@XB¢†ÁìòŽÒ9ü·îÚ8"–ÏÅK Ç=:.rffØzzpÖÒ’JHC€Ãó/"4ú†,B4İä_nü¾Ñ™á\ü½y Ö_°ô‡ }½cvRNâjf°ÚØ'.ŽÆWÙª„ØpÉ”ÖAºd¾&Afàíëœ.žƒ«àJ‰=Í ³«_Yƒ!0–ŒÈîÎÿ]]½Np&Gy0γmzêÎj(¥"f 7ß_«9†’«f€7tÓÊ8÷×`¢&ˆ-£ø@ÌKiŽ ð˸OˆOBD ò Eæº+XßÏD 3eÑsȪ};̉Cu…¬~qæõ>Q<ŸÝáˆ!wÜëý(]  &à$%7è~k†ðÞî¨÷—aÒáÄní„DHâ-Še™.ì¼æ}ÿ—6ÑÕÜ6@S¥Oj |¨À ù`üC0²ÿ‰¿‡ÏøøíÛ9c`ô\É~±rK§nÎ]þšªªª®àMpçÀèå§FœwØÞt[m™Ü:*˜cúÝà œipîÁŽÏMœFÛáòMµ\¯ÀD 9ò…ý)±ò€æô^A/Q±ºpœÍÈ”^@æ4^/¯…³‹‘„_æeDõÑHúZyà0ßÌÃD ì>|DÓ…[×i“Û®ýg‡÷N°)˜cdÇ»³<?&LÐ=„Ëß_OÛ×»dÓSØOÑü$"à¤3Tñâ(K;ÂfnY½ þ^Eõ®ÉÛ9ãå”hÈÆÈñïƸc…ãº3L¦ ìOÀl,©,°Q»=Ð1¹Ta˜4òN_š´@r.ЉŒI[Ì™ùPôs_Úáï@÷ˆØé­Pz_ ëÔÝÇ\ 8³³‘½‚1€è1MšFzñç™ð¼\¼ùõYDbXòC5”[@Ĭ`ûižÌeU!¦`êΣÀ0r´vˆ.0 KK){%*öc|¼û8³Sã»ÐPM! Èf w3FF iˆ3­‰ÇJi°c)+žjhNBv`«‘Àzñ‚ï3¿‰Õ}FÚl˜,í:2Xhi ÃšÊ)˜`šù@AÕ¼Oe5Ý"©±ä‘ †UÐ^ÇÌ‘IfkZwçXÓr×DlZï@°’Ô°v Ræ AòÑ)¢rtBšŬX@Œ‡Ÿ/' •úWÊ‘®‡Ò0I +z ‚A/Õú,¶GŽû¹Ÿ«½6í<Åœ¬ÅsmV<Àz4/Y¶ÐÇ‚ò%y‹(¤ß¢Eúä¶‚)*¸+†fÍ=!´£7¼]ÒÄ÷8ïžP³¯"¹¦™ÚÄ ìoÍ-6½i‘–•8ìˆú÷sclPÔ¦8ƒˆ$ÊêàîJ^r_”$8J¯N[«WHç7bkšß‹a'"ŒC¢ dS1RÈ85›d­2¦ý õßosîÛ¯Ud–b;åiÍ,™1­TMÑ,8‘¾@Z˜0páKt)0CŠw ÓŽÊ#ÌqäâAn#{ô<ˆͥˑD:q7N3Ý6þNÍ׫º~<µrñÙüÉæ€Aƒd`ËLÒZ{‘Ì j3‡ëêì.ÇzMßpŸ€Whî4¸BÕÙáÃwÕ’8¸{àîGaÜçY×oM‚A‘Ín }À.¸”÷«°€0 /â—-œ¡½‡ œâ¼TÛðâf@FóVE‡<–¨ï­Ÿc˜ì÷îá0nŘ_±v n{{yC=íÆˆò£âc©ÇëÌIÃÖ£]¤#äü1ïõ¸qÝWÒ»x~q:{+è!ØŠ¸¡™ÍàòÁîÁóa¼à€ûËö WèšÛ¯ ióÇfú£zkJØø¢cæ> Æ"&¼¸óy=Ì0±˜m¡Q ‡ K%;Ë o‡#Ègíd­ž§è/@Çhüž@|hvºí\¥Ó„óü> ·z ’R^tH ¾>I½/áÎ£Ùø—Z>nwèg6@ä)¨† [‡0Š“Ç>Áä#:á ëg'l"'ÚVN¡ïj6Æ’ã¡cä…ÚTôÒID‚ÇW§aÚz¬ £k±re;dZÜÔ-µX•ZÁ4ä/Ùdn Á¶¶É餸kÙóשòÊ w@Ld#P y±Í¶¸ÐO\ï•íöÒ‰Âxz®ÉkQæïñôñG›qv›·á„–S’†ÒàH@& J „—;Þ˜ÓÓ€çØÛ ëƒSš“dŒÍ["8GtÅEì]z±5ŒYEE¥Pv4ì…ˆê׫^ç<ìÖôñ)tIŒO‹‰Œúó %kd8ÃŒ &ÔÅ¡Èâ«c #{gE´DÁsŽ÷µôêÏ¿{>pÆÔjߤ¡©„ £€¦30Ðä(¯Õ%î«+ß$ЩDt4tÁ¤Ãƒ¯˜‚&eÇuljƒ <‚ |E·,ù€ G¸ïÙÚ}“å°>¬ƒðë¿Ýõî’Òvg¿YC¸òÒ;Ša¢Y½:H[€ý0XZl™EK½!fàCÓ‘*ä˜ ú~ f Äk€Jo@F‘c‡ W‹¨aèb„CvÒгzú¾Cê0ñÖ{ìŒ_Œ§Cldw UІBÅi·I 8é†{bD×éª`b¤£1|ÎTk¦:Êÿ žäzŽ$7XÂ@Ž ÀñjÔÕ;úâJœjƒo·ÃŸ;Ž;GØFd’}S˜{êä3¢0Š=#2I:ÔçÐЧ ‘ÏOàûãØ8ù@|;2’F ¸ZXù[GGåý%,óè÷~Œ]Ó⣙ØñÃ]§Üþjˆ¦I!!˜I*üu°¼@9ý|U@å)$“ *+@@¨Á)øÒòí² ÒùäGa€›´6JŽóÅ»’üÒ‰»»ë¢30I÷óJÄn'³º³­û .%(˜ˆi ÷Âkµ¦è¿>ژɓ;8sE@ŒÍ¿‘ƒrX0||!OòªM¤¶gž{ffffg»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»³33;»™˜îï™™›»»»»»¹™™™˜7wwwwwww|qÇqÇqÆîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîï;»»»»ÆîîîîîîîòÔýï§áÿyGà~b 3¼ã¡Ã±ÜèÌj[œÂ˜µv5¦<‘—™‰lä öA“­˜†’Õp”–ØÀí8:Ó¼jàïI•¸ÞâÕeozøº<Ûrѯӫ·ª]Ù¸Ò1}Õy°Ì¼—_­¦)¯^ŽÏO±ØÕ®—ɧÂSFcZmm™»ë( b`t„Pæ®wI ƒ7éþ§à¯ÓöïêxýZ‹r©âëstæ>ë•öÑaÐøÆfºîæ{·'Ý€÷%PnUBEZTˆÒ‰¡@Ô#BšéûÝšüóY‘²|¸oWooo‡€ Ò¾ lÄiB‘{ $Á¬Î3–àð€ˆf‚˜!ŽX™1|<÷À ˆÌÀàTûwÛí®¸{®¶«z™»ã C3 0b:MÌ-Š}HÐÅ7ã}§¹åæú3Àš›P@²Ls€ÈG‰ðÿ¾˜ÀjaêëÏf¬”'<òûéa¸w8Šjf·ä/e¹€Ð2ý»ï·µ`]ÝñÛ€|†Í/°i—Àº2‘"}€mÊ ’¸ Ê Õlj–ÎÛ’7µvî+Àì„Ióˆ'dŠW«7°W^{-Â*Q¦ÈnÅîÏ®îoïv½(÷—MÔ«›¦uò†”´±¬lj Á0¬4;ûÜÊëE½‹Û+…˜a3KÓO³Û œ3PH˜7Gbæ[XIPȽß©ÍͱYÎÏÌðoË2ü&oêÕ‹˜é¡ËæÀj„>/¶P郺%—•1égN؆‰Y£€8·´€0z,icÀª‰ Àói¾¹%n¶_½—~À¿…-¾Õ÷:]êÄó¤#pñî÷rÓ¦Vbã—n\0ð3M MÐwí9yY_v·2×ÓÆx93\¶u»É‰ÏÇ'‚·— ÌlfÒ£@uÈ™ E ©´(‰Êäl0Œ%v¿[¡âpÿ2ß~<s½ÇÕM)«§ßKû©È KzÍ@,,¨ß57ckÈa¦sÆc¦xÁÇE…‹è‡O Y ‚Œ€Á‚è“òâ€ü{y"ZS¢Lo¥|$l²1;±¼EËT\€É0€ÎAœÊ3ÍðáŠ:¦ÓmS[hÞCuà–¿%a€pÁgX|nbϽՇ¶*}Ó×l“’8e™“²fßåndHÓ+eåH$sïk™ªI_™Š œs›¢M̺,•?48k±»Äó“ŒÆK õ»Õ}¶qõö1ʧé ÒíG^ne^bÛ%ØÈ±ì6ìË¿nÙ9üéYgŸ·Š 0Xâ8¤e"èœr$ÌTàhÁ qsˆlW>ãLï™Ü­†‹Ãxøä[5šä/¹|(LשB.¢<*ŽáMjKK@ʸØ^·F+Ü$îòÎ^Œa!Ž}ñ=œõ{Ó¾å²ûß;M‹ÝYâ½Ý̾´°ôôáÓ(ÌbææåÞרË*7!›MÁ—?šLá kÓGÔ ÓF‹v+iÆU·Ÿ¶sxä^ÝIßV)ý>–„÷^=sØçœj)ÉeO£úÄ 0š¶P‘A|på$“ýùù» ƒQÜÏ›k®1€²±3~v³O~)÷zóŽŒx%„'ªª¿±š¼öLQÒ›)G1EÔ™2¥ùxa#o­ú{¼ô“yÖµÔ…ö¿:ð ñx9 ‰„¾^ý.¨’JåˆeAž¯ŸZK–o¡ÎŸ’?ï¥Æ™ ÅÉ•U®ž¬îš†¡¤Q.+ÏúTà@Y®Ëk`A‘v¶)¤¨¢IO†L<ø8‘#0#ðN¹ÏôfÂê‰7… 47u[ x²š£i­5Q!K,UµXÚ­Q›ë½®Í5‰‘k9¨Õ‚Uð?‘Ñõd]·ó÷½ 'Ù®Óî;è¢ù5D„BÂÙ¶®¥,ÚJ’iT²e˜¢­nžÚŽ1Þ>þÿN;ÞÁ¶¬`á,°6«!`Ë%(çŠtkÆÓ„`ŽÐ¿¨Hª]›Péÿ¥vìsë1™xìz0ò;S[ëó¿:«ÀkUUUU@%ó×q×÷þyçpuw$’Hõl’_•-VImµd’E_o¯wwz]ÝÜÝÝ»ƒ»€;¸;wÝÀÜ×pwpwÝÀwpwpÝÁÂÉ"²Uª‹$ˆ²"É"ªÉ$Ž $’H¬l7bÌÙl•dL^îêî:»ŽîíÜ@nàîâI$’OXõÎfï”誻Kd’DV–É%Tul€UÑrÿ?íãÙ›h^ÆTýóú¿«ý÷à™Ï뙟¯çú½…nü}·Ùûo3ÆÜWwŸ”$zÞãFöŒ^d7aV¯­«Ôò<<¹éÎYïˆ{ðX5}ÐV —Ñ÷¾í|ïàäÏênyÀ¬üItáË7´øGôýÿ ûßsÿã^h ™ˆá¡ûQG§éêö^TzJe—Û 0À±ªº¼à7ÃñăBõ—Ok‰€ïxóóz;_ËMôô~p¦ €¤(TŠ,Aèlå !„-ï³3ñ¹̳‚3.Ö¼°La™’M Cïó|¨Æ(ö}ôƒÁÉa–”€¨k0s ò“a›“$ô½x%ž8†çÅγâv=äŠ1p„Æx§ûÙÃÝ)Ñ&É`¾³o,{÷ÆIª*˜!€"–cû¯N¤)¥™è#„h¯àú¨„(2_×Wõϻͤ4p]ßEŸÁûéÕyÏ·b÷uÈ{¹™D'%Ì6ÛaߪÎXaóÃÕq‹: {Aqê)ê@1ŸŠD@©˜úîuÝ>ñ‘PþöYàWH©V8à :€ÛÎDˆD‹( ¦‘ïäzÿ¬ý=2ØÕ*ˆ#ʼèšyOE 2dŽo’[ù‘@½¼EùŽð5¸vôÛ}|NÈÈcõðW\^ËSô7…ñÑç^ÖÌEÀdê ðÙx‘ Þì¯Ó>h›ûú‹H_O±ûÓ1—%È=Ú̦Ǒ‰niÌÖ‰Džì³,.æ¥tOâY ‡VkÑD >ßZC`HÖcy‰ÖÃ.¨€‡d¦'ªl2É,ž‹iÎb2Hµ¦dÌ_üZ Dy—)”ŠåP¬5¨c÷µxèÐ/G£ùßô%ŸÖ5Ó¢ÿbÏÞkp’Ê%tVP‘qŰú4ü˜fcl%;$ 8gžëªÇ!ÈçypD¤àõãsÀc«‡×¦¨^ÛÚPVDc1¹óÐöžD ¢š(£æ{_)ã0ç?i„ ‘Æ4٧λ2fÉf”¥ˆÒ˜¦dÌ©iF´F€Ð•ÐDE©¦¨())¡ ´WVµ¬óZÖÝ·üŸãþÝî­ÝÝÝ­ÜÌÌʳ»»»»{«wwwjªfpe •Ü0ƒ‚ ¨ŒÊH$‚I$¨Èõ×\ç9ÍÝÛd¶–I’Û…·wdÝÝÙ7m¶Ú²+"‹wwwwwimÞpç8áÈbï3T(ƒUP""ˆˆªËh%www¾â+‹Ê[im曨»¼áÎrüÃÌÙÉ“Xúͨ³m˜Q7ŸšKÊ[΃oÎõ²ÛÑn“¡×‰ò¡…2ÀÈ8X¼Õ ±S¬;§‚\KÞ,D&bó|Fì41¹¿†Dzó>öîY̺d$„_qÊ©# KÐ@$ñŠ$Îç±aé(ú<ßÜÈI >/©¸ã£éÔ£À³Ìâ!f›õu.§×XôñyGù3_ôòã…Óaçµ („Ø:9«’UÍõXì$ÃÍ2Íl˜ÖwžÕ<øR;™Ò5Xh¦_×0·Í´ì{¨žyú¹†ò2½6{ÿ€ÅËèIÀþÃÅú&Û(J6 aŠŠ$ãòïgòFaNoí9C´ì;(hwmq„ö¡b¤IÊ@&WÒFè@Ÿ?'·ÃüŽT‘ùL*E×üóÙ¼ëaZ~›‹á$È6C惘ÙÓ!vQ$XÅTò@R@Wèœþ,c1Œ`Ûl,Ûn=ÅQÇœ©í²×ÀJ`f4˜-<-áŽÅ3‚`¼ÁK‰ÃÌ^Yw¸ä¥6ë ¡åÁäFCþŸËÖ&©¤ §q¨~¤ð |¿kušõÕ1¶ÑUVÒm~„ã_›„½üqÓ êN>Ûëò¤7ž3çyópŸbš†éÃÅkÍAÇäNmCÉ ÚºHæPþóܤpJÌI¯AÅpÀâ|í@Õ3±¼ÀõGX×y>Ìx¼a¤zZf‡ò>š¨Ñ ¥-lÓWe^âô±JăµÌDº]0cÞ.‡Ïƒp½ú|ÌÝùÚ<]ï_5×Ë´è~&vôªÁ+ØaѨ1Wó=ÿŒ7q°Cj Ë‹ ã3¶âwøf<þFbÌX^~ü¡Þ_c¥ÖöT_•³¨ÂÙm|ßgj¿VDËWÌ5/Ï{zÉOìì3nVãm@Cn® ¸JF€zºË׌8pkOŽ:z4õ(ÑŸb¾ù™œ=Y÷7zûNiœÝªÌUnÅXý–ÑŠŒ×s ¬ÃÖ“ ø‡ŸKî¨OV’u g×Ë»>¯ÎÙ××}nìúέÅgå»~·ó½e¤ÀùÂüƒØÞÇOòÜ/ '|²v×Céµ{à¡!éÁÇ_Êæ‹¼=à’çvðp·gãõ>—’þgŸE‡8…þ¨×;¿:ö FÀs×€³¦¿å‡ç„ÀàJ^‚ž@R8î8Òd#ÚÁXÃ'©>x{jÝÏ­’Ô^8&–Š8û[2‡Qp. ›ÊÅ9ª~Oä“ù;í|ÈךX[z3šÅ`Øt$‰OHœöD‰3Çãø;g׆Ҽ°Ðì‘=-¯%ˆzèщ،úô‘þ«ŸÁøùÞö÷n蘰éœûÊfÔdeÇW¨ K„©%˜ô3ùï§žZOÑ%y§‹ÌËM£h™ŸO»Ýî÷}C‚Šªµë6¦èÞžð^<¯É¾w'šÝËç[Ò¾£Žù è!S—Çõñ2B«:;¬q¹ìˆø:[êÖ ÊpÅíúiò-½,å†ä¦ª^ßJä§.– ýå|uÑÇËNŽýö²ÝkhâlOœx”):oQ°uÝcÒÁŠ.Úc±ó¯;z™±“Jì”í±§,ƒyóbÕ Ê&¬ÅqaØô½3uaX/ÂËõ©»z[(‹¶Nªàbüò"ìÑÊÍ_³Ÿ_µ¹=#v¶ßb.kÙÎ××Äk뇎¦jkJ‚™ ü1¡ñË6jŽnŠë¬¬§\hu+¯ÛtBöݲÝövâs›p’øÄow…WýöÙž,8>Š‹?æ_Êj!»®?{FÔã4ùLµ»U"þï²2¾ÿj ùÌüŸëûNö ô¾ó¼ö>ÉøOSÚžÙòù&Ÿ;:æísÏ$Itƒx~w8eÌaÁmYÕîÍijþØø:Q÷K€x'ÙL@™ÕpÃÇÜ•6UÚÉ‹0ÈJˆH¦ –°ÀCEÂZ?g*Ëõÿ(¿d¥üß÷ðïü`E-û/û[ÄÔ]5ˆ~sý»aæ1góü.6wއ|UlnÔs\qû\EõœóÌÇnyãgwv·uûb­µÒã²àß/ÖÎ˽;öyyRïòòò¥B•SÞ0Â~^ü\øÎ‰#3‡wBú¾·¿5¼hàö$áí…’ÞêÑs¶Pÿ ?§ð¾Mï#؆ê«j¹;¶«tÅ£Zµ^Pˆ.±}ìõþ;¶½û!c4F™5Ëc&é¬Ë«5¿¾o,¶"ADB1M—Ôwmô‘ò?¥FþŠ£Ù¢–§íÄP&ÔT» éltì©¶¤ð_™˜;ö,¯Tjøû°7Ÿ„HäØ9ÿ-ò"ƒì¤ JUð0£ïûâÐ`«è€M@žö €žQ_«Ô>÷ÁÛíÊ»ØÝp&wÄxap Q`Cm§¸ƒ×Ž"Ð×5uwI[ƒ –þ}òêú£9H]—c’ó,',‡AÜ>ŠVg™Ó±ßáôzñÏ ŸN¨'íúŸÊD¸¿”{XSÓÝýCDúÁ«ôêRÝ—/TŠâC!uXV€AƒÊ‚V”`±Á§C€¹°ò¶þdÀ‚pf•Ь`@Åb°ƒN€¬†ýíV®}ù†0Ö*ùÃÈ8<¡$ÃÜ>ÿÉG0ñÂó=-¨®Þ‡ÆÈ&έ¼9a˜lXY_- /ÐÌÌ‘ ¬'ëh¸ŠàzãÄw®êòª¼x=æÞ‰$’u“¼W‚unäîäÎ×3w˜UNÞÜÁ5:S‡l’I$ª©S­mß™ÒvÜάŠvæž#—ÉïÅO<?/Ñë×ïŽÆOêŸ;+_>ñ!ÁÊöÎ>eÕ¯O[y²WxÈ1-2Gì`o9®õ˨ç;`ýÁi¿Y÷üâyä×HuÇ«ú}WîÆoáÏd¯NÓ#¸‚ž1ú3ýý5Ò¢ò ·ÈÛ<$@_î!®‹rS 0$ÿ¹tA4Ɉ@¥Þ FIM,xéË Iº\íÎv¡‚â›n}˜WaÕžR~lÈ'ɧ>þV=P371‘^ ¶ò݆ÜÛ]áá'C õt²8*¦ZÚUo§ij.zÏkShâÜÃè¹ìãžÒ;D·?_TDœ«¯î®©ŒÇg%)Y>Y2Þy¦qö-LžUo-µ2%@É W^ýS,Ê…Ïâd~.>¿œVù¿ ÕÊ€)–sëñª †ôÝ£U Û÷÷Î}«> Ÿû¬Hƒíñ]{ÇŠòÎ L#L8KüP é#êü{o…?MI÷ÜëÛJá§že¾Ž}ÝgT>çi¦ûy¼ä d< ÐŽ@²ˆ˜LðÏ&B¸çqÙĢבg? ãʘyð«ý0¹–å:ùo6‹mù(y¨é×Ù[¯þ«ïçŸSðå¢b¥¹ s%f~=•‹+ãgü×ϤäÏ4ª7Ô½_­DÅù'>Ÿê'/8t~;õôT}‘¿vHÃöÀ£~ W§4`Pˆ{U$P¡NÈ t¯Óù¡2~y>‰¢H¯hÌGK†‘ àŒ3„ˆ`ƒ˜ h‹%¤-À>Š¥ùhÀçJ0BCqÆpL„Âr –ˆQˆÌ$„ZYRS);R³TWeVR¶QSP[%q Zvhv DQ „Àä k¯¡Íô¼ûGÁ ˆyü ÞEg³J {½¯Èçâ¶’MÚ5>¶tß‡àƒµƒò<æ ~îàŒnü\}އÇÉá¢|ó’¦iÃñ'ô;?yyû~cÍÓUü¢Á×w¸îX˜·3E¾$û?’ÞóùµñþWdåu!ÆâÖi(¶Ù” o#©2m`ë*·Ì쯣ÇîíÌÉýÐw¨ê*ƒ¸‰\“3NÄ“4ëÖËÓÃ¥0dδê‰Ë£'ƒMÜI„ Žò]tSÖÀƒ‚«3¾–õš0À[Í¡¸8Da‰'o“‘à€7ï4³K8"pÓnZÎ]¦Ü`HØ„I'¿ï½ %‹Ûø~xö_–§;{YY¢ÊÑwºï‘¨œ±F8⯇¦žìÑœMßrÞ6æ lŽ­4ˆ·ëˆÎzÈÃ339—w|¥E3ÕT]ꢇ”kºË,ؽòz/8¨ÂÞ ( l_gÏÚ÷ý|¯«:Ís¢R;…Þ' r †P•,¨BUÒ„Ó†ÿ?0QÖ$=šð/Õ9¸¸%é–™á%$ÈiH\úïÎ-tÁ‚¼(Z—ôôC4"jjjÍAÊt¢\¬úu'(™VóîÞ.>s|ÝøãŽº9d™ªŽW.õ´'7vLê9‹]9wNˆ¨¹yÍ·ÑSNåm[è¼0æKب­·ÓVûkL]+ט—¬ˆEòÈŲ¯&mm;˜2lê33suçÛŠÞxÎ&&kžyÛÙ±&f^cfz¿^ᥜsÌHæeÄãœ{ÊŠŒ‰/5¹y›3\\å[Ýa¡Z²kwor#FÆ,Œ0–FÌÕA‡Ó#1â¦$:r]ênà¡‘URù‘º®tE[«ŠP™«­×y3NÏ.o6¨ê¹Ë¼Ùy¬™Ãí(áŠ/–wbî}œÌr¦î’gö] «Ý»nA\ܘ›Í[/KÓÚÁq:·)µ¬½˜RÇ;_áY•™‘ò<ˆq"yçlé“ÑŽ%ã8q²/sƒóϤË1sSwÆóUñχ3%’åß§ét¹].‘Ü:µjÕ«V­F°õ«Vˆ––I'„g޶rqæòÂÎCeÝu-™†Ùwjr\—T˜'€ðZ!⊭š–ukvâÞ®÷ê’†$ê p“1h±—hÂÍm„Œd±*«wwã¼ç~’jÏ —,„3c!ÒGm»Y߇wIª]áê (Q;¼ý~ÿewøyKØ‘ÈôóCÈÇ“¼¼Ï"ÄÖyyîîîîîÌ“*‹½VÌÌÍ÷Ë»¿HˆŒÍª&ªª¹ç3ÌÌÌã3v"!Ü;ÆîîîîìDDlz™šêªeÞ¢9çžxÝÕëÞ#žy{ŸœmÍP¨â9 ê’UuPû=nUMUmeÝ»ím+•y³lÞ®7^¯cf®'Ú]çj8¨ÙšÚ~ s¹Zû)Mí½Ômj;¹•7{EäL^*ËȼEåkè¬[º‰ÚÍõFÒR•^«+S¡—u¯—“—¹º”¶÷Nwnðë¼ÜìÜ;åÜUmææMV™ÇÈ8•XÇ×»¼œÛ˜ˆ±n㫹…¢våÞ‹ëäŠV¢EU()hÛÚJ.jwc+L\<(.â®Æ*”ê"ôIȘÜÌw¸É§Ê››Nï›94”Œ$äÝÖêŒwt¢®äj½SpãLÉÕ£…Çí8zÌ7ÄníಲÇx›ÝȉG½âªo]§ï߯o¢ö{x âí ‚çßÞ—rÞeIr„ù”¢ ¢î´ÄEW¦z^êÝÝÝÚÝÌÌÌ«;»»»·º·wwvª¦g0U=˜HeÝš"é»áÎpWxídÍF¹!]»2ÛÍä§a@–‹9mÝ©&Bpå,ä‹\‡kdÙ2¶äßëoR=2Û/7m’sNnÞM‘G5L“3¼6é)Cbì,ˆf0aƒŽÏF§@À>uCÎÈ( ·¯]EÊ.Í&52’*ew]…vnë±r7fH©™"¦dÆÍô[·Li2bÌ’"’CfI`iH–d%‘,»ºYȆ‘,‰dK iÈ–D²%’K2’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’Ÿ)Ô”””””””””””””””””””””””‘”””ùUóõÞRRRRRRRRRRRRRP‚ ˆ"‚ ½ŸmÐYUuÄŒŽ|ùüŒIØfbñœƒ‘Ä—ha“Ï"ûdƒg9ܧ×úÞ ;µ!PÄuœÛÇ{œxò¨ñx½zO¡Û„‚DRPÝd¹ ˜ÊÞ—Ý…‹Y‰Ñþ<›#ÜÖƒóð4á\€ÈxЬ疉Æ`¬"J¢ÇÒaAäø¹‡Ú•ŒÁ SÜI0übCý ’úñÚ˰ûz¾ƒUQøúh³›uÙ’Ê_«À§Î)ÞPí‘C»ðÊ)ø¤9)¦=¨wÅEè“]x–“faAL‰òn‚˜ &Ø[  ]à»l|á¶ÛÕQU ºI$'@˜‡>–}8Yð˜f®É˲’>œU¥SŸH=:8’­ñ~/m´Û×à€ Èd2HHHU| K.êÃ.`$‹,Ф.e[€½W±ª"¦TLH‚VB ˆ$yðTÙTu¼PQp4¬&âhØ¡ÙGÛìÅÑ Dªªªª I$ $’H‰$$’II$ $ $ I$I$’I$’I$@’I @ $ I$’@ «TÕm½RI$’Ùw%P‡?6œ@È4ž€ä$KËßox$’I%ì¯eiÕ´ÌÆJ$¡Š àÎÛ3b{¬¢ãÍòð6Bõ-ö¿á÷ ˆ €Cp™¼„v;9ñÏn|oð?ƒ»»»»·v’»»¾ŽŽŽŸ¬FtÛTThD¢²A2ÍtæhÞ:œåséÉßÒøñR_jûÆþî9Fo©à©¾Cý(ó 4ù–IQg,ò‘5×…žUMUŒ›Y›5XTåQÅš„1´ RR#&ªâ%ös&v+Tº‚sKꬭ¡“cwj ”¸àÙ3(1<‚EÀxÆ$ɇ(Å™ºˆn«¼Š¡!õ9¤a—¹’z½4jc=µ¿³ºcqˆMÒá$•n«Žóš€ þ\|˜àðo<ø_­‘æ¡QÌ%ß2O² QsÞ‰ž.ÑÜ=g컟ò±-À`‚$Id;²dC(=7M.e¶”¥7Òæs9ƒÃ%-ÍÓwhRù[–$ÄÒî¸CqwJL'º@Bg)7h‡&”“²Å îÍc$KN;½ vPÊñô8xd§ËÆK0“¶€p,L°––—2 ì’“ÁeRâõlP79O@;z¸–ÄaîºQ£jŠ*Sa`æ=§Š °¹á3;Õ§pÓ;Ruk:˜:ɶq®Ò¦J_‡9ÍÍã¼sqË*΢û Úéî|°ág j ¶Ê,yG0CïŽ!äk•Ñ1D([—.8ƒ™Ds )Je(\-” ‚a\p(„ ó3(Q:)ÌÝ$«´ôfîú{šgN ¹ÕôºÑæl¶Ü!*=ð¤”ÒÐ˶˜xæœ371ÐÑ·0·45ÍðRfù7ÁsnR’eÂT˜‡&oq.ܹãG…+KA˜«;²ÑuÿaÒÍ—ƒb¼wèwÈûzù£’xC¸"ÌbÐÀ Gˆ FW€›XÕÉÁ ™3”Æd„ qÑ‘ÆdŒ`†šL †cC:h™t`rM2˜rÀ HÓ=¾o è‡_qÀ8Nžº!†êŠ…°Ä—ëú:=l¤É£¦ìÜvñ:P„ã.Œ(%]þM½J-f¸,¦ƒÂ ×]¤È»2n•Ü£áQ#Â×aõÎTZ*‹Š"-;áÐÜ R)Ÿƒ|˜·É‹÷û@€[†+® ˜ µ_žÌî”]œ8 0ApÛWódÝ—‚g0˜oL2…M4ÈFi»jàœ´Ì“Z®‰âÞGÅ “FÏ22 8(qVrèÔ4ŒßÓç>ÅíizMý,Öf7us)íÈ€^'__ ˆ,f`ʢ⌢Û$QèFOŸaCÕŸÖcÄ“"R# ÆÏvÛÂd@ šR(QA„ßM•³Me07EY!E€„e$ A ®\f …0@‘9q˜&q†ñÆz¢9q˜%¨â"pÞ!6hvu´&6Bt{?g9-äEH缄jYÜÕIP¢QTÖ yðú1×Ðâ2»;{e{½Îþঃàö³1´ÜӘϪµb$K´ÜJ§½XA» ÚgYýžÒxoRÁš^lfH&Ý2XöâÏkž£90;¨¡ÎìàÀäë²Æmh¡áj{^×µäÝâTNOMåóV‡4C3Bê´Œ «2\ggtí®ÿ áuŒãT5š‰ˆRî E[Øpƒ§™y„“вƔ’oì;³”,Ó–G.†K.˸Ùc¦3ƒ‹†rIu“#tPÂZ(h€púÖE’YÑâÙ1½.34å\ý¥ôvù{»»¸VbxМé㞢ÄéáC¤žl±"Ô»Cö§hô ‰Á°Ä4˜04–=¶`Àõàp`ÀÝŠ¡š„)Á· ,h¢†è¡§X§h†‡n´Ñ3vn$Y0v ÁýÏMoÏ—š?, Ù2ƒ8ñy`¤ï.^SY5”ÞÇ@ó%±–f{YîŸZý:%Ý}lÕ5¥Î&qîÿœäz‘ô?åÓìä“Ñççèôz8[yÎr;¼•YU™™Xq-³ÍLûÓ?·fò3ù¿º?xá4€¿ý£/ÿ<3›w ØF|úz4äIãIšŒ£&†K{ùÞº÷Þ~ùôÇ<ø@À àt ý„Í#ØQÚœ÷†?Å>·âÿ«çêêë,ÿ4 }áÌs¿XQ¿÷ý°AÈ Å¤ö}ß²ùw»¿}ø¬Ì; 0˜sýÇþb¼/±6ŒÂþ˜/·ãféõ»·´~F“Ÿ%‘$yÐÛÑ4™'Ѥ éàT;º²š…ÃÔQEè8ÐwôhE¡7v(½6î`ÀÂÈ$’ÅÉ«vØ("è—×BÚ^ž ÕD\Š¢”Ù£1ôDR¸†¥$‡.óþ¸\ Ô†(c&œd$§„'¥ ®´ÍÚHcÓôý…}-_4›¼n÷^é07Æ#uá{¥"BðHÄà3#á äK¾ôéÊÈÑ&Wyç›×S€ˆ¸ÁÔtlvPšVå9–lãðú~¯«ë÷û7wwww0œÇw|ÌÌÝÞ€ë·&dô ëBp„ÛÏù˜äÐ=¾MG! ÄÕÓ;þ6.ì(xËø?Ȫªª*ëìíÖµ¶ª¨@õ–\¹šiË2¶,ÖG%6ÏšŠ3›$v4¨²™°À¼Ã% »®¡¡•€;.¾d™€b§ï5¹Í÷þgg°xòJßOÀóŒ–VeUT\℉')ŠKÈ Or‹D{>t=þû¼R™<]•›“qšÚÚŠ›z®6! Ow·»Ï‡á–BÉLa‰¢·wQ²Å2)˜P›­–`K@" Êâx1¹»#š/—ÍEí<<¼Þ8j*d>J{½}29’À° œ»¼jò¢! HÑ,šŠ6L âx>ö'«.¼¶©Ûlj£N°Új¿rY@Ûa²Aùùÿ?ýä?«6Ù Y’Îĉ3 S0XƒïЦ¨²‰„ñãjŽô~^: èo7 £cf¸à¹r`oÌ)“#jc§#‘Ò  šòŸÝÀ¡Ý¢èh:hpß“#TPÅyÿ” 6d’'¨6vŸ›ÌBórù™ |Ž8Ã!òë«Ê#34µæ‹2`òzvc<Øóú)Ðïj¦³‰uËuvaÉ$v·xùDÞx‡ÃX†S"dÈãÁóàÝ.L®„006b !€0`mÄ!! & «+¦š¡ çXYc5¿}Ü÷!Òoëjs˜æÎR¥Ê*vU G{lFurõ”Ü|>ŒÚÀm$ì1H;@,J7od–™¼Ð˜DÓ_¢£é S!‘¹`½ Ù›ßЧ‘BÑ̶ŽZºhui!={É߬ɿñ•w­B‚ä+ÆivX‰XÆsÝÝß}^­WXfQ5× ª,ÁQÔ&õ{ ȯ„\ŽrZÛmÓCKnÍuÎpç}¦ça nššfé¦u´ìCC^µçèÛ4†OF “I‰ QºiœLž§©êÃ@ØÄ›ºE¦“$=@žA燫9Ù®…*Z.p†/†r~®ìÒÐ ²íK²CZ¢5©Î@ZØÊ`}Ö,¡šób‹¸2hVì6-ìEÒBšD²I(çº2sÝ s-SËÓÜÝ0–%ç8äÎ –]›rÆ0k²Ù­QÛÃ묱Å8›ñVâC¦HC§'5r t„èè08Q1§bIqäù¨[ôp)ª†q}t.ìG‚ TÈàŽºç–ì[8ÈQ Òr8c\àÓ[³Fê :Q?DzƒÁþçw) ϳ:"ØíÏ 1ZÂ3…Âh5 ™ äß ôZ@\÷…-#ð·Óêjë©e†qƒ*(xîÎF7nkgM ª! e½pÜz0ÐX“I {ÁÀ¹ÑFÙ…ÙÌðys‹™ŽEV…Q‡Bpì*Lš?˜Æ ò"0|Á""NCq©¿b–6èL­èÐVáÂÀPÚ¬ì<×ÙÎpƒév"O˜a²ZÌSŒBƒ™ ÃA™0îâpŽÊœ,¯©¹…úý«wy"E§Ü4´H:Ö¢BŠ"ÌñK œˆ¤‚ŰëÜ>‘sìÝÝš&jfž^"j’zEâ" º‚]Ü»‡D¢PaTõSS@”ó5Jj&ª#3Žî3†,<ÚìåcÄÚ²»‹®”žýø!ÙÙšorM°ëM䯩-¶ä¼œ×‹vÞútUB*àD*º•wt©z `Ø6€š ¥Ã¤ˆº»±P©P§áf  ¨•šQ ŠÜVâ"i¦  Ë0°WÃz#ÞörñÓ0ìè“Z•½à’…*¤$=%E]C–$DˉF`ÌC´äGŒÐŒòš1 ”Ô@Cà3ê'›lÙ¦¾‡Xëõ;oB Ýœ{ý8÷ƒÆ§?ÃÕ¿Ð#/°»ÙØb‚íƒÃx` `÷µð¯Çåø=wwwww0’s333wly0û¢)0$tˆ ‘fïð‚*Ãc3/Z:3ØYêàÚvOd7b®˜Hü2;¥r®nîjñV½Ÿ'ûŽ­|[Ûë{Ìù6]wÍ5.ù¡Bmî %…/lN@…D­‰«H8«€Ž ƒ ³ ²šVeK+Î×S\×6i»)7SRÌ©M¥,c*i&!‹î˜ãð´rô‡oLQ™6‰ ‡./×?š‡Ñ~Ó†SšrÌnZÇ: •.ñuo›L嘖$1Âz~˜0$H$´LÐAQCæÒo E¾9WW.Ž|øeZëuw3´¦ÎKæP+\ Ùz†[¸Ã»^'‰U¥UXÒ2Î:eôéÆIÕDá1 +‘ôࢩ©ªú¿6ë‡'Îx—1)B‰¾|åx{ÀÌXHr&i¡.CæÞS—!•0Q2B…B¹À§ÚÜÒé6ÃDkØÇ i"!jF‘$±ëéÚò6•”ѵž{sÞ¤ú¹:É4!DëÒ\ ŒëmôšT:Êð 5¶ÆN Ô…$¤ÀÂHC K×£ÔDÄC&ú3II×"ᕱmã»´ˆî@1`ÖBƒá‘~iS¼ Чɤº7wáÃn­mR÷œ$É 3—k)fÙ‘©hB`¥G˜a‚¡@1vàfÊNHµ‚º—L9 ‰:”ÛF+ ©U½Š}6›Ìð—stH‡I7¥óéN÷ÊZ\Ħ5 7RlSRç0ÅH@`ëáhj„£4¼Q^Ó0(#š½ª=‹Â{fžWiÄÂÁ.£NoÃ#­’Ì1œŒ ðOYÖ`a1ÄÄÃØÕª#¬'Öa9„2p7kkÍ9¼„"óà­1¬•–1“„» ¢¾!ǵ˜€ºÃ­„:÷ι;º:ºŠ*MŒ±\±ÎuŒH3`3Ï\ȉ–@` \.¦(nQ¼(ÐðX=§ŽQ[,铎ë2i,òäÝa‚h Àk®º˜¿C¯-•rÍ f–ÚØÁ?¼}ö5ãŽ8ÍâÂUuo7wvšMÄM݉U77o*ª®í™šÔÐuwnîeº6ÆÛX±T„„†‡î|x÷ãÇ =LÐU4õA “ý_ðè_µ“\,ŸˆàÂs:é:g/k:¦ìy¬+bç&¸DÂ"œ*óDTÙu6î,ÒD\„DOHÑ Ù%åL\³‚X–r".^ )"ÅByR.” żˆ‘FÞj‚R& 9x"&æd¸¸ËÁBK HÄ@6‡M)„×6eŸ/žM9!a`1&t^Ë !Ï<‰çžÇ*Kêe.¦}·ÝFææÎ>t¢—Dlì#týMB« )ʈ‡3–|à)ÌF†™{ãáïøü=?³wwwws Ä–fffîßÜŸ‚‹z 3æÝ¡ðnÚõp>~7G=fbªf‚A ºxîý¿gwf»stÎ$®ŒmÒ&ÈÔ;ô„²É 8`Ë ¥@Ǧ–ënZ¼¹M<®Ò®”`¢Pš`‡@äГ -ÓQ©”Úºu–¿£š¼bòmßì¿_G< A}‚ ÊbRïïññ¯g•üNÈ) ¹6"öówbn©›#3.¦dA '<”>YZZˆˆˆ1ÚZ-°È߇.™£©Xª—Оs0Ù; h-¯i÷5É‘®Û±Ãƒ ÖêªÂ$‰"¥zb~þ‡©Ó„<¢]ú˜?c„Xž¯÷I—šA¡übéLkžwÝW@V™óòÕàîÃS]&\ÌÒª1XÁ¦„Ï•va`ܺg‰s¡™‘TV±4»ªàIÄ…§Ú®"(­™ç®DÞôôqîïØ6çàè5·T]—ƒi*¢<âß&šŽÛ‡Wk1†i;Nsö7bs}Y¡·UäÒ2%eD§–úÌ¢0·Ý{x}neó"uÎ<Œl=ßœ‰ \’mØ%IØVlüL⏤Ì4Á³ªiðÙŸk¯Yœ å~à>úÚüÞEGo£¿^ŸdŸ³Vè…áéFnç¡¥†/!ó>ùAÎfd„ž"BQ3!™ ËÄÈIâ$G7yÌÌÊï$n•»µÕi[kdhÛp±ü¨·‹«“ÌÉx™™`?X¸é$„ø¢snµ*‰B §(ºb"‰¨Š7PÊÞÕÛE&³NÈU8‰S0@"ˆ&¢H w±ïØiÅÚ=ÞÄí"Ójc¸—P”qPl½ºT]*“n%Óݲ˜&fÞ (ØÄ´¼›€KD‚(ed*„¤C’Dï(Ή´Ñ̯dŃokoôÑØ‹€Ù¬qmb2a›L™=wwwwws Ä–fffa8PbY¹ó~ãñÕ¤j™ª¨ãÛუٻ½ŸaÑ÷à?:͔ܷSdi¦ÒSæÛÉ6Zód×róuÊKhSÓºî߯/"‰E2L‰Þ¹õõ¡ì¾úŒ“,ÝÜ#.rõNÆÅJiÎ-Øg!Œ’½y,À’@$H-Ž$†$ÊÍæÐ£'œ£!ä\œœçl¤g&¢Æ„ÄÎeÎy"8t“±` `Èi¤&´ld½ØÆ’z½}—ˆHÄø§ 5t•»`-FîŒA|Ô{hŸ2ææê…°Û0Ì0;¹jŠéÏ-¨¦@<F)©.¼Q¸†¿ f«çÛãç^g–é6æÅS´Lmyùì¯Äbm¼Sƺ ƒV¬œòõ§u4FÓªñ#PäG®¯ã×2ª¤$aÑØ*‡6ís<‡DùtÑÝ‚‚ Ɖèõt¨ô“SXnäayÞU™82¡#Ìj*…á {8(p½3Â÷ì‘…HHHô¢¡+gÑžo7N*ç›}U4xòL!àîл”ósÑx„0s@.©â!ÅC‹®¯2HAu;{û4mSÕÔ¯{CßßÜ/r¼º-£"’êêïïä&Èk¬ÚTdp`mËåÞ/WL}†œ5ì9¹³òs%CO4Ô]F¬æFO…·…þÙ¦|¯šÚ`mÞ{×î¥id) Ì]ÝËàc. ƒ“±Ð<çºC¯›·nÝ»A)˜ª*ª„ËÔÈ12 DLD¸IÉNá¿z&f¦î…'˜ª¨QUS ’ ’ }ïÏðþßœ°ayÈáår˜K ¤¼íS#%” R2eb." TØ3`•aKEhƒˆrõºI½,§tN^™G{öG 0<)áUd©üÀ>’`«ÉhLM4åÊ*ÔùˆRÑ.¢ ¨™ µåÉ™©Úê¹&^TéPО“4eN_8 m|iÁ è"f:ñÛ·~=wwwwwbK333wHb[=_±%ø DÉw°:¬ñòG¯'õá)wËœøyMÚný9O™ &Eˆô{í"kºÍÊ1”aVÍÝi3·BŠ}»8wP@8O§£4A½¹žx%ùç²ðAÜÚÓ1¯FÞÈÊÓo)%É]‡ØÌ94X–$×°c¯ I%·w6O j#ȇ´!Ìm5)¦dæ—d`ĘvfXA¥ ¶‡.Ç— ‚áÕXÃ*F3°íÞ¶,Û.›"šêÇróWš½ ÝÓŽ1Ò1Ñ¿vpª(*;¸¹ ¢±Ã¼ßŽÝxðüI:9Ó[Þ›é àG^uNóç%Kˆi! I‰ÎƆ¦†Œj ê<1C¿já0¦™'ȢĊ(žRò,ˆa#¯ùËXIr.ï+¢C ïѺG¤ >>¿o·ÛY@G¹™ŽÞ:{°^+µSµ 0EI|z‹º *FIMÔvÞòÌÑIqÆ5m9@ æc!#¤¤jš¦ççÝpu°tý:¢âš‚æBws&L™28 "{®vÓ51ÊV£°2qÆdá%g–—/¦åØReÈàt]#«y«»»wU@¼MTÓÄKº˜ï.]áÝ<n¶ÛZÛZ«"I$Ó:o9Ô¼¼ë­˜yª ßO+©ñC†|4íÏ()sÌ hÅšÄÙi*V22unÎPá2r2/.K—“S52"¨É4¹JHrH»m)‘w™sŠþ¶bIF FT%NXš´èéY¸4’x 0Õ§xÃO—/WVÜľC!Ò 1ìF"¡ HCú©ªù‹;(Æ PÙÃ4 ‹¯Ù+mÁu”ÓM;»¶.ÒWww»º@¹ãëIØv߇´÷'Õ×gìÌv®pCº$"O——/\g¦’±vögmELÜÀÚ8tRO†ÜÉ­Åǡš''m#ÓOO8rb޾‹á$Q–HÌVóumƒv|¶D&3­Î¹P‘´íTDªê+w¦àñ>QÆ©¡Æ¸ìcÆîŒV’mèÃU' ‹¯˜óW™³‚8Îh(fnx!‰" Ô$µ.­\óPO,Öfç‰(låÈlZßk¥Ç2ßQE<› ÖiáQ\§à!¶#& À-«ÞBp³~|8MPjS¢:¹0yÑÄèÍq œä‚"øEpÍ®QNø†›ð!a¹Gr%š‰mZµIEnCÖ2Hã‹m‘«…@÷ÃrîW]HÂ5’l§ÒB!2}àŠ$<£…KI°Ç÷§Ÿ$ÓQðÍÆI5xŒ*Å™¬ëã.5(ÉW&”pÆ>fU‘t8Űtss;7 ¶E‹ñÃ>Hyaç×:¶ÕmÀÒÿ:̉KgmiÙÛHqÄßeai†«oßÏmîÛ»»»¶.ÒWww»»½ƒËPn^”3€/ msÕ4컹TÊ“ÃÀ3 0őަ¥Í†9w/-L©ÈWÀq>T€)2H¸öûk®'ˆZ‡x­Þtç(‡Iê£7a´´Ù>ŒìØ1Qã‹ÂbfLäc-7* ¬{ÚݱQÂHSDÍ*@“œðIõôËæ9nc«Ü³“£P*çwe\>@[Ô#d"Knîäѱ#¹FîîD’›Þ½o¶ ýzYÂÉzÙTPþè?×û¿‘¾–!‹÷÷!!‡bñOçéæþ="¢¢yï3Ö篽x/žÕ«m¾a=*3Ú=B˜1¦áÍÂêû¼ ÎÀà;êñ¼ãsœ»»Í¼æ±Ý×nȱTÞsy¼nócwšf{~@ôÏCÉã×Òçåì,ͺÈöŠg‡‡¯.ºôçÝÝÝÛi+»»ÝÝ p]‡éóßPúƒ0¾þ¼Ìí꯭ë¦""I¯ø£¾ðåÕÕ€$‚H w˜³SÎ+ô¤ñz+%^f»Ö=Á«‹½È[0žÁÙ§P©®u*jc‡~.GoJu—Ü­Û~R‹ö Ùíí=¾IÇd(g’Q3š,yŠ(™”–¨|g8xí0D8o¢È¥ÒQ æ‚Àáì ÝÁ7PèÝ:tQ·šï¼Ž¡5n ETóü¬‰\}ýþÞ–p1,õcF²¹cd±»¤_wËG¯É‡ ŽÄœ÷?…òH/®©ä8oýÚ†šZ™¥³&r/Ä#éºÃm¶Ûl—wœç7YÞVÚ-¤m­m¶µ²’ç~AƒÎ¹Üò$ð”dB2”¤·$±tåëm÷Ñ€3 É™˜Ìß÷Ó÷Üß1¨*ä} ÎåÛû™cx}Ý ÑàÓÁl<¹$§bsäÁA÷âðÛS¤‡Ô<݈6Ÿ5<¢}¨‡£?Ÿ±>Ï‹d/¨|_Óõþwç¹]ø°,“`ÂG¡Ma\yDX´Ä|GýMo-îÍÔþT`d¼·8K_Ë…Q©qJðO<2$T b1ô‰Z]³rDñ;4süöIj $v¹SÍ>ð_ MÜëçÁbT¬ ¢s¹ÓWÎÍ7B¸|PgOL„8"r‹Ýë—«±Êù¯m§ žºzµòüXú³Œ™sf4©ˆ¬EZÖÓC@1'ÐÁÞ݃©Kz,’Í «Ûm£e#”™@‡&bÕ|VS{JÁ_°|ÔåhÓ=—;5æ¢0bTóX› )˜+w ÿ¶p°aDáл a;¡´½÷#íS¥nl<"E>Å®,èï')½Ìz©·Xjœ±3h¢Öæ01yã28´j öð8:Ĥ‰&òIÑÑL?xvuõ÷oÎó§,3¯ˆÙÖ>0“G‘æf4ö]8Z’>éªsit„¬¶x@~Ô[Õ5±¢bŠtggL¡v¯Ð޻Ŗ´™™™ ÈXËÎk22»UEÏìì÷÷ñw˜¯cœb yòÓ ó6Ñ39>«ØJsg&½„!áÏ1ZFÚÉ‹˜ùæþc´õá_hXkŽÉ€4l'qæ×(òo…híMFFÞMý]…QDLDrãËÏϨֵ·'ÌsõIH\¥Ëñš´Zšßg+‹r†¼ÆñÀ1(±qõݪ5¥d¹=y‰]…;H‚&®jz,æ¨sÈ5#Ѹ›asõ ÿþdSõoäËâ=ÚìÍ-ýé§ûžgÉ=‰©7²P#TÕÈ‘/TõÔz½Y‰Æ*ºâ™×½iAûóT F©®‘"WQwjbqŒiÇcý :b›žŠª™ìŸž–ŸÂjJ/È÷ÃÀÿ 14®@DìØcE™i ÈÑ™J~L#©hÚ¢ `býfw„wœ€Þ* š.ß6TDGßÙÁ4’Šª(\Rà0:¸F‘?`ï…)fQAAM8íŠ< @eT/àhý.¬ìßàAÏ?×RXCá1icùÙ,J“FŽBlϧ-ZÔþtŸ'ø™þÓô+@"{njfö÷u/jF0uØÎ×À‡÷šÐëa.$ˆ½Ìa É±ÚÆ5(ÌÐ3JK[zó_©ü'ëÿUòÿ[òþ_üÿÝ|¿ÛÿÅòÿsÿ'ø_ÍÿÿÛþwÍóªÿ±ë=b§³”€Ù‘Aô,i-2H™IR…(‰Ö›3é—™z][]m[›m}+o}¹ !&f¢‰”m¢ôïH‰»Î½<­W„KÁ@!Bà=vYO½BûÒÿSò¾KÔ„’«gJ 5¾bã[ËSޏ¸Ž°´Ò-†iDÉ‚-bî0’| T͉IÙØiÃ$à›”„ÓÑ|Uã5P€¶ e[4¯F¾ ¨-mã[vRRGIŽTÞlôˆ>Žc§¸µ@§GvVj‰óáÆ³b:I&úiÖ|cÄäŒ"PQت§B€ž "0 Ã(È«¬GWR$N)PEöõŠu;ôCbÞ ‰åãÈdôZV&¢©:a|šÆvý›㡵â‚òH¨¯P*&Š(——$‘èÐT³:ç‘O¶Wè‘€z[…ZF?ÅùŸÍ* •Ôg¿a®س7×;¸îìÎ}XÐñÍÉ1²jd¾uÏN¿õ½.Fb˜Y‡Ô 2­U„™Z¬ê 4OD¼áÖbƒÒ|ÒîN¢eñAkŠ¿ÖOô'Ý¿W0OæWêaªBÿ†G )ä"ss1:Ja§aÐ…3?ïü/žX-WL¸œó’b$ƒÜh/â1ü³q9âˆt™FNx‡I¯ÊzŸ•äœTD>XŠqwÖùÈãtx«´`Cšºº®Û¯ ÓŸsÒ~×WŒš¦ÐEdQº:ð•å4`@4Ò”ÅÕ K¦Iƃ›¾«h÷Ρ7æ×`é(t,ÚéfqT4ÈÆ0i•R0ÀÚO¤ÆUÐÈi‡<:bv'bv'®ê‰=2ŒH´A’È›i”SJéUÍ´ËzY)@…)"®Ž(©TÔ›Bú\­r53Qd„UByûµƒ;6ž.ÜÉÝ‹PùÈ8Ö£8 \_€ù''—Ÿzi…ÛØà\ö3Zkrxa*hd›DrͰ”¥)M4¥)JO©Ø­­/i³§¤)QJ‘hQg¯Ùö¤u ×›l03 H)oCv=¥÷0ä%P”ìpWÐëæ_1bþ¾Po*íª>LÒ |8 0¤ó9†‡ ôJŒŸ³6Ös3wææHgÕº 38Í@û3ào>¾x‹kv¹úÏ9z¹Iññ?ÄÖDQþòsßÃúÓÓIAÃlÓjÉ™ÉÈ.ŒìÑŽÖ‘ŒM,ÍITºÌ—¥ˆ ÀÍ4´h)žŸ¬dÃ_:—”cl´…ÊU™Ã& dý³è>w]µþ·ô~–Óm~ŸèmÿgõwŸ#¶1ú§Ð²f?d ~Éû'¶ 9ö‘Ñ?ÓìšGLþé¦/Ñ3²0|C9×3¤°‚LeÝÝw{‹úLa‹ÅÚ‘†.–°—‘§§§ôk”¨D& {z4öuôi÷ýüt¹ˆë1ÊÂ;gOšÌäXðYt9:‡No/­_;Weé;<»6OÙTýÒj#¿ÝÃöÕÙàÃ#íÚ:„T§~.NFû£—0X\dÁ/ßÀ֤ţÁh¸ÚØÚþX À„(ﵬã]Âf9%!9ï.ÿȰ¼CQ 2ˆØ·€·VÊÛ%$“&L!¾fšSŽ)“£6("ˆ7 À€Ð\É \¤ ñnáà—å£7ÜxçÅmÙJ0åÓÇ—V=«Y¨0·µšóœO&¹o"‘(ŠDµPAq75‡NÕ¤á6ÙŒ–!¬© %FÚÊB­8xc óç‹¢MqpÉà°H ÙB„ xz‡~;¢h›°ÊÛ@!±2§½54®«œøãÄdfïBtðr3n÷L‘4ªÌx `å¬bóomòPm7†i@‘ŠIˆ²Ä„ëî¯FNìÖ~Üá­&mv€MÒé]iXƒ6­òXF8:u„5&‚T²dÍÙj˜“ïîÑ«ÊÍïÚhBƒœ¿"÷­ó»}P³< ]̺Y¦$3·>i±Ì#ïiqAÝeaépõÒqcÙË¥SǪ#µã†¸Ã&D&®ºïØ^¹ÅV— uTø \±º† Ée”©è†ôÛÎàÁšÀ‚Cø¿ßý¬*5ë¨GøÒ›Oë/”úª &[ù× oÍ~"CŒ¢µy}£c¶â‚:[Û×oòkO½×}ÐÃ2C0„Ì Þ2ý[ÁI;Câ!ñ‘>|AfçôfCH§§.ÀA3‹’¤ QÍðþ ñíľÿnw@kgâÏä"DM‚LϧS#V§PÐäcTÌÀ<6«M1‹Mt×L61ðãývS$&1cl‰zši¦©Îp“h°²Mr Dì"B›‘Ò=6QÒ+ø/¢ÿL½HÓÝ‚™‚˜|/L^6Q7³S[Šx¶è®°•:E)ƒž„!…Ș|Øð°ÇP_³ÖÔY8t©ºù¾òÝÒcZÁ6àÛ£;~ož'%ÇÆPDœÝÿBï‚€KWu7+bÖÌÌðlÓƒQ×}ÖÔ2ž@05ºÊp†!"™}R䌞@À“2E³YÝ–”Û»˜.·Z‰‘;µ õà‘xZád#î—:aëÛîï’;Ù˜îîD]À«ß6céQEN$•–Y2Yd Á²Üÿíù¯è/¢¾€Fêmý*»<€nP]ð’TCò(?Õ¦0fàG¹j è”È –ñÈP£B,h‹ S,Ðͧ­D(L Ú»|ËÝöð­t’åÑeñ»òxfeÔAEéÄ!!n I  ÏÅ»ÌÍ ì±Òã\-tü¿—਽†¬¤=iÖ¶*5è~çîn{ õtÏÒÍ)YXÉÆ$ØCëca°Þ-…ÕA܆}š²KâõÖü'.äÌp>¤ôëáôOkDÏ "Ê¡â<ÞÏ,—æÎ! tÅÈÂ÷BÙÒÐÁd˜Y!˜˜fd±Hå†{2é?b^Ï»ñpù9~„ÐqºgÞæ 7ëºlŒìPÌ33 (ëA{|èawÂÖü˜ž‰ê£ð÷©Ç¦˜ÀG(+ÜÂ3›™O’Bˆ%ˆ %††UªD¤@¹k·¯Ÿe|£æüï¨åÓ€üPÜ@-^)"íºÊQ½g8 aJãš¼4 $áÒ@žÀÇ$â>¯Þÿ•þ³ÆuOÇ!IíÄ#Ç…-ƒ]ÒýM¸áljàÜ,æÈx÷¾‡ ›Ñ úèLjÝ"NÎzüN¤ LƒÙ3Áã(FÃViNàFHÓbc2]Tß§…ò6ùAè5÷àgíûaòI‘”\BKÈòÎóÛ—‰ ÜÎU±ÍÜ”º¶Ò¶Z)­‹ÑûtÛ”*´¥At†1EDÝ £]‹ŒÎgGèv:·kâ¹¥‡†3ÊP„5_-”zX°ñeÒ­^š—‡9„ìŠV£¨W<•ÒIÙV×uo‡F½ë↠ ¨ÔTiˆ‚'mŒ°;™Å€tÂ?´+ׯ(A-o®sS>QE‡ˆDQð솂ûØa DÀÑù^Uxò¹ßç.·‹Žâ½²«™TRÒ¥Â@³Õé«Ý;ü¾b;y"ðx»¤ÄO§Óéô|à wJ¿‹à "LRR$gÒÖByÑUâÝ?G/´NïsDz~‘JWî_!Èù¡N‚í ‰U š=بº„™(DÚ1ß åÀæô(áö#³óG³³Ô¹@FY0½’4 ðUR„9ò<rðÁ¢¸Ï±ã*ªíåÄÕ1UUŸ›ÓìüsÁãž¿Oƒíœ^tèð"‰òÍ<×ilI>Ĺl €TC.J—í¡)ü&°Ì˜­ƒÉ lØè¶å†ÜŒ#1toøqà £ê¡ÒgÈÀ4Xnx\ÙH¬ x2ѬL‰oÏÞádz§0zó_G?ÉSæ}<‘øÇG `’I]s–”=8©$™‹ê« —TÉ÷#{¹ëMIa×· ± !°õ Øâ8„*me4O ¯æ× gí+ä½µS)ÞŽ>%Gô¾©ît@ö{Ü;;s']UYÃÚåÙ€½É0=ünŠM½ýµîzßjœ4õa¸›”šÐÁÍ@#O\šñ î3—Üë —Ð\š£ùâÉCcLùHaþB©l¦Lü§WÒšz@g"ºšÈPYoš­ú½¿®+n qot€ÐaÇ|Dó I9]‚@•€¨š&9”C¾ ­|ÊoÿdV‚%!Ø%øm 6cðx‰uiÉ3,UDÚý*%/à?0%ÈùQM„æQSÎ/š*¨øƒð{]ݘ}ˆ'º.nÄ裉 ².šS €IrŠî‰5v΋V‘@Ò}=W%úr@¥‚R¥(Š>ßàP5þ ”ñ¾K–FI™Ÿ¹ÖªO`èÔ(!B•äº=î”:ÑApeE}ñûfï?3Þsd¦wÑ"•r³xº1… Ø=¿•pƒkØ”;°ñFE Èôx?ß`ø"âgÑ/ÅGêøb¼b±²<"‹¦œ„w¨ïD4>ÀìÙ}ÚÑÎÐ3讋O4¥Z‰Þ)!lðŒ‰úIõ†ðñßòH«ï‘AMbäƒx@_` Ú †¼ t8B% ì‘âð„y??Âf1•vs=(úÇí"ª=©„öÀüD܈ž¥5Uíô–çÏ}G‚¯wöÓ¯×'Rt ×΄ë»ÍÏðOÀ˜3ú×Ñõ3)¿7cãõÃÜ ¼|"‚²"Ó1Œ À(1ºi‡¬ `RL¼ ÇzôEThOX÷ÿ#§óíþ >Ü(‰˜KTk•¶¹\‹jR®ZUÚ«j[dVI™Ö餠Ƞ 2š*ƒ™ßô:TTˆ‚þÇØû¥Á~^Ä Hœˆ·$ÞìæÐu÷;ûüÓòÍ'§Xùô4À6â}ÃâMàMðŸn! …A'aBE`å˜.Ö it µá¯¸pê;FAG_å(÷`¢ "=ç„•B5š6ÁUGø\{&ª±ÃÁQò8÷'Xs,yÖà¶uœt—ˆL¯U—¦¼ø5‰“çç÷~܆ž¿YÞyu×ü®˜"Rÿ'Wãêþ’úŸýo‘UýnýŠØëÞö2IÙG}Á3/Šà÷ä´j?wÜ2’È>SåFý:¿J@˜>ÈO`*€ÑJ"â…½iöHmþ'î¾7ˆgùžDäIñª©o|/ÉŽíÐŒ[çÀpðŒˆŸã|þaüÿ >Ð!¶?8(4þQú¼iV:Ì0‰¨ =éQÃÁíç„èƒøŸ1%°Á=òŒI #g],IšùÁHðèöæðAp:$=¨ v0Bû7£Ìå¹ãØq³+ ¡Ë‰ÀÀ|I{!&˜Æd Ðg¾µÃ•Áf>ønú€ú+ÝN•x|]êÿ\ˆ¥ü°lL2-MCLÑÞiÏCHÝà!D€ýCŠü°Ÿ Hf&$í<¡4<Á<0GÇGžªOÜ ‚£õ`Dö€å·±‚Šö=„N¶ÙNÅÌ‘sIÁ‡T M@ôVЗä=?eiŒ&(î'ZÀù|Øëf¤;´ÓÂK—ÒÅÿˆœ0‘}Áá¾â®!‡µÎT°3¬9Q‰oà)ï`;‚€ª£¢GÓˆ–eÑÄèŽFÞàŸSÖøo'“Dú"Í0$Ä„B#B% ¢qA-Ïöùµú€}xÈ"XÎÜNØ ¤æÉúã¯r ²Î8N2««D#¦1' 5 d†" 6ƒŠóØ.Ó€A;¤§`f©õ9'óùsïQês]œbû™ö. õ&a÷±>={6¯“éf‚Y·—¦Ü«kiKZ¥m6ñ{]E¦Ê5M#h E[lU’Õ³[i5³MXÖ# TI$`ˆ(;‚5‚0 VÊ­5e¾½ª5û!ߦè àŠ2'GÖJù…¨È5Ÿ«GÆgß.Æ¥'Íc¤Ça2åK_ÍÙÿ9 ÆœÒìêC  ×vÕñ§‡°CUÖ†ÎÄíKs×¢L cµO¤g¦ K»›¥§nôûbL‡à£§ì€Ðõ\:H:Hþ}ïˆ÷/,†ˆöIs00ÂÁ<¢g³ˆsÙe; TŒRÐ4q¿°bKõûÿßrÙ?Ïèy¾‡ÿ—ˆß¯ÿ¿åõ?KÑÿŠIyÀ—à²÷Ó¯ã>êËï<—äþ—Û³o0õÐÍÿR?<þ&úî럀߳þBŸyÿ_ÿðÿgåý-ŸöÌ9û½}ÿWøÿüÿOÔô¿ù.ÏäÿÒ0!YÿÇýèiÐù»ø_Ì?‚ùæÑü_Ç÷Ý/7¡.£enƒwþWãBFWq÷ïNßüöùÚ?Gü:ñ³¯ÒùóŸÛ£©üŸOoSÃ1ÿÛS&Ûÿçþ¾ïÙÿ»£¸CõºÿLÛÄ}fÿÜ¿’Íÿ¸¬ýŸ'Íý_øÈóþÆŠÇèÿÿìÿ‡ò¿‹çþ/÷¾+w¾í{ïZ»çâ7sþx¿ÉáwÞ'í·ä7A»mÿ‹}£“ºÎÝÿ·fn÷¹ïÏÆöÛÇ£Ÿû?ü ÷_Ħú_/Òù[\ÞîtúŸ«»ÿã|/—þ^ûƒ{'ðjó}Sö>Ïætÿ[ù¾ûý_aþMŸ©þ¤þÐüîÿ̽ë´åøßæåêj~%ÿÉ}Ÿö“Öû¿ýhû/ïþßä-ÿ†?Ãý[¾úŸ þï?ðæøbŸú7¥É÷^7ìùh·Ûê{oÃÿ-=û߯î¿7Ìî~—Áã¯÷}¯ºØò¾ÇÕÿõþ'ôö½åÿcTø^ÄÿÎþ÷øw¿oÚ7±Þèÿé÷?kî>_ï<Ü_C4ÝkÑú¿¥ù_âäØ_¾~gåÿ{üÛÿ3ckäÍñ¿ÇM?ôû™ø[ÿh~×ðþ?“‡ñ?ï¿[ñ¼¦üNé|/øÍês?“ýÏÜý/ùqyÍo!žô÷EŒóŸ?ÍilOÿ¾ÓýÓi·ñµÍ&Þkú_õÏËcoûñóxß¡÷ÛÓÕú2…Sÿbªcýµß“ý¿Ìoíõ!îmÂ߃ó[ ¿¡mímoÞöö6>Oô¹ŸGÈôþ§å“{/àþ?…Ãø[ßhêþŸø¿Ÿõ¿™üßS÷¿S#u~˳O§³ÚóyøÿOÜïçîWô¡ÚxB“¡ä=gy ÓæI|×8`Ôל;'ÑÉ›ñþçÚjí{ßKäz{•gÝï‘Ýñ¼ª;5|Ïå}O{ü~ÃÌøÞ<Ïßþ‡ÿù¢ßŠÞëÃó{ÿg‡šÞꊛèû›–ß¡úSžËØÁû8e¿>íÛ5øø{ßó¢ýôϽì<os´ß÷·šÑo/ÿ¶ÿîQú_¥àõ33´Z õ3Ü×þ–(TÝÆÃåùÐÌm¸o†d—]ã¯gØÖ1v»ý½'î~W§÷„¯}=½O_í{•ó<\`‰ì¼~w>±¸¾?­ãKêÏ;cÄÿgó½—½ëêobÿ_è{Í¿çaØãûþ/—áÇÃ}ÃwèCsáz¡D=^”Þ®=ñMï#?äyziîú¾òÅ58Ã|Ú-ø^M×J_Q_àÍ*ëíªTÓM3ü¿l|ˆ –ø‹ä:/Íçöì»Üµ¯J¤ƒR=³=ù¡‚Mƒý/öƒîÏ×~òÛå„_œ Áø»‰Ù‡³dèäfUÿl?ñ ¨ûãÿ‚¶ˆÄE{ýWw?(HoÀøÿõ`»¿ªçÿ00S$ü=öAÇó£üïŸ>ÿPÚ¾ ©¦Û&Í#ø"å‹I[M¨ÍFŶº&×*¯ð0?뇔ÁATó¢€yÀÿ?¿äµãîŸàÿ’>?µóùçö z®)|r‡¾ò^x RX RXˆ””¦k•Õ5šÓ-cm;«ŸÉ\„ á€æC=•%…/ô‰²“w;_Ó›…?öé Ï~y™¼§™â¦`\MŸêr-Z¿ØòÅð"¡F€9‘§2àr4t¦ 1í‡ïÚì5ÎY*ÚJÇ3Ýc§D†|€ÿ<Σ*ÕPqÿþŒã„ B)øâÿº¬–z=çê‚Z‹IbÕý3ú«Õ=Ð)Ö§øÇéäþÉÏ—ùÚ~&‡=äÍDª£ûTàÏý_þ½~Õ‘=7Wÿ¿°à.:àóß9•U\áüK~³¿V{w0{vó>2¿¼eÏ:º;ÇhÜÝàÎï|Ìê¬ØP'¾ö¾'˜}ëŠë­Šº«íÖíèÕ¹™™XÝGO×eâø=Ôf"öümÕY#å'ñKyŸÑëºý!Û|Çfó ­ uT]„°]€G™¼c² ™O‡‘²ˆå  M¡„9€IdXm¥œÄò˜ày…:Þ¹§8FM&ð®r‘MAŧYo™ŸôžÁ½¸‚ªhäœÁí~¸Ã “&iÄ£=á{ðb~¤ô@„!Ý z¬ÌÌÌÌx y!£ýê¥A0å$£¼æüÏüûöp]¤ÿª†?¡° (~„Ú,x¤Nhyÿ.“ÏXaÀ`®âÕgè×onŇðŸóÏ`_¦à‚»t¾ôã?ìRL)Â6äD§T¼BXvAÞ\ÞÎXÒ§þÉ^P‘<$âAüýõ  CXTm,™ÃP爥À5dæ,áøpTê+ð£É"3 –Ä7ù¥ßç< Omèvýèþ:*:®EÂZ_¬DS`=½'ÉþnÇ×w=áK犈 ËÕíaEȇ®"h]Ëe`æJh„0! Âñûg¼uuüÝμÞß`ñƒ6C¢¡ð cT gÉ‚ð”1âÈ Êù»>’Õxác}?ø~ÂFÍAõ — ä-2ÀðÓ)º/Dz?€Pw‘Nˆ!@©òP‡OºÂ@¯³ƒH¿éèyþWqø›\WGÁôÝùt°I@D…‹›æÐ÷/NàÛALÃDølë f2AP¦w©û²ïƒ.láK¨0–…ß´ù$¡ð–bXGntZwp8brdý—éG#Ç1¼çÀk\³`•¤™OâÝ HÁzîynì%‰®1æÚ}n†í6‹Qˆk lše8ÌK48.Šb’éÍ®é”4BI’…Ôì£H¸ÈJÍ2X«“µÊ4ò²4Ë,˜c"•ºj¦#mÍ—¦–k“3”¸ZC p7vðÛ˜a¸R˜ÎºÒÈtuÑN3ž æèÜä3˜)É&CdÝ[:˜Mv®¹x¡S#!]Å–¥l;^[Ôçý˜£ ‚€Iai™–F€R‘(Gü¿;û¯ Ù*©ÜðCõ¤Ô}«Ïý!²y=òÉ”ù,‘ÑñàõžNjxÂqtÊÎ1¯¾¨Hø¨;I©´tcõëoz˜ˆš€†‚–½å|É£Ÿ½Ä{ P @¡Ä̰,!‚‡$ YP£Fgüá!È*† 8€!íx±Oeâ¿l@óIRR§ƒCê>!zÂ_x6hº/ ¡ùññTåƒ!Š©Þ8Jo#¨ Aü(?«ÈÃP4 ÈGO?\¹€¸õ„u‰Òc®Å1åÀ‰¨”æsø·ºÊDòà> z“:zÁ•ú7á¦>/`t(˜ (‚ 7¼ýúüZ5+„ËÈÙ’E5…DOâ`ŸÜHÈ:¹A±õ0ÍIP+£ÿ¥ö#­{ó¶R)÷¨qK$c§¦·y¸à¡Iå±ÃBäÀžÎ´¹vË´Ó`„×V4š0­"bÀødEcËQU)JL”ª”ðz›üo›ŸÒ’#ž)æòô"tÈý){â |DÁqC‚(§§ÛÜ©Í2G4KŸ¹!õx> ÀæÛ¤„–d¶ßOÎ÷5íxQ½¼£&æ¤Æ…úR=öÁ'f° é èžCÿN™¤UOX{üNÿ7¨F""yÂ**“&°— ƒµvºD7‘½V Ñ J¥¨Ááu1ÆÑ•Q2Ó³µö/™“ oz±v4ÝR–Î(6Œ† |zªT}çpù­|ÝÜðŸë¶è‹¢ïA„ìÔÁÄ hbmSÑbµ¤Ó\& 4Ä%0šsâ&ç;“VAüA5Œt/~›‰¶4ÆkY€l†¡héδµÎ•6¥2XiI˜7D(4ë/.™0±®e™Rè3S Á! XI1— —¾wÑÖpéDÒBË3J»¦f…Ûk¥b$-u5€›ˆNL‚Lpaƒ$P$FŸKìÕÜkÎ]Y\Û㉞ÿˆÐ@ò/XY¥E3~q£Ä(¢Š(¢‚""""""" ¢ŽÍ/»!°‡žPíš'$`~Tü¸+òhr`Øž}Ù~7‡˜ðïEó áö0‘_6ËïNM9·Îèâ>ì záævöOo¿zOV*„Nø)ÝዤoáÏëôà ÎÊ\>Ô7éf=¨ÑIa/KÅp~cʦ=4™Óéü ~›†zŸÜFCðžÉm°å$ÈÍ‚³³Ácð6Žó¼ÿ1éNzW¹ya&b.SÀHP“ê 0b*g1„ˆÿèú:øÃ£3Ú@£Í&l^l'£Ú-ŠH õ2EG悇L ›cÔ8Pd Àr ºžã@w=Öݘõ9Pu ~k= ZCF=½}3.="ÂËH5CO@…¢{! "š¬F¨¡¤ 4îÐãÀ™ &‚;‡¥º®ŠšãÒäG¤O½æòmäǰNr÷¨½½WàuÍ}ÑÏ—uö)ìáo’Q¼îPœ) ,ØÎœ°T”A¯'î/@PH£ÔJEH=¤xS¸ Cé|þŽG©oÅù´vÁ1TI§0Î1´ ¼VH2 «±¾jZB!\äÌ9ÆÓEܹkiFd-ç!VTu¹BR¾Ì¥oºW.\·6@«~†µeaÔN¬m¦;µ¤¨TÌ:¾ÇÇ‚srÓ!qΉ/µÉ5CÄÃô‚‚ud—‡hämŒ ã†7-^¤’BóþIòNüî8>ÐSà}S ›¯Gó~õ #²@SX(ÐÀ÷¥F•PÂGº)qh(€_I/_ËÚyz”½kêÞØ8ÓŒžvÓOTÑ› ‘Nža¸6ý è;ñkÞlÌ„³0 ./luÀ™$H„u2G{òÈ»à©ûtX?­÷{Ãn€9I.®Öì•%B FbNêkc[»¤# V€b‹F`¢÷¥Ã[h305¬f2X4`™8’¢˜ëQ´nÌÙy9yÞy@Å:eør—|þÃ`÷>Ë@Œœ2›Ð:"€‰xNHÁ+N0fK›‚kRÃÆqíci%å{!Ⴓ0*ñWIØýxÛ‘=¸e(díƒSñTÐW×JTN&{oQ›ëb¬ëH”ÍÇŠ#ËVˆ€(M?ź±÷Éz. ø¥9ÈåÛÇÙÀÔj béLÁâQFƦè¸òÃËݤ8ÄšQé–’…™”ôŸkÅ»JÆFJ{}™ˆ©I›œ–ÖÛð.¾ˆÒ’ÌG9¸8MÎ¥ €©!5\¡F‘$éº%ÒÜ€ÆJIQµtM¦Sƒhq$`üs35¨¤©€ÐŸkŸÂ2‡À`H$(\`ÇDÆaJ¿,išz°×O j"á1†^ˆÞÐ!­’cîÖY–¡2ML ˆ‚!9i4/|—F'6 Š¢lRœ0ÛYWE±!¨ÀÙ‡YDv\¸¬…”„c ÄûŒe“€ÜµŽù[ˆŒ†,‡m8˜À¤ŽY†ðÙ€»AÅÄÀ­`ð~ä`ìÆÒ9V2¤–³Z#$Ç,8†ei'r[ò 4È ™ ÌY&uF ÊÝÙpY]!EKÞQ¦TÉŒÐ[†a¸D„›„&˜ÅQré¯U\Úòjñ™®év@â$ ™!&‘ô©eFÉà½Î[®£©èá“Ez=žzR“ήèºv==î//‰ÝS "zÖqçn–ibô›žŠæa¯o)„ Ʋ‡mf†É£#8àj4AT`Áf& #¬9 ÆHÆwÙ\¹Óí8T´€n€›´qM1e‚ ÚŒ–zÌpì,u6£hm ëèœ Ä*Œ¶ ÀR°P Ò\¤šÃPÍ&‘LÀ¨ƒq3̹|`& h LÑT›jÛg¬¦Üz¼yçrç?«FI¶.Óª ˹U¤z#ÏÅ‚+®§—Ê>¨V’–"7v÷w""£0œ1g ÃtÕìrÀ¹cœ5UÏ“Õ/œ%ñø€ Zì{Ân¡ ü¦MÀü NÐI˜c Iú;¿ÖžAÌ­„ñ –&ÔBŽÆ“Hš…Ó`½â¡ö%é!é2âWºÿm†˜:xvÁòøð÷Ú—ÚIêo+U±²F—0¬$ìº^å<ð;£¯ Uðìí=Þ\Þ2¨ÕT .›€ÆY ŒJ´"r€ÄVH ÝÃ^ÆÇÉ-÷qñôrQi„ŠJH(d åŠ% 4öer+FHÕ¶¹–à íSGAÓ%n±µDS¨ÐƒÜ•ö÷Îû1âóU|ã­Êóˆ™ ø]xbŒX4⥿ƒëÄ„‹KDÅ#ãA:`DΟÆ`˜˜SQ4 ÈS¥êéåèE 8ù `$‰£'evzOÃ;¹„îfÇ:äžÏÁ÷qŸèèoA2$-rÄIà:Ó ÿ oIìâˆÔ8‡ÝÊô€‡…Ä9™qYûõjrǸAE¾ˆb'ºzue†ÊHŽ»»ÁGâ{ßà G>¦ê=X=€'V»(ICmÌ Ì=.’@<ɇ ¤Á<œÒz NjsÓQÑecË®†Wnì Ž8mpWpà·.ÝûqœçMÚ:äØ;c^Å ´o ‡ý³åÛ<wfaßÇ4€]ùÀ1Ýã±AŽ CÈv«×–Pݲ”P,ôsB@Î1UZ¨G'@ð+…ŠÝ ˆ(ªN­Æ ¬¸âxÌOQóÀ¦z|)˜x×Àêb <ˆ×bÓ˜æ4æÆ’¦#R¶*ˆ9ˆsŒ[@휖:;‘€ÞCE8,©¿‘§9Z—Ÿ(r&×ÕjEhíÄݼ¤ qè¿ýifÂà.ñÓ”ë"ÇnŽDÈ´Ð n §Å`qÍ Cw샇C [NÚ`A£±#–ä¼úg×gbÄYn¹êXgpž¦Î†q}ZL¥¸"¸¹6,]J€ø@ÉÇtZÁqÌrÂ!Ç0 nNµ±”šR `v0¸©\ðŸÈnhN@Ã=˜äÂúL:-€˜¢‘m–J{hEˆØjv!­R»D*:: ¬W%ÜœlfÖãŽLÏl ñÀî³Ù»­ºnGcæ%à&¡H)\tÚân×îè,DÜÅ 9¡Føë$Æ.ØGŠAÁZX(…,-¶ôU A¢g­\Å,'´{oV”r‹cc…4ñzGY‹‰¹Žxèry΃RXDÖ£uÃ\œ1‹[ Ò€¹œ+i´ç†Ðppä¹%Ѳ©7»'&˜Ô~ú;háÄÂäbSr™Pd›Ž˜߸•½‰¬ $Å…;G€¦•;¸DÒ±7Õ è¡#§‘2SôÙ ,Â@³ãbImFÉ¢]#*˱âa¼8&èÒî‚q´t1‚Ž9ßz¤u‹¡Qt€mÐp´rkGÞ™¼sBB¸gL´p%•\™›»9á̺°-Åô;¸rÍ3Nn_’Gh{´­(ŽåX¹ãÃìCMpº¹®g±)©´²Ô.mªô<% Ãx¨ HИ¡~$KtBð,õÃ;7$0-ÏOÑÐ&L €y­ž¢PÅ |óà »:’À&ºWOÆÄ׊0HjL°¢ÖÃ|6*p™“†VÕÃïÀDIìfÈpÜV ·Î‡ÖlþrÎå4/ϧ†ºÇ™pbùŸäëÍñQñîÚWÄñž¸ÊkiÕE7::Ã'× Ÿo•÷þ&¯1ÜuJ4µï&Òw<ø¾ý{<õ÷HSJP0Ò” ßç^BšR€A{\ iJ¦™QUQTZE²fÎÊŠblcÞsá×Ë“‘=äaÖà‹E’ù#È€i6ÜHå€"^ÓØŠ.܉m$AÇ/Ã~EbE 8®¨IáT(h4\¾é˜dÌÍǹ®ŒÓß˯±³&xFV#a$‘ ¦› åLÀb`ØV3ž¹¢fe53$0ò6ø¸ê¬**T*µ!Fg|ÃÀ!^1îhô‰£›vvWnwiÀƒŸ-b' `@mñµ+Ú$@ùˆ@’6©°e» ò¯²ašÀótŠ6îÜoÐ5çn)¨I‘11&@9±# ÷½E°Ä“À t§Ä"çÆ™4oJÛÖ^Á×$ŽÖ69&E˜ZMÁ-àÂY…¨œUr°×#Ÿ6tFäl‚ƒÍ‘¿^cP À>¸Ö:vû’ ’3ÑGèeÑþÝÇö¼àö>© ~7=:ZlPZRs|\Óß ïžö½êHÁ=䧇­`úC½N±üòô{Wâë¸Ì$’G7no»9†+‡Á£ÊÄ‘$z¡g-û¶™‘y,<»Šïè á©ÃCϦr§˜AD¸FƒÝ.1å!tÐÏSÁ(´ë —Ƨ±ÌaÌŽ<Éá½ ¡<Ï=>pgºsÉr¤v‡Ür“¢{Y;4Ó"³ ¤r@Ò*zLC°pÇJCßÙ U"¬Äñ.B è°>œ`Õ–Kl€Îð[Èxwj§äy‰àÐz×4faMÒ¿aMlÆkuXˆ N:eýp×w$ÊÀ”lÊÆÞ‹Ø‚óå“Y²aÝ‚ìY×:zg¬èÂÞDíü#„`è&ýÞâ|±»íé<7ÌäŽâè>jªªªÜ õø÷àÃ28bù=,”K B?¸ò(z9`©€öì ö“¥}Óž 4¦VD6´Vjt­×]vHFŒQŠ@™JÉ’Œ"”,„!  JÂB²¹ß ¸ÀT$ <çÁ”GB)„ä*Àȼåb:‡sÈ—(™‰ÀH2ÈWaZKfâ³§¡ËiDé=i¿a!“ÍØ¡ú=\·ýxbãΑ8ËŠÒ,u÷”QErÙ:÷=ÎÁðG£«ÇðÄAä`Ñî¯Í gàÀß!ø Eî9¢Š(£ÃÐÔÜDçê‡ÝÏyÁ1¨¼3žî…ÕIUDïàbˆƒC »A€L¢’d¥N»´š?? q÷xç™ó¨Ÿ?#¨€ªÌ 4\HR˜RP¡G&€:¥tz ižgÅzL“½øBm»;ð­ñ`p4|¡¡Ô#P÷éêüXZ%ü0¼…˜ÚæÜ6ˆÃ[0µ,MnˇN㆚®… ‰È£å°­0m®æÁ¢ú öÁ_ˆ|Œ+0+AÀÚãÞQEQF‡%BüX÷d_Åòç…{‰z fiõf½üùbPªI|žà~#Ý$iv ¨y€B³¾¡;.¯ÑŽÓÍxM“4ö°¹!ÂáqŽ$È™è7"b’ž©„R§@å á¡2,¹+´[K”ÑS´8,3m»K^ÄlÊ›Dt™&HbpÄPÂ×|§6ˆˆ•Z¤h h« Q=WÄyŸq!+Ëx¾+]T ²`„…R†¬„ŽãMÏN»ÂrvR¾=ÜTtCÐÎÀ^h2ó«Z16ŠiµæÌ<øeBбðó»m—ÆvusØð趆•¥i–`qYlâ|—°Õ7í½l/UiQJ‡» ËǶºï©Gxèî . )På -Ž$ñO‡¶=˜õÏ xH¦%‘u¥U HU¦0èºÔÒP ©‚é"uÕ¾þ‹!‚ýræü Qᶤ V%c–'8ßl0æk3U•)NÉÀ;ès0'&xju“xÁ†bCOžœVìâ°­-Š&…jÂ7L$’óÆïª$ßÃ…¡…›¢it¶@(Ýœ®À¦ia™4ÝUR@´¹©f@ pqˆî`8DÃTLI çœ Saß!0qE,‹¸³jM¸(r&~Ó¿„è>oá'ˆ6÷yè[Ig˜ˆÐªv€¶Áöýaû&¼ß@~©¦Žµ. IíÉjØ{Ô®~ü> –f.ž>ˆ†Cá²´`zå1Ôc‡¯=¤czLÜô…ÇghuëÇËÍ<áL" `nƒÅ º ÔL‰€©”\Õt–Âhœ*BC 2;bp !à‘ÊÌð,mÑ â`ÝŠЀW­ß²`+…j}m,NE…ÁΨ=JMŽ^\!,SPÃÉØ™»àÙÒ0hN^ÔL†D bÀâÜ;¿Û|ŠºCHÈv‡†ä"jZˆ0EöaÓ<­½ ÓhÖ8tEˆýÿõ ½ù¾·JP!fB`á0yC)Ê8›h¹Ôä¤Mε®š*ôß³¼¼I±p GC”É„€`®œÌ(³0z©q%$j`v™‰[ÝTµ •ÆÅO— x.Sð^–#¹TZ┺\ÃQs`PX!åí¡ŒŽC„9h=¾ÈxÄL&&Št÷ÏnT Ä Ø ï,+­­ß²xÄÀ†è{â°™Ðx¹Ñ–% YÁ…Nx üC3,„=èa=‹V”Š6€ÀPPMä>À夿 1ôÇ+fLÒ[Kc$«b#L´p~>ç†ww™Öd$$u¢¼ô`‰Q ]¿;À3«1 qß!¯‰Ð9Žh0Ž• ÁHæÉÙEŒÄ…Ãy$cÂlšéÉ•ô!b)3c±K•Žú®FZÄD›vÚYë+m#4ìuÑ;mýø 9½wéWEhÇ,¬SKŽÃ³Â ÒFÂ{¬Ò#!Ñ*d¼M€ i`ø\ R9Œîç7Ñü#XqˆìmèîèìKbH,ç¹By)·ùGt)P? G|a-qq’Ýç¦D •L‡co̰N£‘ñå5‘$fUÖlFÞÕ½^­¼ùI;Õ>íÔd'­×Û¸©Ñ°ªBÕ:®·mâLÎ)ƒw°”]“¸]öî7*/]%I-™SD$’JJiÝò¶ªg*.aó1ê²÷nîcuÝê«vÞ*Jw­Œ¹«s{w4¦ÝâéË©¬yNõ…¶°Ôø¼œÙw&òèÑ«¢iÒ™ö÷¸öúû¼ô÷$’I$’I$ÚOwS™sw™µ/»®ï;[·Zðñ7ò6hDJ‰³’ñ"äm‡Ø½1•ŽB³j*YöëUài/PîTÔææ>Ú›„•ëÅY«ŒO&ßMæl)Œ·C)>½ ælU;¹Y5+1>[§U”r'u MӉ̉‹c6¤»Àx‡EÄ+2ä ä»¸|3+3*¹mÜ€zd½ýζ½ÁA,búé÷‹ÐÓÆ†&H‚꽤Ø?h ö#í› žX®Ô÷ô*þ+I$9ó=Ó ämæ6Æ©ÒAÐsÆ Ñ k±ƒw‚Éãq6-è+|,0¤3À£[tqðA²!@2ŸbxË.¥Œñ;…\ñ„!àd! †d=øL7 /Â,Ô>x” 1@bH"¼^%pQ÷YúÏNtùꪫ©uÜnU‘u!ÉÔ8+Û‰ íeÙ©*ÉVšË2³$J)ˆ"¥P>…–7UÁAúˆÑøð`ŸŸÁW„'¢ú©Á8ÃDE±m‹V6‹lÆÛ‰5ŠŠ¡(©›‹Zf¨¡,TÈØ«%E¡M¨´0ÛJKI¶4R”’²”+BÃ!¤ø@¶[wà‰I-§rjoá{ã¨+š •÷–ÃÃCg Ä·ƒ¡ÀãÀÍê(wC[‡šØÞZh;Ð8áy<;üÉÌUãÓ7»ÍvIZ–F…¢-fXÚ“,£)¬š›,T xz oPÐUÀàfȤh÷.™Ã]_¾2â°†M£M#àì™É³SÆðó}œFa—ñ.ª¤ ‰?’aG–tãÔÖœ°CõÁÞ‘ëO ê¤"ý݊(*Sdˆs9`ÌJ01 &Yò"̧æàòú*ª«À¸;)õÎ`¢å^Ÿörν+EC9 cŠ˜)³¤) {̉Á‚þXC)I¨é°l $IQ &‰–†¾k‘òè×F¶€RÛøŠúS‰¹ˆj.ʃÈj†4ˆj}£Ä` Ÿ%ð†Ê`)ú˜@/Ò„2<ž<(s5 ! ö´öˆÁ#Œ0H¤„„‡–ró -À€{­êèVC€Ÿ!é[倰=Ë‚p!¡¨{€ä€|ƒz7|Þ +ã=ÏNÀí ^t8@%)HX`hpÈ”4@{ë'§ª„·úàpøa(ªÅ”ØPYL‡”x˜ÒðÞhlâc¼!ù뤾†"³$ r=Ã#PÜé^¹^Eò”€Ú› S¢+ö§i"Dˆ&e Víü+Ê«yÑSÓÕŸ›E@7ò x=Ì裰Ø÷%>‹,»»%•^H÷÷ø]fò!‡éb‡ à—a9+ +ù×ëq÷u>¦ã¯on'Ž6ÀŽ­'µËm;ÁJÒøËßž;(¸4CSD0ÈVÖÑB]`—?_±YEq²¯I¡ïÌøöpxÁŒíeTq‘ârÅw¡32ÈS êÎS%¾²­NÌ5[0ÐûƒÜš¨˜Ü[ƒ€2'àÒFˆžmTëN÷-ôû+¿¿ôíæéø–¶ &C Û;¸ «êdáRz©$àð@ï/Êà'ð:À¿-5ó) é“€ýªK™âoÍcFåÕ^¦L£¦E*{vjÐL;µ=¿Å3 €Ô G`y0Ɔlp/)ï·—hÛŽ:ÀäSò%Ûï†f>$'Ù‡yΚ’‘9µ¬%@„†– kÕ e êŠP¬‹’aÈNT†›c|v8 ˜$©Ùd#êzU0ötPH’&ùÓ·AÞOì>w÷ §3‘ ‘=J¿eû©‚p ”40“‰CüˆaT8 0+?Áý‚½†!˜HHˆ *ŠÓòwnx_÷Œ¾¥³L´,²Ò*RµˆªM¶,4´Ð­LÂm£EV*MXÖÆÔ[Qm£h`«i³j•–ÊÚ¦š’$Õb$$TI$Æz³ÙìÑÒ«)Ü>êw§¸'Îû`,ˆ&ÑÌrÁè=LÓ§wI3zu§A%{e@¸$ý)L/§&)1AO¶`Ã$Ì[pÀ4°4È”ˆäí.’$ab„Ûi¦[Ú×IiAm7¸…ßz~f1ï·ñJN'Êw>3šï_i^dô–äÄ#¾.|¢ðD~8Ñw‘E1ïÌî½(ëa¡¬^^w‚Ѻ«á$ç+Mq|±eŽÓÇ ÅzxÈèb;Yò»ÃšN -'"¶×uS‘U~!°‹‚²œS!M=sÀð½ D³,2˜'J u¢´¤¨?ní`ôŠr•\åw{¬Çq£pû øö^ÓÂHÄ7@2sN <$rS`eÉÛ1 Q t`j””¥E ”C6¶HÃe4àhjBÚ*à zO6-¨ê]¶—B˜\”ƒYHCÊC$IßJƒû/ìÿñEô¿†)òžÈ‡ÝC·ß‚`T÷B´¿¿·À0'í»iõ8‡xé¶k‹¢¾á#žL ©v^ À»3Ô6·‹a² ¡™1¢d[ÁFæè3¢m£AëódBMƒ³‚rÞÉ!H@ÓH9Ò&›?_&îþ»:†@±²²ŽÎSM¤ÒDó:á®—¥RšsTèEâI$X („ØQÜŠ#ñŠúYÞescºfAUPÁžÂ3dž„í!ŽAC ’@d‹?§ìëC¾b„@o£ &"à ºqM!­Ó¦JJÔãŽsÒlpw´f!6ø¸Fâɉ0OéæfÓ´cœqÂxñÖîÑHCP”2@›ÀÆe p,*3†m\mÍ܆%¦Tu¥Úä7¡™"Ex‚&BtÀ4,pS ·d  ‰qÖ2­4Á鉀TM@3lºx*ùæqL‚ ‘ë áŠ!†ídFr$ã/& T—Cv©c¬ Ñ(0†™/S¼¨ÕmȬEŠÄX¬EŠÄîws®àÝm·§[­j¼î#QDŒEEEEEFDU]uuVJµˆˆˆˆˆˆˆˆˆµºëªÛqBbæÅKq™HÒbÕìbXCJºì0›…Êd ìZžÑâï Ó=Á™µ´H ΚI#k5bécñ:œÁ`m¤’d\0ð'‚OXaDpœüá‚|X{ƒÒi+½oîC ¡¦Çfõ¢*Õ A2`† ÇÅ  ™'—|óËÁƒë ¦Ì|›ñ­N§W=LµôZ@25±‘ÖÜæ’Bð”&0šÞ,*¶#ꃓ3”+4èAð9xuÌ8hštˆ8‚¥ ¡yškLc@•ú^æ¬ëd*Ún |@Ò¬¡‹HTIÂÀAèûÉ@§å’¨¢ø„;”/Ú¤S¡CŸ¸“Â4Ré}æ1‹ü—Üçp'EM„Uæfllh†*—ZC4SA1l;mxKª “]Æ£r"S„dü5 äÝCt%‰€’‰1܃üÇZѹ Ä€qI-l £oKçKé¿€G.|õßì]Ûëî7^)áP+Ü×sx’I$’ªªª£ï?zr í„{þ¤ñô|.Ò@‚&ƒ*j儽,¹uCWt=ð¸^%]«ád^æáã ÊT6žQóˆ çµrj(¨{ÅëŽ"¤A]æy–¡ÇÕÌj¹÷§t•Šáa„ºÅŠêá~zâsrߟ¡½l(°6rzG,=½KòÍ2ì¨p5bgJ&‡µ®¤½=*â35CD‘†,.ÀçÌ1¬Æ„^qÐîë3§4šŒ-C­Ñ4êÔ&X”Rd¢eQ2JÅ÷H“Œ. Â}uá: H%`Æ“VIJ°æÒ©!•89ÀxH@vÀQ%!ÑŽ@ÂeL'wìCdéè±ëý@¡·—O l7é`:Ÿ{SVÀ‹Š\ˆu²rØ–úPœW>U‚‡¢ôB¤º9c–1zïN8å=:•¸³Ùi©²¥ç ×…‡pˆž€(‡vÊ}$ƒ—RóQ>!à.ò%'F”RHÔj)"¡¦rز7D~:(QØë‹{"'R@¬þøÀƒN}‚BªÁ)Óh”D[ªz>‡¼dÕF׋­r¸¤]Ó€fdAÈz¥5h # ‰H3  Ñ:"L……È ÁW² Å22Ë% ÌDÝçæ®›Ë0™—ÐD™2ev´ˆÌ„·.H #¼&Ï@=Ð2DIB(MÜä! {ÖôÍ:F¢„;ºIeĆèLˆfDÁ7„iP!;ø¡!–!!–##ƒ²p ó ëQAÅ !BHiC2˜®™ºæy²ž}lãdã$A„™{,!ÐéIaEM¢ôÁñJÏçoš ¨ANƒî{²ÅwðöynPßÀ¬ L,X±@ ƒÀ/†~ÈFÉ׋KÒ’u„Ÿ¡N»Â"!å†3+¸H‰1×n×N$¤ª¦Ú¢LÝðÏÈöeOvPô•"÷ öàO}ùT¤ñ€i„v‹…ãÅCÆD‡2…gêWÄu Þr1o:™ afbše0A¬ÊšYQIS Å,hA((-@§¾)²4žB£F#wò£´è‘j (VC 7ts`²Æñ‚ñJ@Á)€\†1HÍ“$Gp-À37<‘ ÁXè ŽŽÔ„Ý/9/5) (S ˆ#V4jÕŠ94¡ðÆD³TK@ B žÜ”83·œ1Dæ\…D¨¬Lª%.žîÕÀDØ4LØSÝv\„Ðb:ÍSå…˵ ‰C†DÃŒ¢tHÃZåµ¹[r¶Š¨aµrÔ €À`0Ú2[dË$²dÖš×w_œ€h g¸äêy䣽C‡@Pn š¥$‰»\›ØÌLöÚ†â:†A±ß$ô™AÜ# µvœÈBH±Hp¼'¶Pá½)ñ®ÌuŠ;yÑŽ cèÇ h‰*d8€ÞÇŒ°ì…h H1 q$ ¢ ¦× (|)ÉÇPwvÐŽ„Eì(ÌLB@Á$:Ì;8›?(ÌßPSwR, ´Z×ì?»P¬ÉeÙ$ ß+Þ™èZ ˆÑzjNyz  ú½±ïv¼J‡ÒHí¸<n u˜d¦ëÄÐÚ+(e¥Ë ð$÷ƒGÚ¶á.ôŒ[,Öò»&µR˜hSá4$!˜„Ù! *ý‘Py}4µi1š«¥ D¡H€÷ää‹Å¶Ž–Ч@ H¡ÆrO<*êÉPÚ2hCĨíŠ#/ÑQŒ…UD²ž'ID˜H¯#BQo*­PNæÎãjÈNð” &!VD¢”H„¦h¤H idvÆ@€çpƒYì@P!S4‚tžSÆôïs `=†=iH„bB8$ ‰¸ë‚#éâvy£´½!˜&!¤$ ¨âXuÃF‰'±~Ùößv}ý°(6ƒ°ÁÄf ³†Î§Ã˜1RQFîÖÒÈAÌФ$Nºú›@Ç á´Ûa¶Ja5û¦ûèž{ðÚùcöcmœÂG¢ ‚Þ4FfJŒ'†.£á‚§„wÆc2w!riÅvÇI±ehŽS¾öIP¬D!*bê9ÃX^ð0FÚ¬Õmò Ÿ1„+03ÇãJ6ÛÙe¦Ÿ7ÝbŠ%hó¦2·c¿ªzλµâQ×´ôúŸ(AS>«÷<'içêúM3°îBˆD!J Ò±*1DQÚ•ù˜êjXH\‘U\€/,«öÊ6ç`çQÙwì`ŸoPŠªU!®Œ‘ñ1yCçõAóHœ!Dr-"…P`N—%‚§"Ø\OåñèöAøà P(¹)„P !'KL*1øøˆ%zä˜×"ò.Æ´0ýÔûÌðz"<@÷ˆÂARÌpîÐa­Hz‚ç»à"ŽWSm1Òô-à@qT„F‡°×Nž¥[ªðbE àÉW–œm âD 4‡¢t6Ü€J)*ˆ„‰hCÁŽxT=ˆ$+ìBJÞÐâ`ÈÅ(»sU¨¶(­gÕ»¦E#­G²`&×Tí ©¨ÇbÅK"~9—1Aá R”1H';×|B@‰ïxÀñeØ-K@ RÐ(-̹”·2Ö˵µ²íml»ÀþMd…J?^!Éö|ZBI;‘KÁffH™ŸñÚo±&‘ ß „‹`ÅŽF#Ù¸H¢ `£¿J±šAQÝz뿊€(r<¸—â va zgªÉ= ψ€tH¥(KÏÉ1Qe Éé% %‘$Px%S–#g< ©©ßO0ASÆB”¨þ©X½®=Š£ïÀ œ@¡ägJ‡!îÐA“íl˜wß4¾ È¢Š(¢Šˆˆˆˆˆ¾­æ¾GÎh¢:þžcHåTôs“[1醰.B$•UµW;0mBXXöñͶœ‚ ’.ˆ?FÄIsœuC†¡¹:ÑÂHB«t.?37»8«Rà28ÚÄအÜnr«„jSМ U1`H¤0IÓF¦ðÜ:sÅÇܜթ¦‡É‹4iôÓ”›×«»7*2²£€4Hw9ö„ÞÞ¿ Ï–òòÂ?$“°ÄÀ°Ý „¡…B†>w½C òÞRË®›5ç²µîDpófô°d¼‡llu#§îôl‰ðÀôYÂjÏŒÐð¸„u08ÁŠ î`"$ùe=ØÑ Ã’KJ:VåI­)L¥hЪµX¢À¶¬8‹¾ ¸À5¡-“3Á¯DhÐÉšÓF!ˆ†Jhç†Ò;=‹Ù4 y_v"зØý¹ÇºŸlAóï·GùúâkÙDûÚ÷ï)Ùçd½Òôï,= Üùz™ñXE„YaÎt!¶Âj™‚Å<£ãäë@ä>¬Ï«»øCÒ5Ó!4u‡ËÅËç.ðî ×ã¤âÍ=à¨ð uî­ñöksã—(6 T3xÄ §£¼ø~ÏÉUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUõ¥­–ªª­—ñ»jªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª¬b»-lµU[-lµ²ÖË[-lµUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[-lµ²ÖË[-lµ²ÖË[-lµ²ÕUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUs3—Ä#ßÕh% ‘…:=~³ZyË MéÈɉ ¿í¼~ü8ňÀ|éÎr'-º+Ð)Û&|”±>*sG²g½%.>ãôõûŸ^8},_1PÐVñФª„ÀØ,`Ùìû³£âéÊ0‡¼ô<¿yLôÏ<óF‰JTMLçu÷wwwwwwwwaÖîîÜDå[‡317.®PÌÜ35UY¥Y;[Vg7 ”êõÄ\ÕÅ%]í]ÕäãÖÉ»ÉS*ïv¨ØÙkv1fEÝr!öd{…ª+ÅûÝÄøo¡²Ûb½x ©YGËmñ{0UQPp6ã›g£`þHþ¡e=à†E‰ –€ CQ÷sµ¤C÷xªL²#€ÎÕV…–UÒmf5p€ê‰}ˆa)ˆ†ÐA÷­B‚%t¡qéè:KGÔÝy`V~`²H†¾N!'Ë0;°Ö"kàxaàcr0›vÐÔwál#&e¨©Q#Ò‡€b¿ltûä¤VŠR´ÙàO–pÇœ‹Ä óyZ‰­yyiÅTùH¢˜€’êëާ¨t®sI"Š(ÙXHè÷©OÙÔþö€º¼ç•ÓT›G¶‡µ¢@‡„¤·O7ÙÆ€€µéìtðkrâk—4;«—YsÁq&#ˆ0¥E݉ƒŽéhÉ®S4bj]uι=$ï6¼Dˆ ÚZFîµXRÈ%)bda†g´í™NÆ–"»»)W¢éUçv¢S6j¢h SiÄ”¶ÇkB$•^.ž-Óç×QK3,–Y*ׯtBšVÛ¯KÏ-QQK’1f}ÿÉLÛl&•œÀ¤ÁÎ ËmŠÓQBªADEîC–™9N#nÏ„m6ü@\$SKØ×{ïMÊ‘J™kÄ“`£Ypˆ’)ÎAª˜Îì¸L"+;ó¼ü˜ðû`jûðU¼…- î|FAXLdGá`˜ãCÂJp2óé¡Ð óÍ%Ò­H. ÉB@HÂcºîÐJN`ÀŠUÆ;ÌeÒ$iÛ‘–¦×¾ùþðoEìÈ '“–ƃbŠbHh´àFi JÍuf]vYquÖ¥Ø JÂ2DÑ:Ôæñ’SÐd.òL*¦Ž…“d>§´·‡Þ:¬hÉ ky–b=­“nG† ‡‚))¢“^IZúÐ'‚Òí娆†‘7¾´¿¹¨ £„½ Âp”Àй¸Ì|ˆøüR 6ÈnqÝì$ð¬¯(¡< çφϸ¦Hm9(dô뮀ªk``X¤<²©–¹ûƒ‘F…<i/„˜*#Â'ß—qÊúV!ãßj`2’NÍ•ÁbÑ,9 ¶§/¸Ž4†pÀ’#c¸÷aÖçB 2éÒ¼Ì>µN[àO;Å 2Ge%f\‹XçJÂòÒ{ëäl´|wÒ`èŠFN”Ù‡ß<>¤³¯Æ\tE/ŠW$^£m ‚LI™•‚P)e D€baJUO)ƒ" Hä]cäI{€‘¡"J@¡ å»zß9ãw§‚VŽÑOíÚïì:²ïܨy"*œ‰=² †ÛØôÇdÒଠp ÂÏŠ·ñöx2Sµ0ñ©~ðž Éé‹‘6$«áæž.yþD/£ZÕ1h†KRélµ‚¶MG‹¡6æ¹],¥ÍŒ«Y…æÌ„2¨¥6E_¿&*ï!Èqþ½.GâD`f4ÌD)éÀÀiI z؇R@(X—C ÐJ§_RÓç np˜|.ÙØŽ‹<«¤ Ê|=œÏÌð4OÚðߊL 1víOsêa¾Õw©ßÄÎi¥OŸ¾pÍÓÃ(fôìøðÙ!ð;d!Ætç^}´½&ã÷aYá3»€ÈÜ^Á†˜  G^Ÿbâ'̶@ái¶óæ æ%Bœ¸˜a¡_" Iž<Ú®CÝCóÏOžÀt RäáS\XœÁ†ƒCl…׸Ð8ï]vÌ ‚c„¿ˆMúg/Œ „ìô±nLÕñ˜vœmÖ8ÜXd©”-À@¢+‚c†÷äÐf²3ž8›KKQ)LçP‡Lܲɽkê!Xž”vÓÝÎŽpƒA£FœØ[3¶i&†FM·Í¯6C9иTeY D¸õçuò†ë:ÙÕÝ\:ºÝÛÝ:¢Â|g ¾\ò:==è¼pI×±Lwp7áŸLóÀ½N½·EKŒåtK8ê7FÅ=}Y•q®ÌYd&rëJøËˆ#è"^<\ƒ>÷‚Û_ÊÀŒ Ò»‰ÁqÙtzø©Šy„ÉÜt“Ç»yiÔÜŒIä–> µ=;³†¤½P™ÑÓ³µJ•Gdä€vzyò>d ùüÝ 'Å&%0"§X=c/O?G'YÏMéă»—=œ:%k²"ù¨¡•% ŽYàjzßS.ã«§ši/ãÞüÐdÖ´¶È@ "ƒ}õz œø¡ ˆ¤uôÙ.ÒT‰ii‘©Rš‘*aRš6adM)e,¥)”Ê$¦S)”Ì$I„¦S)”Êe)‹ZÛ1 ‰)))(0A’’“$ÀHI I I$†«kè;ÆðIrºRxñ^@¹] çDÖßCñ¶ÏiѰڴ‡hSg€H2 =PðÆ8ž?i¼Aøžwãܦ]ì—œéPû†K´L'¨ÔµoªÔÛ.Ii&ff2‚Û4™ ÛD–  ,Í+¢ãiCÙ{&‚:Ú¤ âûFd‹ÈàÎ3—aF8Õ º H• º3/EDËj@lÌ21®cÄ4x„ÇŒÑ'$!Ĉ^ΤEôÍÏÅË–©QLÝráE03IšÌŒµ5Hj8óI¢èõø¶¾GÑËæþMˆˆˆˆˆˆ¾j‹±ÍÞ4” ÜÈ_OiÁ}×)ñ$ñ$ÔÉÂGRõçIè+LÄñêa î±2D¬<:ֲ ˆñÉ¿’úgo"åø _St!®1´Ù5%ǶÁeÜ™zŠ©£ƒgÈ—¦‰·äž‰óôéPÙ£Œ˜{ ð”/±eHtÊc„ Ôw/cɼCmÄî‚HOO}âάù9Žƒ©§›y8…Ü)$ŸMG< V¼óï/™ó¡šs”Ò#f aˆBŠ\‡"÷˶ÛKÌæi<ÜqOM –Fu÷í·dêÀôÁÑÌ•ôÉö¹ú5Dyn>Œòy^ÿHrØWE,· À@L‘`œf ¸m›jD#2œb <Æ—OŒÛ8\·±ÐUU±‘j1tˆ&‰0ee Ì °ÐY41ÀÌË ….ÀI™™2¡)Ù1Ì6ܤ…‚%ædÒkl¡@Pš@…w QC –T ’ñ¢t)Þø§§Ûq…h7„: '£¶D £Ú›R÷PÛ’PuÝ‘à‹h<ô[ð;´û.!¹–Ã(Å*ÓÐêd9ºëGD.v!P¤ìNT`¸î|x 6‹LMyq97 á˜fa™†x\ë”@ªª@ ‘Ìâ ®êUòs7cá] i¨TúÊà9œÁøÓ×¶[ž1W—WR-`¢ÍfûîÍL^²Žû=è¸/¾òëgOjË)IƒMâCŒûÅ8Úûr¾Ú˜hr þÈ /#Шà7ÜD<NÁRíÏ“°ìð­£…ä7ŽpÙçE³ÀÔ7P¡ù± ÀÆõAÀ\ófƒ‰0;‚¢Ý÷ðG$å î„xVñxS ƒ&tÉšß/Q] Y `Ì>ÄÍÆ‡Y§+\Sz8V¨`q´‰7ÐV•v;I؈ºz÷ArAˆ íèp™H‚ÑÑÂØÁ ¸èiÐÐÏWéÊ \ˆ`€\»¤=K" ¯ŒçZ«Qö\w.úpÞ#–j†º§¶CQ™ˆRD ¥¼sEƒÊ&©Ñ’åð¦oÆè™&…«RÊÖHó”;-ÐYãE£|Dr‹aÖfüÓ5´A˜¡…¦Üž A3,9`è׸~ –¹.öêK%» fóúz< ·Ã1Ôã«¡»Ó žÜQm-³¸"»LU.ºð‡‘àŽ»×G‚:Q®,™ÍŒ¨ë£d1X.ølâÒðræ¼B"pœ7¸«¤­0&ajÀS]"e–ÆH$4 lÁ ;<‰ ðôÐØopîyQLfÊùÖ§3,áÈ"ïLxÄ<”°èG‡¾!Ã6XR˜vË—•â)œ‚LƒÌL¡¨ $BâW2Ì*ø" /‘%Ç3…‡G3¯SE¶F—w‘zc\»Õä^òàÁ ’˜"Ù)®ŠsfA°5ÜowC4!Ù€€áÓ45Ã$Jjcù/DÒÆì  pÕb™13 š¨ÖúØç³nêv€¥ás5Çm“Œ<* :Fa :\w¢é«Nm…KÛÁÙØ!~»ÏtKåâ¢Æ¯[\j¼Ï7q•ö$ÃWËhØ#¬A7d-+‡¾9`ñ_7{owžæ»€ˆˆˆ€6 H„@h $ ˆˆÄ”F$„€Ö±$€ $„„"Õbž„Hj§KIȆABKâsšŽÐ FH®A’okjŽö^‹yp…xnPÒHäáCwºñ© ÈB f`¦˜ YUcÚ‘Ð`ˆ&È.œQFµ•ª·²½h»®çdîåÉ×L°È¢ª {ÍÔÐëM6³K(ªîoe™šÍî²' [Áarκ^»ËÏ.Æè’š‰&[™¬4Ò¨L %‰y£$fæq×h§P@ƵÆc²ÍzómºœSš Á.2 ú!É.?‹‹äŠùòŒXÓ‡l/“T›!òóôɸžËMã9–X¨Y=Úµñomzc-4™a&Mˆ‹) DҢɂš„@¯í°2J ÌKÞ 3" »ÎŸœ!Ý”¢€ñkȇ–D‰Ë, Ý’—.·*1»V¶¼ki‰tAE#ÁP9ö‡š¯–CÇèÑPúbv¦R¿Nki¹†èszp'c‡‘D¸?$Ú Ü‘qF*xÎskC0Ïó?¸›Œl¤é5®ÎPìDökËë j(ëòן’8p™$ª ‚$¥çŠ.ºDÃ(‡·9(¾(MGî¥6ŸjC*7…rT_דR»@@œa†EÚã.Bm +;’.BÒ‹I¨hW\1Þ€ÞC¯¨©=œ33,` ÂïíÍ›sªp$÷»ƒ°¡ãCp*Ïwdd£4S_”%2‰€˜„ºª«ŠÂ Øž-B—±|¼†& ý؆^²<üÛöTå¡—ÓE›‹z Â£"­"š›³çx;âãOC„ Ð’tôõÈ3Ó„3 Ëý*›aI‚ aE‚õÝo…L«ßÛuÈld‹ÐmÅ nžŠç˜ÇutÛ©¹&§.Ôî®Ëº©ÛÆ×ŠÜ‰7icƽ<ݯ-®î´j'uèÞ5¦Vñ\¦ÄÕÒ9L¢ÕÊ.\·Iyu3Iµå×s†)™ð#p &ÈI C­ Ò@”†M’^>kÙéæõzùÚ ™`æc„¼ÐÜÆDN¿œ•%ñðØqAyBŠv® ëž°î‚ž€tyè™êiK‹ZÅröƒÉ]! %>Ä™@9 {zd5’¦Ä*{‰Tï%YˆR[Œ>¿_?þÈ|‡YPJA¨ƒ×ƒA@IâƒÙÅéC±ÑÖv'"L9i.‰x!NÂ8ÙCSl>Ú›˜‚Vƒ64ZÈ}cÚ/Ð?þ|†Þ£ .˜0@¸wÄê8ž2èÉD„ƒkK×=îŒÉÐßY̬LЃ&bDwÑiv’¢D¤pc¡›}®wבΫ|AëM™˜ ë–Œ 8A³ÆPBáˆvNAĈ“nxÓBp·L¢†)sà+”uC®)"hé°ˆ¶!$€Ñ­Ù©Z3&Td¶¬(%(X!=buó뤇DpÀΑ´]æSGŸ 3âëMáíðŠyç—ǺuÑ @ËJ¤¤¡J)J·”È ”!†IM0ù3 ­B`0½ÏKÍ{ÈÙà„Ó RH@a+I³bsËäáæöù{Ïö÷p“„9Ž+'C™±`öÎFÑ2Hx0¤¤h_t-0w'A·Åƒü_AºDÓRML-!ÌTâJõ2¤m€¢¯6@÷*Ö+<éoÝç@øÝP@Ð↜è¡/ ùCóy|‡<Ú‘‡W q"M?È÷þšö¹õõ/q"þŒž‡ —o³ÝõšJPN† u€£Ä[óù9vriÚ¯c×Tz~¥ð0ðÔ‰½CDÇù¡à¶×¤T5õ)µ–`ñÖf&°ƒòØ.éâ=ŽÜ5í„£^þ8‘í½ž³·mу÷µCϽL¡yÃV½¿ÜçjuÖž£¨‘ÞO×1eŠŠ„Œ}˜i”È%$‰ñÀaçÇ„pè®h¯Z'è’”ŠÒò£Œ_߇Vèxyg£ËØõÜôÐÜÛ³2ÁÌLTb ’ÐDÚ˜‚+å<›å5^GÍwm×0‰°:è±` ­kÈǘ7|\èµnª1¨ß`    Äq›eöCò>òU€nŸ¯Á"0?p}Ïâ}ðƒ‡IÜ81̤ð5¡—#²x ž  Û£S¸á_£ˆûüâ5ÃÆîÐI"Ä $FšÔN¸\›Ë65ÄþZ¨/¸¼–*‘D nõð¥=ØT¥1×YÌ;8‚D‡i«õY†\ É[ÉŠè‰7 ¦Ü0;ã¸<B(L7w ÷½Ï[§Èm=Ïz;‹Y,}Þ­Q7Äwo§ãÁÞ g'Ò`á? Jß*Š:Œèí`,œs”ÎEÊI )Ö ÅÒ@D”(x¥XP+*Zèõ¾Œ)Î_FÑ—Û¼í@uAh3t›Ž!æ–Ö–uM¯Ý Ò}ÃLy”–d­ÖIº$ÝK1­–ÄÌø­ † ™T6f:àÁ PK†m£ B. Íl•32r1ù8½4™C°›AÃ$d$œìµênÉ'0잌º`CF¢84])Ð"…ˆ›a‰4ˆIPk:eW1ÅÊ×HV¸FƒkÀØ›d8_“%¡ˆ"[ðs67‹É”Å&ì¸Y Uˆi’šÚÔÐ ç)’˜‘“Og¥Îæ·¸ YŠ0æAu^uWgF·Þ6Úß[–£!‚š 8bàë$ÃAešòrÃàþž–ë Da(œ7…ø ÄZà¾õ¥Ñ>™g8QaPw3ÂÉ„‹ï~ý§Á/©Oµ"[è²L,”’D„ÀCR‡°Òb: KÙW$ŠR)a„0â4– ˆ]7:¿ãÙ[G^Ö–x•»€»XcAß-D©qt;þÁa1qÐ0…eà×…ŸÈ¬ý3êĵÅ#GƒÆ‹à¬áþi ˜?Íцä¢jQ˜üÔñþ1—=8jp…â  ¼Ãì3Í«ÝWø°˜HY±|¾&)c¸7RØ‚ðEO÷´@ç"‰#àP®`¼Ì.‘ådCŸ_h³/¼÷þûàîQnbþ:º½y±xSÓv/§£9 ¦°|ÒŽUÍFŠm°ªÅeêìåW›´¹Uàú°P\ nŸCâŸÖC£ýÕýUS•"oó~Ûƒ•àçk}¿Ú‡6‹~¤ï¾'–BÿÌgüaû@¿ËþOòþ'ùAt:õ™—®pÐNA†Âй `1öáÑ03yö/á@‰î¿Ð óÓãBëÕ:±/ü¾äÿg?ó'ögì{5²¿â¼­t9‹Áµ<¥Îþªç‰`OØô0¨þîÊ•*ŠþoZɈ]âþÕ€&A  â©ú‚pû߀~>3´› ù…(÷Ht0¯ï"&tÀ‘- ôÏúÆÆ­ìŒ]ɲîèh?%ƒôìžO–TþÆðqÔD,h–',¡IËx©„ÿŽ@ÀB¡ÐB÷§dVÿÃÁZ&ÁÐ~œÞ=ëÉúˆCxñýÐÓôØ& ^Cþ”â'õAþÃÀ"ŒZ {Ÿê‡¯Ol ŽþæÀË3 ¢×ùævð1ÍÇ–°à3$h½ÿ\:ƒ”ÓJ-ŠBÀñ |¡É¼çRöúÌŸa¬}àпsKõ>`,é_"?E¿¦1òF&TR/CЫ$“¹€0ynù ÁÈJ L†'£þÙàÓòt˜åÜ$¤ ±¥¸7ÿOz&û`È/¬Ê·ÒAu?Ï h! 3´‹ÔõvnˆXù>¥&¤þ—ß#ˆ#`¾Ÿƒ#ú'Öù§Ž¬ó/×€}>¿YïñO¿vK*ªè³˜PÅ+âî?ðCÀ!3\ö¿Óª?Ùñ¹üdfV´ý¥žIäÿFV©]hv†À0HšÔä‘’$pv9ƒ¶ÎÖ}¡ÔD_xúxÁ2…#ç“LŒ2‡œ$`yƒç`òùsÎ94Ï—GœbqŽrî•í1 øØÇNÂØÂ5O÷›•4& ¶ÒkLYêÀC Fb­«–Æ£}o-rBÑ>Ÿ®ÍjF©–N ç3á!Ê SRfâü?äÓ$׈ðžÎOßø|â ±óþ×é„A/v¸ðüAŒ0N†>œ~éí@; «@‚B§T‰Ät?UT/ý…ÑUü“FŸÿgõEçô=¯kFgìÀ?‹'âò(ˆ¢¢b#–¹UuªÔ?ú£f 1GyÅóu€ØÿË?¸o±ÖnÐÅ· ®º»û;ú†0² ˜L]„ÚGéæê^w/‡{!aUR¤¶Šåãè: ñÙftûjMá½° 0¼D¤z>Á«óÙ•uýÜHAóE~·*HiqÆ2deúB¿’âùÿïÁÿíõAüÑTß-?¨ë˜ÜcCÝ;L¥«EÈXÙhï\:×¾ÐT/rÂJ¤§Ý>Ø\H9ù¹÷ý)+á1ÂÁõg÷à¨B<Á€@ú2¿¯ÄEØú!÷Ãð€ê'ó{¾?Îèëý"I$žöý?9ó–QF_Oèsžt“²©Y%Ó¬” ”¡•³oƒ5WÜêUv+®„!…/Ú5§AÏØy>*øG²_¨T¯qøÀ¾ˆøô%òÂäxâ0ƒÛɦ*¾d@p­4PMÅÇzÓ÷A|d0†ìÍî]~¡ï°%SÀ‰úÀüB8†?µƒ«¿Äf1ïÇ¿¸¿HôÁ×C'ÁÓûï·Žûnʺ$ $É1$Ï”S\:dîDqZZBØ?¢{‹Ä ý_ö‡÷Gú_盽 ÌÁ+!|ö/†aƒ$/c2?“ðÀú?é‰ÿh|Ëϧû@ÔEh]A‚Òé |€d’èP&‘hØbÞHcˆŽý—m’@Œ`^w`°c…rÖ‡âü¾”OVØÜ~·ÈËÓ/ ²gµÖi>Ž#±ô¤â©CÀ`Dèó×fzú xijùuÁwêT ϧíNoÐéê,o´w…&1}z ̆fdÖ)Åœ/ €=wÊ i<²?]2Ÿ±ß¯šqõÂb<~Ãà4s& '€ WñÁfö¡3Óû'½ê@þïá<Â'qQ*½£]èU®o‰1?£Á?Èíï7¬H.ŸÕn(ü…´¼p=SéüIñÛo“÷Œi‰hYA“nü(ôêØ_¨äθlÈn„£ÅÔ u "! MO°Gøˆ¦ná—ð(G“…»Ù/ ½K½A¤$)™Mh¡9J*° Ëw[ån7Ä—óF¡s?×±û¿»ü?Bô;?w{ù>7'ïo.+íñ‡ãý?—§‹«¿…[ý}o ìû̹éÎ{xýq ߸ ·¤ë{o²í}˜.A-—DL$É›”yo5?Wå½ò%Õ‡Jjþ‡ôÏçñýìÜGðv‘ÒZê•ËÙuyàn${/-pú«0‘òÇÚÝÌ~Î=&¯îB~ȯé~Óùí¿Ë,Çüj¾·~ôüãL8Á° ý£7Ž€a¦@xø´§2>®.[ÊÆ•8ú]kùƒïK2uðqÈC¡ ““PÅTÓ_xÀ;5·íÌ-’:„6I[¥ý³þUU±û݃©Pê ¬ý¨æ‰xì©k%·ö¼7+Æ®q.êë»qQT.RæÉ€z\Y„C6g„õ3pŽ…YJпˆÆÁœÈBCôÇæáÈչõú½ úkL'j$dÆÐéc ä/úXèS €Ü‹T×™·ýe\ôèÉŠHÃ{¯I¼ÎÔ,8^Âîb‰h(þP¸˜—ÏÌÒê *$$‘TñÁ‡{U7Mu:ÀžIãÙn¶C‡€I¥9¡Îçä/ÚÚbG¬ø…û}ˆŸv7Ïi”…„N 9s‚Ò0 ±Îx]&QJaŽ­(à º”X€ !óMH~|ô'#‘[}°¤™ò`t¥@:™bŸ®3}ÿHd™â2ÎÀ ÷˜‚Ö¹úÁ>•(Mæ²aºm`Í8zøè~CõJý?f¢šð>ΰ.àp‘²ÞÀ(]Hkƒ!Ø(d*„ØŸgbÕ÷Ao¡ß‡Ôo”USƒ›FAùàâð&0± 6@æ~ˆ~—êuà—ùY8㢛ˆÔx«AïE¿Ö(GÁL{\9‰ÊdËù‚ý0õÚ‹E´‘?2ƒ˜è†¯ÓÓ®ø8à¡«¬¢7£RSªRây¶7Oœ|á×ÕB@wx9Ks©ñúglKÅǼüxDr‚Âj2Ÿ¢$´éKdHJÇwèû ^Ü4ŒÙžð¾fî9é¿ ÍÕ""11í§"‘õÕë½á‹Ã¶p‹gÈg`CÀ±‚Æ/²Ý…Â#PéÞx,g`§¿þ4Œ!DŒ§aØuœðþV÷˜G€<ÿo¸Oóa÷>;«*fš"—Kðèi×üQ=??ÁòµUxöÄ ¾Ý H¡y ßæ±„3xÎ;3AYˆ:F`^ØpØì/·¨¥ˆ]¯C¹…ñÍ·Ê÷hJ÷Gäù4fv>ÿëþ2kõù”DQQ1þq÷CáƇ8¢‡¯Ò-B=_‹âR±®¾·­¿ó6Yõñ$,b¿Íí}‡‹ë™¼Ÿ\±)„éàM´©|á,È_T#ŸFê¤{ ©ŠÁMèüP;;ˆ÷wYU_Þóî7¤Š~X/iÚâY©öÒ`&`2`X§u…(&59ÂŽÉÂ/Ê; ÌÃÃeä†mÝ‚° Q0öÆG}ä%ʹb°åÛ^£ôÁfR™ÆxW?{zWÇ÷ãP:zϸQûòéñÓVᥱýð’ñ–`=D…Æîø½Ø·}€&ö^(úÏaÏàÄ?¾xGãîs;Ñ.o>h!]X·EXÿܸ}’ ƒÖñŸ?*>¢@©H{H_@Ùé ÌÌ͇©Ô59Í-Ó瀺·Àê aLuE2ê+:öÛB—ŽjÖ$P!‚…‚ñŠjyÞ8QÔºš˜7:žº¥ÊÐ+]•âARº N|’¿d!$oÓÆ’=ðj­ß¸wLj1G¶Ò"mX Åã“lNNBx8OW—dÔ|ó¼Ô‡Öí{,H4ÅûzÉ#ýq@Š{ø¶›õ‹<§0+ñˆtÙDè:£êòŽ ð`ØO¡ÉbÚ Î|áû @È´ÆÎbÄü‹ûgã bq‚×Ð-¶ û>>€ûÐ~²q.%ÝH¤¡b´pt‰€Q]?oÛï~¢lPõ{ô?‰:÷hÌ’Àú˜>¢!ó"lðmu$¶É0°{öé³3|áÕô«á?E,?ˆXðÌoêÎÐ&ŠÚ0ˆíŸæ÷‡áxs2ö¢Ï@2h> IAV±îNî_AÆtYrÂsêûVƒAäy?$sáÕ\J& /¼Ìb}>‹Â+ç¨d QÕ<¨1=Ã{æ÷/œÀµˆVvp^Z‘Ømó»M¼8¦›±D-o§oØ0|o¨5tý¹çßüŸ«ø\‚ÖÓéåÇfkýmñþ²gÚ‰ð{VüT_§µzÁóiÏ}Ø7[_Nkß·­Ñ¬`a0&–Í —£yns£‡ÔœNì óP)„£.Ž&l{ç|¡ö.«Ý‚ðX:£‡‘£™¨ÃýžDL3 ÄÂ\vŸ““KæÊƒ§ ¨Êú=ేÍÚæh×î[ª3 ßø¯C—`ójÔ¿‹–ºqѧ‡$Ó-¥'šjrĹ‹:B–'`ɯ»ÇçÛÒUovüJÈmoÔÇ‘Êü÷rLkÛ×£o°†³ç×Mm|Ãä)«êfY¼d¢ù<žðszy2økt¦ðÝù²+i˜ƒáPtîÊý¡PìÛ¤ÌÉTéóS Üàì T©$ªû@z úg…‚°«%AÉ…Š0dÈÉð~_Í{ž·Åðû7§²ÙS2Ûwfç<ïÚÜ7sÌ=.n‰ã›Vk%7ÑÏð‡ï²›sS{‡éd†K ›g+×{¸™ÙÈ3³+Ôo¹0Ew³“A K-ª÷ðës¦‘^ê;Î#û¼Ë“nÓõµµr6bêQ‡{ÕeÉ5NÒÌg…èéÕ)¨JPsu–Á!×e¨ÊôÚË[C‘:<Ü:û ^N&™v‹(&f.gf#Ù–&"Ò,ËT (†$B³z“6¾(è³W÷¶ “0c¢¨ct¬`­¤3tÌGmˆý[·_­¥cF«4M¢¯wCO1½ùÕjkã–§êoÔ`·ѧ•´6\q¯€ÝñàOn>ÃWã<'›©·¶e¦ùÒeºuàÝí¶öµz6àÖ«÷táf^ÃÓ{Vót!ÚÜÚñXφ¬Æbðá`®Ù;ûŸ¯‡{³1½šû“m¶oNñ‘ù\–­ÈÕðõ”£ÛÙçîîèãæ¿0ä^ ›õlÞïïÚ¶ãßêJÓÅÍÐ×L®]×\Xr—ð¶–^Þ?Ö›®Övô´¼}+¸ñ¹¦Û];e®Ýni¢ª0jsA^vèÍžÕC”-Kx8.›c}ºkîúƒí¶° ˆ¿_³Ù"°Àì|«¯¿±KÊš!íU4Ó§(É?nõÍ.žý¶òsûxôøïkR[ã_žj²Nc¡^É,%OIµ5ë¦] Á+ø_Jü&¿Ÿ^þYŒ¸äÖ[©yôé®›¼Zóöôq1·|@ð!=Ñ ìP؃õˆ§|ep§&vYo¯ Ã[$uá¿ µŸ6ï*ìA¥1Óëaš(n'žÞ(‚šêèÂ#1¥T¤îƒl¹‡&•zvÈN;{m³9µ¸õÕ<ãl…øþÏ©ú _<;5 ¹)˜í'] mè`íaôpË|ÑчÉÉá~?Óü?'ÑŽÂ|S¼`b4vEhM…¯3C¡=éÀfLÊÀ­ƒ+@É(gÂw‡f~†þÎûØÝž– 4ºøüIuö{pçõvZ÷ƒg_ sdŰÅì6^Ÿ¼‡Ûe³Á³ƒ¤ja x¬za7&æ=_ g6kð¼YDZ¸¹Ü§r|ú̓%믟~ü4Fº&:åûiÕ¿RÊÆ(5¶êw_žC­+µ4°r’½ÎÍb»F“s{ðÙ·¬±Vtö•šþõËÉýŒ§›nÇàÜx‡¡˜ÄÚÌÌkG”йƒÑÎ̱S뜨/ÁÑ¡¶N ;ÏMüéš%®ìDÄl­)f€W‰ª˜Ù`–L0]µÚy“éô9®ðqåà^¼\¤!Í[èX§Òàtðj&ÚÑžÌA IôØvhÁ9sCoͱp?¯ò£¨Nul[-èÝM:ëB ¢®™WÃó̺»'€36•aF˜¯°3o˜Rïö–6ë>xpä|®Ë3î0ÃóùቺቘŒÛ! 9½G7 P©Ÿ•`k—g<,,Ûï;Ë_èé® {¬Öp-•ËÔÄd2ˆÚ>çoÆã}Ÿ)dœ–2íð_]é‰ùÅå;¶Û?…ДémÇ J#Y½àûØþD^Šm‹òSy7YÊÈY»3 †ff01Mö¼ú9Ç‚ÆÉx2ʈ4jçSÀÈŠÇo_…Ï9Öjª«ÃIœ-.eç 7I˜9Y™ v ¯G~4놵íÊ#އw„ lùý]Ê/é’èÛ`ÐoT[âÿèú`a“&gß\5ö)ñFÛåÕ‘LÚLÓvñØÉ††×‹²æÃ»¯œ9íNÁ¶{úðIï¶Áxg¾êa˜… Ãàyw¥,3©VýåŽVx‚\Ç ¸¹šP^:fÆVÌ1ÚÎ‘ãŠØíÁ!ƒKBžû­ê±à¢%.Z) .€M;:gG‚˜K‚iâé¢Óœwf6Ü_©óæÞŸÑšm­ÊMŸ9zêpú‡vÃÌ·Î97é§³«å[©˜íêi*S>rÜ¢œèò`³rD9ŽœsTI‡~îÎã"=^:uUÍÒ~3š;¦<ð›6åaÆb“G Ì/% Äå¸z^ªíÓ€Àx}ÿÒ´ÍÐÖHõ7t½Š8õtAÂͪ(ç#%¸Ô±íÃXŸY§ÒŸ—§Û]öãvÊ%/;z©³ƒ"u#•p$€ójS¹hÏærPè!}áÔw3PÙ0¬]°],ÞAËà»c8"çs‡4Ršö~Ôʶ “Þw¸DÑ5pŸ‡gS•r¨rÀ’,Ì@bFkë/æÀ“I´û3LÔ06Vvb¶$wA¸U` ¡UÁ'ibe¿‰*t@›³=9Ù“ 00É“5Fc1ëµ*–œÓ@„!²³33nçr0°Œ¦;ܶ•¯í*]LŽx í¥‘Ý[yTñÎ…ä={R‰Í‘eâËf×…£¥›/Š3¿lìí쩯Ɯ}ò Sp.ÆN¾‘¿†XÛ¾ötEïEúL´~+êóüé§GíÃêýÞG˜ý[ÅÎd…j?xÒÿÞÞìp¢Š=5Õ–´:~Nî1,\ áöÞå¢VVìŠs©Ôx SŽp½ÆWŠù¿ôØ-Ýãõâèx^ˆÌÛ¼ßL^ÒÓLÓ<)Km%³×úížd÷5ú'<éÜÞÃ=.-ßJ›-™éºüijEÖ³²Ù8 ©Ë®Îbÿ.mû¼hT6Ô„âæß}<ÖúØfQªnp¼,ÂÏò3¬aÅÌ@ffa™»ÛO¦à!LæX•{ 4žDéǘy³h„3” ÇûƒP )ÜwœzôLg»g¹*w™p†ÅaÝØe,¹áYÕlà£Ã¸ûxrŠóR30Ì3:'g3KyŒL2fššv¤.Á†~¸ã”[êørò]Cb{Ö‰ÜC ¼ƒG*ÙÖíTŒ†:Û–g´¦ 5 ˜šoÙx¾ÖAÞï+Ƶ%w÷0¢™¿©8Ÿf‡ì v;ƒ™¼ýïBR•ªüüòçÆ+Xé„ñiHH;9¥E,?~Ú"] *b1ÌòÎúkýµ=—*X;Zl33}<ô.p‡Ú•­g+øWRÙ˜é·päyd´ší\;c-­¨ïí{ïWЬ±iußgc\±aš!µ 8+ÉÍ7Ab·‚0k÷Ã;ÎÊ;ÆhQÇfæõqñµÃm]€Yޝ ç{ÔK²iòV¦Ø‘¬~0ÂcޜԀմñ„±¨øBª-TÄ=A_)jîõœQ´9Ì~ö!Lýõ=÷ŸÒË£co›ÞC › àª}ª&¡ˆµö­¼æÒiÿcéˆEw#òýãÉÁþi~Ür¡Ï›î¿G¾Úø_¿¦&vžûÓÛ{ÍÁ`ܑɞ§ª‹ø}+ø£‚¸S®éYDš¸é £lªhçsrÝ¥‚ŒêË]•`#(´½Âqм}N Bó#ŽPÂÐCG=?Möy÷Ù¼(å9'ë‰"»”>eòï²—“‚dŽñ(qI‘®ßµñ%”Âߌ;yЄ>ÊÞè·ÅL (œvI(¸/“$zþÄúbƨmj O[å“þnD-ÃWÛ"H!%Ðé@}¯ÃРŒAUñ׿’t„É›qzp˜A"û'îøÇà~¨}è6È®„®ó×ï~¯íB?Ÿ8A§ÿþ.äŠp¡ Øôžlibzeep-5.1.7/lib-xml/test/XPath-Test-Suite/0000775000175000017500000000000014176701531020400 5ustar maartenmaartenlibzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-001.xml0000664000175000017500000000020114176701531022322 0ustar maartenmaarten ]> libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-002.xml0000664000175000017500000000104514176701531022332 0ustar maartenmaarten libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-003.xml0000664000175000017500000000052714176701531022337 0ustar maartenmaarten libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-004.xml0000664000175000017500000000037014176701531022334 0ustar maartenmaarten libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-005.xml0000664000175000017500000000062314176701531022336 0ustar maartenmaarten libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-006.xml0000664000175000017500000000021614176701531022335 0ustar maartenmaarten libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-007.xml0000664000175000017500000000023114176701531022333 0ustar maartenmaarten libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-008.xml0000664000175000017500000000020414176701531022334 0ustar maartenmaarten libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-009.xml0000664000175000017500000000012314176701531022335 0ustar maartenmaarten libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-010.xml0000664000175000017500000000011714176701531022330 0ustar maartenmaarten libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-011.xml0000664000175000017500000000016514176701531022334 0ustar maartenmaarten aap libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-012.xml0000664000175000017500000000040114176701531022326 0ustar maartenmaarten 10 libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-013.xml0000664000175000017500000543452514176701531022356 0ustar maartenmaarten Wikipedia:Archief/Wikipedia:Upload logboek 3295 15202670 2009-01-09T15:32:46Z NL-Romaine 156657 Sjabs oningevoegd met [[Wikipedia:AutoWikiBrowser|AWB]] {{beheerpagina's}} {|align=center class=toccolours | [[Afbeelding:Pictogram voting delete.svg|30px]] |''Dit is een [[wikipedia:Archief| archiefpagina]]'' ''Gelieve onderstaande teksten'' <u>'''''NIET'''''</u> ''te wijzigen of er commentaar op te geven.'' <br> <hr>Archivering gedaan door ''[[Gebruiker:Erwin|Erwin]]'' op 24 aug 2008 13:47 (CEST) na datering. |}[[Categorie:Wikipedia:Gearchiveerd|Upload logboek]] <ul><li>22 dec 2004 23:00 [[Gebruiker:Deamon|Deamon]] heeft ge-upload: "[[:Afbeelding:Holland_Empire.JPG|Holland_Empire.JPG]]" <em>(Ik heb de jpg-afbeelding zoals die zch bevindt in de volgende link gecorrigeerd zodat hij een beter beeld geeft van het nederlandse handelsimperium: http&#58;//nl.wikipedia.org/wiki/Afbeelding:Holland_Empire.JPG)</em></li> <li>22 dec 2004 22:48 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:5ec_monaco.jpg|5ec_monaco.jpg]]" <em>(Afbeeldingen van euromunten zijn niet wettelijk beschermt.)</em></li> <li>22 dec 2004 22:48 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:50ec_monaco.jpg|50ec_monaco.jpg]]" <em>(Afbeeldingen van euromunten zijn niet wettelijk beschermt.)</em></li> <li>22 dec 2004 22:48 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:2ec_monaco.jpg|2ec_monaco.jpg]]" <em>(Afbeeldingen van euromunten zijn niet wettelijk beschermt.)</em></li> <li>22 dec 2004 22:48 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:2e_monaco.jpg|2e_monaco.jpg]]" <em>(Afbeeldingen van euromunten zijn niet wettelijk beschermt.)</em></li> <li>22 dec 2004 22:48 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:20ec_monaco.jpg|20ec_monaco.jpg]]" <em>(Afbeeldingen van euromunten zijn niet wettelijk beschermt.)</em></li> <li>22 dec 2004 22:47 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:1ec_monaco.jpg|1ec_monaco.jpg]]" <em>(Afbeeldingen van euromunten zijn niet wettelijk beschermt.)</em></li> <li>22 dec 2004 22:47 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:1e_monaco.jpg|1e_monaco.jpg]]" <em>(Afbeeldingen van euromunten zijn niet wettelijk beschermt.)</em></li> <li>22 dec 2004 22:47 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:10ec_monaco.jpg|10ec_monaco.jpg]]" <em>(Afbeeldingen van euromunten zijn niet wettelijk beschermt.)</em></li> <li>22 dec 2004 22:34 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:Finnish_2_euro_commemorative_2004.png|Finnish_2_euro_commemorative_2004.png]]" <em>(These images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.)</em></li> <li>22 dec 2004 22:32 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:5ec_fin.png|5ec_fin.png]]" <em>( ThThese TThese iThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.mages originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.hese images originally came frThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.om the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.iThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.mages originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.esThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.e These images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB. )</em></li> <li>22 dec 2004 22:31 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:50ec_fin.png|50ec_fin.png]]" <em>( ThThese TThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.hese images originally came frThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.om the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.iThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.mages originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.esThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.e These images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB. )</em></li> <li>22 dec 2004 22:31 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:2ec_fin.png|2ec_fin.png]]" <em>( ThThese These images originally came frThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.om the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.iThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.mages originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.esThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.e These images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB. )</em></li> <li>22 dec 2004 22:31 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:2e_fin.png|2e_fin.png]]" <em>( ThThese These images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.iThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.mages originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.esThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.e These images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB. )</em></li> <li>22 dec 2004 22:31 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:20ec_fin.png|20ec_fin.png]]" <em>( ThThese iThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.mages originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.esThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.e These images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB. )</em></li> <li>22 dec 2004 22:31 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:1ec_fin.png|1ec_fin.png]]" <em>( ThThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.esThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.e These images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB. )</em></li> <li>22 dec 2004 22:30 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:1e_fin.png|1e_fin.png]]" <em>( ThesThese images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.e These images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB.originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB. )</em></li> <li>22 dec 2004 22:29 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:10ec_fin.png|10ec_fin.png]]" <em>( These images originally came from the European Central Bank&#39;s own site &#91;http&#58;//www.euro.ecb.int/en/more/communication.html here]. The only modification made to them was converting the original .&#91;&#91;GIF]] files to .&#91;&#91;PNG]]. Used without express permission, but no apparent restrictions applicable here were found at the ECB&#39;s site. However, any potential copyright on the designs depicted on the notes and coins probably belongs to the ECB. )</em></li> <li>22 dec 2004 22:23 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Poesjkin_Catharinapaleis_Barnsteenzaal.jpg|Poesjkin_Catharinapaleis_Barnsteenzaal.jpg]]" <em>(Catharinapaleis te Poesjkin (Barnsteenzaal). Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], augustus 2002)</em></li> <li>22 dec 2004 22:20 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Rero49.gif|Rero49.gif]]" <em>(Vlag van de Romeinse Republiek 1849 - van Spaanse wiki)</em></li> <li>22 dec 2004 21:47 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:5ec_por.png|5ec_por.png]]" <em>(5centportugal)</em></li> <li>22 dec 2004 21:47 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:50ec_por.png|50ec_por.png]]" <em>(50centportugal)</em></li> <li>22 dec 2004 21:47 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:2ec_por.png|2ec_por.png]]" <em>(2centportugal)</em></li> <li>22 dec 2004 21:46 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:2e_por.png|2e_por.png]]" <em>(1centportugal)</em></li> <li>22 dec 2004 21:46 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:20ec_por.png|20ec_por.png]]" <em>(1centportugal)</em></li> <li>22 dec 2004 21:46 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:1ec_por.png|1ec_por.png]]" <em>(1centportugal)</em></li> <li>22 dec 2004 21:46 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:1e_por.png|1e_por.png]]" <em>(1centportugal)</em></li> <li>22 dec 2004 21:45 [[Gebruiker:Rub1615|Rub1615]] heeft ge-upload: "[[:Afbeelding:10ec_por.png|10ec_por.png]]" <em>(10centportugal)</em></li> <li>22 dec 2004 20:28 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:LokatieMaas.PNG|LokatieMaas.PNG]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>22 dec 2004 20:22 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:LokatieIJssel.PNG|LokatieIJssel.PNG]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>22 dec 2004 20:19 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_smartno_paki.png|Sl_gemeente_smartno_paki.png]]" <em>(gemaakt door gebruiker Plp sl:wiki; auteursrechtenvrij)</em></li> <li>22 dec 2004 20:14 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:LokatieHollandscheIJssel.PNG|LokatieHollandscheIJssel.PNG]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>22 dec 2004 20:12 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:LokatieLek.PNG|LokatieLek.PNG]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>22 dec 2004 20:08 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:LokatieAmsterdamRijnkanaal.PNG|LokatieAmsterdamRijnkanaal.PNG]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>22 dec 2004 20:06 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:LokatieWaal.PNG|LokatieWaal.PNG]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>22 dec 2004 19:56 [[Gebruiker:Lekkere Kwal|Lekkere Kwal]] heeft ge-upload: "[[:Afbeelding:Rijkswegenkaart.png|Rijkswegenkaart.png]]" <em>(Eerdere versie hersteld)</em></li> <li>22 dec 2004 19:55 [[Gebruiker:Lekkere Kwal|Lekkere Kwal]] heeft ge-upload: "[[:Afbeelding:Rijkswegenkaart.png|Rijkswegenkaart.png]]" <em>(Eerdere versie hersteld)</em></li> <li>22 dec 2004 19:06 [[Gebruiker:IJzeren Jan|IJzeren Jan]] heeft ge-upload: "[[:Afbeelding:Sealand_fortress.jpg|Sealand_fortress.jpg]]" <em>(Uit Engelse wikipedia. Met permissie van Sealand.)</em></li> <li>22 dec 2004 19:06 [[Gebruiker:IJzeren Jan|IJzeren Jan]] heeft ge-upload: "[[:Afbeelding:Sealand_vlag.gif|Sealand_vlag.gif]]" <em>(Uit Engelse wikipedia. Nationale vlag, dus publiek domein)</em></li> <li>22 dec 2004 18:37 [[Gebruiker:Jürgen|Jürgen]] heeft ge-upload: "[[:Afbeelding:Leefgebied_vliegende_hond.JPG|Leefgebied_vliegende_hond.JPG]]" <em>(Bewerking afbeelding: afbeelding_(kaart).JPG)</em></li> <li>22 dec 2004 18:15 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Vaarwegen.PNG|Vaarwegen.PNG]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>22 dec 2004 15:40 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Metro_Athene.png|Metro_Athene.png]]" <em>(Van Duitse wiki met aanpassingen; GNU/FDL)</em></li> <li>22 dec 2004 14:31 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Grad.jpg|Grad.jpg]]" <em>(publiek domein wegens ouderdom)</em></li> <li>22 dec 2004 13:24 [[Gebruiker:Jürgen|Jürgen]] heeft ge-upload: "[[:Afbeelding:Leefgebied_grizzlybeer.JPG|Leefgebied_grizzlybeer.JPG]]" <em>(Bewerking afbeelding: Afbeelding_(kaart).jpg)</em></li> <li>22 dec 2004 13:18 [[Gebruiker:Peter Hennekam|Peter Hennekam]] heeft ge-upload: "[[:Afbeelding:Di_Centurio_Vitis_Ammalon.jpg|Di_Centurio_Vitis_Ammalon.jpg]]" <em>(eigen bron)</em></li> <li>22 dec 2004 13:10 [[Gebruiker:Jürgen|Jürgen]] heeft ge-upload: "[[:Afbeelding:Leefgebied_koala.JPG|Leefgebied_koala.JPG]]" <em>(Bewerking afbeelding: afbeelding_(kaart).JPG)</em></li> <li>22 dec 2004 12:59 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Formos.jpg|Formos.jpg]]" <em>(&#123;&#123;eigenwerk}} voor C&amp;T)</em></li> <li>22 dec 2004 12:58 [[Gebruiker:Jürgen|Jürgen]] heeft ge-upload: "[[:Afbeelding:Leefgebied_otter.JPG|Leefgebied_otter.JPG]]" <em>(Bewerking afbeelding: afbeelding_(kaart).JPG)</em></li> <li>22 dec 2004 12:20 [[Gebruiker:Peter Hennekam|Peter Hennekam]] heeft ge-upload: "[[:Afbeelding:Ozzy.jpg|Ozzy.jpg]]"</li> <li>22 dec 2004 12:06 [[Gebruiker:Peter Hennekam|Peter Hennekam]] heeft ge-upload: "[[:Afbeelding:Radames.jpg|Radames.jpg]]"</li> <li>22 dec 2004 11:29 [[Gebruiker:Jürgen|Jürgen]] heeft ge-upload: "[[:Afbeelding:Leefgebied_luipaard.JPG|Leefgebied_luipaard.JPG]]" <em>(Bewerking afbeelding: afbeelding_(kaart).JPG)</em></li> <li>22 dec 2004 10:25 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:KasteelBeauvoorde.jpg|KasteelBeauvoorde.jpg]]" <em>(Kasteel Beauvoorde)</em></li> <li>22 dec 2004 09:44 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Novo_mesto_Breg_2.JPG|Novo_mesto_Breg_2.JPG]]" <em>(gemaakt door sl:Uporabnik:Andrejj en GFDL)</em></li> <li>22 dec 2004 09:43 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_novo_mesto.png|Sl_gemeente_novo_mesto.png]]" <em>(gemaakt door Plp sl:wiki; auteursrechtenvrij)</em></li> <li>22 dec 2004 07:28 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Locatie_Nieuw-Amsterdam_in_Drenthe.png|Locatie_Nieuw-Amsterdam_in_Drenthe.png]]" <em>(De locatie van &#91;&#91;Nieuw-Amsterdam (Drenthe)&#124;Nieuw-Amsterdam]] in de gemeente Emmen. Kaart vervaardigd door &#91;&#91;Gebruiker:Roepers&#124;Marco Roepers]] op basis van &#91;&#91;:Afbeelding:LocatieEmmen.png ]] van &#91;&#91;Gebruiker:Mtcv]]. &#123;&#123;PD}})</em></li> <li>22 dec 2004 04:38 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Berdjajev.jpg|Berdjajev.jpg]]" <em>(publiek domein)</em></li> <li>22 dec 2004 00:38 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_ribnica.png|Sl_gemeente_ribnica.png]]" <em>(gemaakt door Plp sl.wikipedia; auteursrechtenvrij)</em></li> <li>21 dec 2004 22:04 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Metro_Athene.png|Metro_Athene.png]]" <em>(Van Duitse wiki; GNU/FDL)</em></li> <li>21 dec 2004 21:01 [[Gebruiker:GWirken|GWirken]] heeft ge-upload: "[[:Afbeelding:Gevangengenomen_Vietcongstrijder.jpg|Gevangengenomen_Vietcongstrijder.jpg]]" <em>(Foto van een gevangengenomen &#91;&#91;Vietcong]]strijder. Bron &#91;http&#58;//teachpol.tcnj.edu/amer_pol_hist/thumbnail471.html] {PD})</em></li> <li>21 dec 2004 20:56 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Metrokaart_Amsterdam.png|Metrokaart_Amsterdam.png]]" <em>(update (veel te laat...))</em></li> <li>21 dec 2004 20:55 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:Talk.jpg|Talk.jpg]]" <em>(Overgenomen uit engelse Wikipedia, Public Domain omdat het door de US Government uitgegeven is)</em></li> <li>21 dec 2004 20:45 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Lift_down.jpg|Lift_down.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>21 dec 2004 20:17 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:Haastrecht.JPG|Haastrecht.JPG]]" <em>(Op grond van de oudheid van de prentkaart is er geen copyright meer)</em></li> <li>21 dec 2004 20:08 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Metro_Athene.png|Metro_Athene.png]]" <em>(Van Duitse wiki; GNU/FDL)</em></li> <li>21 dec 2004 14:47 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:DSC00013nieuw.JPG|DSC00013nieuw.JPG]]" <em>(Ronald Blom - eigen afbeelding (2-12-2004))</em></li> <li>21 dec 2004 14:09 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:DSC00001nieuw.JPG|DSC00001nieuw.JPG]]" <em>(Ronald Blom - eigen afbeelding (2-12-2004))</em></li> <li>21 dec 2004 13:38 [[Gebruiker:Kjoe|Kjoe]] heeft ge-upload: "[[:Afbeelding:Schema_kwel2.png|Schema_kwel2.png]]" <em>(Schema ontstaan kwel; publicatie en verspreiding is toegestaan mits voorzien van copyright notice. )</em></li> <li>21 dec 2004 12:42 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Nederlhandelspost.png|Nederlhandelspost.png]]" <em>(nederlandse handelsposten tijdens gouden eeuw (aanpassing kaartje commons))</em></li> <li>21 dec 2004 12:38 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Kolonies_nederland.png|Kolonies_nederland.png]]" <em>(verbetering kaartje nederlandse handelsposten gouden eeuw (zelf gemaakt met kaartje wikicommons))</em></li> <li>21 dec 2004 12:36 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Kolonies_nederland.png|Kolonies_nederland.png]]" <em>(verbetering kaartje nederlandse handelsposten gouden eeuw (zelf gemaakt met kaartje wikicommons))</em></li> <li>21 dec 2004 11:09 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:CecilRhodes.jpg|CecilRhodes.jpg]]" <em>(cecil rhodes (engelse wikipedia))</em></li> <li>21 dec 2004 10:41 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Ajaxvlag.jpg|Ajaxvlag.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>21 dec 2004 08:46 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Franse_TGV.jpg|Franse_TGV.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>21 dec 2004 00:18 [[Gebruiker:Peter bankers|Peter bankers]] heeft ge-upload: "[[:Afbeelding:LibelleX.jpg|LibelleX.jpg]]" <em>(GNU Free Documentation License )</em></li> <li>20 dec 2004 23:49 [[Gebruiker:Peter bankers|Peter bankers]] heeft ge-upload: "[[:Afbeelding:Doren-1641-Otto-de-Visscher.jpg|Doren-1641-Otto-de-Visscher.jpg]]" <em>(GNU Free Documentation License)</em></li> <li>20 dec 2004 23:06 [[Gebruiker:Nijdam|Nijdam]] heeft ge-upload: "[[:Afbeelding:350px-Bewijs_omtrekshoek.gif|350px-Bewijs_omtrekshoek.gif]]" <em>(bewijs omtrekshoek//aanpassing bestaande figuur)</em></li> <li>20 dec 2004 22:56 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:Hamar_kaart.png|Hamar_kaart.png]]" <em>(overgenomen uit noorse Wikipedia)</em></li> <li>20 dec 2004 22:20 [[Gebruiker:Basvbeek|Basvbeek]] heeft ge-upload: "[[:Afbeelding:Witness.jpg|Witness.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>20 dec 2004 22:18 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Zeeleguaan_hagedis_reptiel_bew.JPG|Zeeleguaan_hagedis_reptiel_bew.JPG]]" <em>(Bewerkte (gesneden) foto van www.gimp.com: publiek domein.)</em></li> <li>20 dec 2004 22:16 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:GipsAustralie.jpg|GipsAustralie.jpg]]" <em>(uit de engelse Wikipedia: het is vrijgegeven onder de GNU Free Documentation License. Tekst, Photograph of gypsum specimen from New South Wales, Australia taken by Dlloyd. Intergrown, orange-brown coloured gypsum crystals, which measure up to 13 cm (5&quot;) i)</em></li> <li>20 dec 2004 22:16 [[Gebruiker:Basvbeek|Basvbeek]] heeft ge-upload: "[[:Afbeelding:Witness.jpg|Witness.jpg]]" <em>(basvbeek )</em></li> <li>20 dec 2004 22:13 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:Gips_Australie.jpg|Gips_Australie.jpg]]"</li> <li>20 dec 2004 22:03 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:Gips_Australie.jpg|Gips_Australie.jpg]]" <em>(uit de engelse Wikipedia: het is vrijgegeven onder de GNU Free Documentation License. Tekst, Photograph of gypsum specimen from New South Wales, Australia taken by Dlloyd. Intergrown, orange-brown coloured gypsum crystals, which measure up to 13 cm (5&quot;) in length)</em></li> <li>20 dec 2004 20:52 [[Gebruiker:Basvbeek|Basvbeek]] heeft ge-upload: "[[:Afbeelding:Witness.jpg|Witness.jpg]]"</li> <li>20 dec 2004 19:55 [[Gebruiker:Hjvannes|Hjvannes]] heeft ge-upload: "[[:Afbeelding:Stambolic.jpg|Stambolic.jpg]]" <em>(afkomstig van www.lifeinlegacy.com, alwaar wordt vermeld: &quot;All pictures added to the site are public domain to the best of my knowledge&quot;.)</em></li> <li>20 dec 2004 19:49 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:KuifjeStoel.jpg|KuifjeStoel.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>20 dec 2004 19:46 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Kaart_NOLS_met_route.jpg|Kaart_NOLS_met_route.jpg]]" <em>(Kaart van de lijnen van de NOLS, onderdeel van zelf gemaakte foto van oude poster door de NOLS zelf uitgegeven en door een vriend van uploader ingescand en bewerkt voor Wikipedia. PD door ouderdom)</em></li> <li>20 dec 2004 19:35 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:KaartNOLS72dpiMetRoute.jpg|KaartNOLS72dpiMetRoute.jpg]]" <em>(Kaart van de lijnen van de &#91;&#91;Noordoosterlocaalspoorweg-Maatschappij&#124;NOLS]], onderdeel van zelf gemaakte foto van oude poster door de NOLS zelf uitgegeven en door een vriend van uploader ingescand en bewerkt voor Wikipedia. PD door ouderdom &#123;&#123;PD}})</em></li> <li>20 dec 2004 19:19 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Tambov_oblast_wapen.gif|Tambov_oblast_wapen.gif]]" <em>(estse wiki: geraldika.ru)</em></li> <li>20 dec 2004 18:40 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Intercityrijtuig.jpg|Intercityrijtuig.jpg]]" <em>(Intercityrijtuig station Utrecht Centraal. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], december 2004.)</em></li> <li>20 dec 2004 18:22 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Intercityrijtuig.jpg|Intercityrijtuig.jpg]]" <em>(Intercityrijtuig station Utrecht Centraal. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], december 2004.)</em></li> <li>20 dec 2004 18:12 [[Gebruiker:Hjvannes|Hjvannes]] heeft ge-upload: "[[:Afbeelding:Stambolic.jpg|Stambolic.jpg]]" <em>(afkomstig van www.lifeinlegacy.com, alwaar wordt vermeld: &quot;All pictures added to the site are public domain to the best of my knowledge&quot;. )</em></li> <li>20 dec 2004 17:21 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Verlauf_der_A31.png|Verlauf_der_A31.png]]"</li> <li>20 dec 2004 17:06 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Routebordje_LF8a.jpg|Routebordje_LF8a.jpg]]" <em>(Routebordje LF 8a onder fietspadbord , eigen foto. &#123;&#123;GFDL}})</em></li> <li>20 dec 2004 14:03 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:OngevallenNL.jpg|OngevallenNL.jpg]]" <em>(bron CBS)</em></li> <li>20 dec 2004 13:33 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Wegverkeer.jpg|Wegverkeer.jpg]]" <em>(&#123;&#123;eigenwerk} bron:CBS)</em></li> <li>20 dec 2004 13:28 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:VlagRoRe.gif|VlagRoRe.gif]]" <em>(Vlag van de Romeinse Republiek (1798-1799) - van Spaanse wiki &#123;&#123;PD}})</em></li> <li>20 dec 2004 13:23 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:RoRe.jpg|RoRe.jpg]]" <em>(Romeinse Republiek (1798-1799) - vrij te gebruiken voor educatieve doeleinden - http&#58;//www.lib.utexas.edu/usage_statement.html)</em></li> <li>20 dec 2004 13:13 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:RandCurrencyR5coins.jpg|RandCurrencyR5coins.jpg]]" <em>(briefjes rand (engelse wikipedia))</em></li> <li>20 dec 2004 13:12 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Randcurrency.jpg|Randcurrency.jpg]]" <em>(rand muntjes (engelse wikipedia))</em></li> <li>20 dec 2004 12:54 [[Gebruiker:Johan Lont|Johan Lont]] heeft ge-upload: "[[:Afbeelding:NederlandseWerkloosheid.jpg|NederlandseWerkloosheid.jpg]]" <em>(Zelfgemaakte grafiek van werkloosheid in Nederland - gebaseerd op cijfers van het CBS. Ik geef het vrij voor het publieke domein)</em></li> <li>20 dec 2004 12:43 [[Gebruiker:Poppentje|Poppentje]] heeft ge-upload: "[[:Afbeelding:D100.JPG|D100.JPG]]" <em>(uit eigen verzameling)</em></li> <li>20 dec 2004 12:32 [[Gebruiker:Poppentje|Poppentje]] heeft ge-upload: "[[:Afbeelding:D3wiki.JPG|D3wiki.JPG]]" <em>(zelf gemaakt)</em></li> <li>20 dec 2004 11:52 [[Gebruiker:Poppentje|Poppentje]] heeft ge-upload: "[[:Afbeelding:85ds3.JPG|85ds3.JPG]]" <em>(zelf gemakt)</em></li> <li>20 dec 2004 11:48 [[Gebruiker:Poppentje|Poppentje]] heeft ge-upload: "[[:Afbeelding:Naamloos.JPG|Naamloos.JPG]]" <em>(zelf gemaakt)</em></li> <li>20 dec 2004 10:25 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Voortrekker_Flag.png|Voortrekker_Flag.png]]" <em>(vlag voortrekkers (engelse wikipedia))</em></li> <li>20 dec 2004 10:24 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Voortrekker_monument.jpg|Voortrekker_monument.jpg]]" <em>(monument voortrekkers (wikipedia))</em></li> <li>20 dec 2004 09:10 [[Gebruiker:Kjoe|Kjoe]] heeft ge-upload: "[[:Afbeelding:Schema_kwel.png|Schema_kwel.png]]" <em>(schema ontstaan kwel; zelf gemaakt in opdracht van provincie Noord Brabant. )</em></li> <li>19 dec 2004 23:38 [[Gebruiker:Bs|Bs]] heeft ge-upload: "[[:Afbeelding:Gedempt_kanaal.jpeg|Gedempt_kanaal.jpeg]]" <em>(Gedempt kanaal)</em></li> <li>19 dec 2004 23:35 [[Gebruiker:Bs|Bs]] heeft ge-upload: "[[:Afbeelding:Gedempt_kanaal.jpeg|Gedempt_kanaal.jpeg]]" <em>(zelf gemaakt)</em></li> <li>19 dec 2004 23:03 [[Gebruiker:Bs|Bs]] heeft ge-upload: "[[:Afbeelding:Gedempt_kanaal.jpg|Gedempt_kanaal.jpg]]" <em>(zelf gemaakt)</em></li> <li>19 dec 2004 22:37 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Willem_Albert_Scholten.jpg|Willem_Albert_Scholten.jpg]]" <em>(Zelf gemaakte foto van schilderij van Willem Albert Scholten in het Veenkoloniaal museum. Publiek Domein wegens leeftijd &#123;&#123;PD}}.)</em></li> <li>19 dec 2004 22:03 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Standbeeld_van_Anthony_Winkler_Prins.jpg|Standbeeld_van_Anthony_Winkler_Prins.jpg]]" <em>(Zelfgemaakte foto van standbeeld van &#91;&#91;Anthony Winkler Prins]] voor het &#91;&#91;Veenkoloniaal Museum]] te &#91;&#91;Veendam]] &#123;&#123;PD}})</em></li> <li>19 dec 2004 21:36 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:Sauna.jpg|Sauna.jpg]]" <em>(Overgenomen uit duitse Wikipedia, volgende tekst: * Beschreibung: Sauna, Quelle: aufgenommen April 2004, Fotograf : Bleiglass, Lizenzstatus: GNU FDL)</em></li> <li>19 dec 2004 21:10 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:HelvetischeR.jpg|HelvetischeR.jpg]]" <em>(Helvetische Republiek - vrij te gebruiken voor educatieve doeleinden - http&#58;//www.lib.utexas.edu/usage_statement.html)</em></li> <li>19 dec 2004 20:34 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:KaartNOLS72dpiMetRoute.png|KaartNOLS72dpiMetRoute.png]]" <em>(Kaart van de lijnen van de NOLS, onderdeel van zelf gemaakte foto van oude poster door de NOLS zelf uitgegeven en door een vriend van uploader ingescand en bewerkt voor Wikipedia. PD door ouderdom &#123;&#123;PD}})</em></li> <li>19 dec 2004 20:34 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Ligurische.jpg|Ligurische.jpg]]" <em>(Ligurische Republiek in 1803 - vrij te gebruiken voor educatieve doeleinden - http&#58;//www.lib.utexas.edu/usage_statement.html)</em></li> <li>19 dec 2004 19:40 [[Gebruiker:MarcoVD|MarcoVD]] heeft ge-upload: "[[:Afbeelding:Lyndon_B._Johnson.jpg|Lyndon_B._Johnson.jpg]]" <em>(van &#91;http&#58;//teachpol.tcnj.edu/] copyright notice: &quot;All images are believed to be in the public domain&quot;)</em></li> <li>19 dec 2004 19:37 [[Gebruiker:MarcoVD|MarcoVD]] heeft ge-upload: "[[:Afbeelding:Bloemenprotest_Vietnamoorlog.jpg|Bloemenprotest_Vietnamoorlog.jpg]]" <em>(van &#91;http&#58;//teachpol.tcnj.edu/] copyright notice: &quot;All images are believed to be in the public domain&quot;)</em></li> <li>19 dec 2004 19:34 [[Gebruiker:MarcoVD|MarcoVD]] heeft ge-upload: "[[:Afbeelding:Bombardement_op_Vietnam.jpg|Bombardement_op_Vietnam.jpg]]" <em>(van &#91;http&#58;//teachpol.tcnj.edu/] copyright notice: &quot;All images are believed to be in the public domain&quot;)</em></li> <li>19 dec 2004 19:22 [[Gebruiker:MarcoVD|MarcoVD]] heeft ge-upload: "[[:Afbeelding:Inauguratie_van_Andrew_Jackson.jpg|Inauguratie_van_Andrew_Jackson.jpg]]" <em>(van &#91;http&#58;//teachpol.tcnj.edu/] copyright notice: &quot;All images are believed to be in the public domain&quot;)</em></li> <li>19 dec 2004 19:11 [[Gebruiker:MarcoVD|MarcoVD]] heeft ge-upload: "[[:Afbeelding:Thomas_Paine.jpg|Thomas_Paine.jpg]]" <em>(van &#91;http&#58;//teachpol.tcnj.edu/] copyright notice: &quot;All images are believed to be in the public domain&quot;)</em></li> <li>19 dec 2004 19:05 [[Gebruiker:MarcoVD|MarcoVD]] heeft ge-upload: "[[:Afbeelding:Declaration_of_Independence.jpg|Declaration_of_Independence.jpg]]" <em>(van &#91;http&#58;//teachpol.tcnj.edu/] copyright notice: &quot;All images are believed to be in the public domain&quot;)</em></li> <li>19 dec 2004 19:03 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:RW31Locatie.png|RW31Locatie.png]]" <em>(Locatie RW31, eigen werk, &#123;&#123;PD}})</em></li> <li>19 dec 2004 18:53 [[Gebruiker:MarcoVD|MarcoVD]] heeft ge-upload: "[[:Afbeelding:Verkoopakte_Manhattan.jpg|Verkoopakte_Manhattan.jpg]]" <em>(van &#91;http&#58;//teachpol.tcnj.edu/] copyright notice: &quot;All images are believed to be in the public domain&quot;)</em></li> <li>19 dec 2004 17:35 [[Gebruiker:Yonthe|Yonthe]] heeft ge-upload: "[[:Afbeelding:Kit_socks.png|Kit_socks.png]]"</li> <li>19 dec 2004 17:34 [[Gebruiker:Yonthe|Yonthe]] heeft ge-upload: "[[:Afbeelding:Kit_shorts.png|Kit_shorts.png]]"</li> <li>19 dec 2004 17:34 [[Gebruiker:Yonthe|Yonthe]] heeft ge-upload: "[[:Afbeelding:Kit_right_arm.png|Kit_right_arm.png]]"</li> <li>19 dec 2004 17:34 [[Gebruiker:Yonthe|Yonthe]] heeft ge-upload: "[[:Afbeelding:Kit_left_arm.png|Kit_left_arm.png]]"</li> <li>19 dec 2004 17:34 [[Gebruiker:Yonthe|Yonthe]] heeft ge-upload: "[[:Afbeelding:Kit_body.png|Kit_body.png]]"</li> <li>19 dec 2004 16:13 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Kamtsjatka_oblast_wapen.gif|Kamtsjatka_oblast_wapen.gif]]" <em>(geraldika.ru)</em></li> <li>19 dec 2004 16:11 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Kamtsjatka_oblast_vlag.gif|Kamtsjatka_oblast_vlag.gif]]" <em>(geraldika.ru Overschrijving oude onofficiele vlag)</em></li> <li>19 dec 2004 11:54 [[Gebruiker:Yonthe|Yonthe]] heeft ge-upload: "[[:Afbeelding:Parkstadlimburg-stadion.jpg|Parkstadlimburg-stadion.jpg]]"</li> <li>19 dec 2004 11:21 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:HolonLogo.PNG|HolonLogo.PNG]]" <em>(embleem uit he.wikipedia.org)</em></li> <li>19 dec 2004 11:15 [[Gebruiker:Hasekamp|Hasekamp]] heeft ge-upload: "[[:Afbeelding:Aerator.jpg|Aerator.jpg]]" <em>(zelf gemaakt)</em></li> <li>19 dec 2004 10:57 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Toela_oblast_wapen.gif|Toela_oblast_wapen.gif]]" <em>(estse wiki: geraldika.ru)</em></li> <li>19 dec 2004 10:37 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Gay-flag-8.png|Gay-flag-8.png]]" <em>(regenboogvlag met 8 strepen)</em></li> <li>19 dec 2004 10:37 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Gay-flag-7.png|Gay-flag-7.png]]" <em>(regenboogvlag met 7 strepen)</em></li> <li>19 dec 2004 10:36 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Gay-flag-6.png|Gay-flag-6.png]]" <em>(regenboogvlag met 6 strepen)</em></li> <li>19 dec 2004 10:05 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:ServieMontenegroVlag.png|ServieMontenegroVlag.png]]" <em>(huidige vlag servië en montenegro (met goede afmetingen deze keer))</em></li> <li>19 dec 2004 10:04 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Scgflag.png|Scgflag.png]]" <em>(toekomstige vlag servië en montenegro (engelse wikipedia))</em></li> <li>19 dec 2004 09:43 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Lithuania_flag_large.png|Lithuania_flag_large.png]]" <em>(grote vlag litouwen (juiste afmetingen))</em></li> <li>19 dec 2004 09:25 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Moldova_flag_large.png|Moldova_flag_large.png]]" <em>(grote vlag moldavië (betere kwaliteit dan kleinere, van engelse wikipedia))</em></li> <li>19 dec 2004 09:09 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Saint_Patrick_saltire.png|Saint_Patrick_saltire.png]]" <em>(sint-patrick kruis (engelse wikipedia))</em></li> <li>19 dec 2004 07:14 [[Gebruiker:Zozie|Zozie]] heeft ge-upload: "[[:Afbeelding:LocatieTerApel.png|LocatieTerApel.png]]" <em>(Afgeleid van LocatieVlagtwedde.png)</em></li> <li>19 dec 2004 01:37 [[Gebruiker:Domie|Domie]] heeft ge-upload: "[[:Afbeelding:Wienneerlandsbloed.ogg|Wienneerlandsbloed.ogg]]" <em>(Melodie van Wien Neerlands Bloed; zelfgemaakt; copyright op muziek is reeds lang verlopen)</em></li> <li>19 dec 2004 00:10 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Kamtsjatka_oblast_vlag.gif|Kamtsjatka_oblast_vlag.gif]]" <em>(van &#91;http&#58;//flagspot.net/flags/ru-kam.html])</em></li> <li>18 dec 2004 23:04 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Standbeeld_Rimski-Korsakov.jpg|Standbeeld_Rimski-Korsakov.jpg]]" <em>(standbeeld Rimski-Korsakov in Sint-Petersburg. Eigen foto &#91;&#91;Gebruiker:Markv&#124; Mark Voorendt]], augustus 2002.)</em></li> <li>18 dec 2004 23:03 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Tomsk_oblast_vlag.GIF|Tomsk_oblast_vlag.GIF]]" <em>(estse wiki: geraldika.ru)</em></li> <li>18 dec 2004 23:03 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Tomsk_oblast_wapen.GIF|Tomsk_oblast_wapen.GIF]]" <em>(estse wiki: geraldika.ru)</em></li> <li>18 dec 2004 22:18 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Eusebiuskerk_Arnhem_Fruggo2004dec.jpg|Eusebiuskerk_Arnhem_Fruggo2004dec.jpg]]" <em>(Foto door Fruggo, december 2004. Zijaanzicht Eusebiuskerk Arnhem. Licentie CC-BY.)</em></li> <li>18 dec 2004 22:06 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Paddestoel_Donkerbroek_okt04.JPG|Paddestoel_Donkerbroek_okt04.JPG]]" <em>(Paddestoel in bos bij Donkerbroek (Friesland). Oktober 2004. Foto door Fruggo. Licentie CC-BY.)</em></li> <li>18 dec 2004 22:01 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Paddestoelen_Donkerbroek_31okt04.jpg|Paddestoelen_Donkerbroek_31okt04.jpg]]" <em>(Paddestoelen in bos bij Donkerbroek (Friesland). Oktober 2004. Foto gemaakt door [[Gebruiker:Tbc|Tbc]]. Licentie CC-BY.)</em></li> <li>18 dec 2004 21:22 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocWinsum.png|LocWinsum.png]]" <em>(Kaart met de locatie van Winsum, gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>18 dec 2004 21:15 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Metselaar.gif|Metselaar.gif]]" <em>(&#91;&#91;Metselaar]], afbeelding uit &#91;&#91;Jan Luyken]]: Afbeelding der menschelyke bezigheden, eind zeventiende eeuw dus vrij van auteursrechten. Geupload door &#91;&#91;Gebruiker:Xaphire&#124;Xaphire]].)</em></li> <li>18 dec 2004 21:09 [[Gebruiker:Quistnix|Quistnix]] heeft ge-upload: "[[:Afbeelding:Goteburg_aangepast.JPG|Goteburg_aangepast.JPG]]" <em>(Goteborg, foto van &#91;&#91;Gebruiker:Michiel1972]], bewerkt &#123;&#123;GFDL}})</em></li> <li>18 dec 2004 20:43 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieWarstiens.png|LocatieWarstiens.png]]" <em>(Kaart met de locatie van Warstiens, gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>18 dec 2004 20:42 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Tsjita_oblast_wapen.GIF|Tsjita_oblast_wapen.GIF]]" <em>(estse wiki: geraldika.ru)</em></li> <li>18 dec 2004 20:42 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Tsjita_oblast_vlag.GIF|Tsjita_oblast_vlag.GIF]]" <em>(estse wiki: geraldika.ru)</em></li> <li>18 dec 2004 20:22 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:SaksH.jpg|SaksH.jpg]]" <em>(Ernestijnse hertogdommen in 1786 - vrij te gebruiken voor educatieve doeleinden - http&#58;//www.lib.utexas.edu/usage_statement.html)</em></li> <li>18 dec 2004 20:18 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieFriens.png|LocatieFriens.png]]" <em>(Kaart met de locatie van Friens, gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>18 dec 2004 20:11 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Tver_oblast_wapen.gif|Tver_oblast_wapen.gif]]" <em>(estse wiki: geraldika.ru)</em></li> <li>18 dec 2004 20:10 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Tver_oblast_vlag.gif|Tver_oblast_vlag.gif]]" <em>(estse wiki: geraldika.ru)</em></li> <li>18 dec 2004 19:13 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Vlag_van_keizer.gif|Vlag_van_keizer.gif]]" <em>(:site: http&#58;//www.flaggenlexikon.de/index2-e.htm)</em></li> <li>18 dec 2004 19:12 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Citrus_maxima.jpg|Citrus_maxima.jpg]]" <em>(afbeelding afkomstig van de Duitstalige WIKIPEDIA)</em></li> <li>18 dec 2004 18:40 [[Gebruiker:Yonthe|Yonthe]] heeft ge-upload: "[[:Afbeelding:Logo_roda.jpg|Logo_roda.jpg]]"</li> <li>18 dec 2004 18:40 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:RuslandOrjol.png|RuslandOrjol.png]]" <em>(en wiki &#123;&#123;GDFL}})</em></li> <li>18 dec 2004 18:39 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Orjol_oblast_wapen.gif|Orjol_oblast_wapen.gif]]" <em>(estse wiki: geraldika.ru)</em></li> <li>18 dec 2004 18:38 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Orjol_oblast_vlag.gif|Orjol_oblast_vlag.gif]]" <em>(estse wiki: geraldika.ru)</em></li> <li>18 dec 2004 18:24 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Ernestijnse.png|Ernestijnse.png]]" <em>(Ernestijnse hertogdommen in 1910 - oorspronkelijk gemaakt door &#91;&#91;de:Benutzer:Störfix]], aangepast door &#91;&#91;Gebruiker:Känsterle]] GNU-DFL)</em></li> <li>18 dec 2004 18:10 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Vladimir_oblast_wapen.gif|Vladimir_oblast_wapen.gif]]" <em>(estse wiki: geraldika.ru)</em></li> <li>18 dec 2004 18:09 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Vladimir_oblast_vlag.gif|Vladimir_oblast_vlag.gif]]" <em>(estse wiki: geraldika.ru)</em></li> <li>18 dec 2004 17:33 [[Gebruiker:Hjvannes|Hjvannes]] heeft ge-upload: "[[:Afbeelding:Hangbuikzwijn.jpg|Hangbuikzwijn.jpg]]" <em>(Komt van Duitse wikipedia, en daar staat &quot;Dieses Bild wurde von seinem Urheber zur uneingeschränkten Nutzung freigegeben und ist damit gemeinfrei („public domain“).&quot;)</em></li> <li>18 dec 2004 16:41 [[Gebruiker:Frerinck|Frerinck]] heeft ge-upload: "[[:Afbeelding:Viola_d'amore.JPG|Viola_d'amore.JPG]]" <em>(Viola d&#39;amore )</em></li> <li>18 dec 2004 15:27 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:StephanieB.jpg|StephanieB.jpg]]" <em>(Stéphanie de Beauharnais &#123;&#123;PD}})</em></li> <li>18 dec 2004 13:59 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieHeidenskip.png|LocatieHeidenskip.png]]" <em>(Kaart met de locatie van It Heidenskip (Heidenschap), gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>18 dec 2004 13:03 [[Gebruiker:Yonthe|Yonthe]] heeft ge-upload: "[[:Afbeelding:Bernardinus_College.jpg|Bernardinus_College.jpg]]" <em>(foto uit 1926, bron: http&#58;//bernardinuscollege.nl/index2.htm)</em></li> <li>18 dec 2004 12:50 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Philippe3-1.jpg|Philippe3-1.jpg]]" <em>(filips III van Frankrijk (engelse wikipedia))</em></li> <li>18 dec 2004 12:36 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Acanthocystis_turfacea.jpg|Acanthocystis_turfacea.jpg]]" <em>(Afbeelding afkomstig van Duitstalige Wikipedia Eukaryoot: Acathocystis turfacea)</em></li> <li>18 dec 2004 12:20 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Nordmann-spar_naalden.jpg|Nordmann-spar_naalden.jpg]]" <em>(zedlfgemaakte foto van naalden van Nordmann-spar)</em></li> <li>18 dec 2004 12:14 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Kerstbal.jpg|Kerstbal.jpg]]" <em>(zelfgemaakte foto van kerstbal in kerstboom)</em></li> <li>18 dec 2004 12:00 [[Gebruiker:Yonthe|Yonthe]] heeft ge-upload: "[[:Afbeelding:367843.jpg|367843.jpg]]" <em>(http&#58;//beeldbank.nationaalarchief.nl Voor persoonlijk, niet-commercieel gebruik is het toegestaan prints te maken van de afbeeldingen in lage resolutie op deze site.)</em></li> <li>18 dec 2004 10:11 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Antarctica_Map.png|Antarctica_Map.png]]" <em>(Eerdere versie hersteld)</em></li> <li>18 dec 2004 10:10 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Antarctica_Map.png|Antarctica_Map.png]]" <em>(Eerdere versie hersteld)</em></li> <li>18 dec 2004 09:55 [[Gebruiker:Domie|Domie]] heeft ge-upload: "[[:Afbeelding:Charlesedwardstuart.jpg|Charlesedwardstuart.jpg]]" <em>(Van Engelse Wiki, Public Domain)</em></li> <li>18 dec 2004 09:39 [[Gebruiker:Zozie|Zozie]] heeft ge-upload: "[[:Afbeelding:Hilbert.JPG|Hilbert.JPG]]" <em>(Publiek domein.(zie &#91;&#91;en:David Hilbert]]))</em></li> <li>18 dec 2004 08:25 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kascu.jpg|Kascu.jpg]]" <em>(frits 8)</em></li> <li>18 dec 2004 08:25 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_hajdina.png|Sl_gemeente_hajdina.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>18 dec 2004 08:24 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_horjul.png|Sl_gemeente_horjul.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>18 dec 2004 08:24 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_grad.png|Sl_gemeente_grad.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>18 dec 2004 08:06 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_radenci.png|Sl_gemeente_radenci.png]]" <em>(gemaakt door Plp sl.wikipedia; auteursrechtenvrij)</em></li> <li>18 dec 2004 00:44 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Smolensk_oblast_vlag.GIF|Smolensk_oblast_vlag.GIF]]" <em>(estse wiki: geraldika.ru)</em></li> <li>18 dec 2004 00:44 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Smolensk_oblast_wapen.gif|Smolensk_oblast_wapen.gif]]" <em>(estse wiki geraldika.ru)</em></li> <li>17 dec 2004 23:50 [[Gebruiker:JePe|JePe]] heeft ge-upload: "[[:Afbeelding:Gefahrentafel_33_1203.png|Gefahrentafel_33_1203.png]]" <em>(Van Duitse Wikipedia &#39;&#39;Dieses Bild wurde von &#91;&#91;de:Benutzer:LosHawlos&#124;Martin Hawlisch]] erstellt und unter der &#91;&#91;GFDL]] veröffentlicht.&#39;&#39;)</em></li> <li>17 dec 2004 23:42 [[Gebruiker:JePe|JePe]] heeft ge-upload: "[[:Afbeelding:Gefahrenzettel_3.png|Gefahrenzettel_3.png]]" <em>(Van Duitse Wikipedia &#39;&#39;Dieses Bild wurde von &#91;&#91;de:Benutzer:LosHawlos&#124;Martin Hawlisch]] erstellt und unter der &#91;&#91;GFDL]] veröffentlicht.&#39;&#39;)</em></li> <li>17 dec 2004 23:25 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Wijkertunnel.jpeg|Wijkertunnel.jpeg]]" <em>(van www.beeldbankvenw.nl: Het auteursrecht van de foto&#39;s uit het beeldarchief blijft in handen van Rijkswaterstaat. Publicatie, mét bronvermelding, is echter vrij. )</em></li> <li>17 dec 2004 23:15 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Queen_Mary_2_02_KMJ.jpg|Queen_Mary_2_02_KMJ.jpg]]" <em>(van Duitse wiki, (foto: KMJ) (GNU-FDL, selbst fotografiert))</em></li> <li>17 dec 2004 23:09 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Kerstkaart.jpg|Kerstkaart.jpg]]" <em>(Kerstkaart voorbeeld. Een bewerkte foto van commons: Image:Snow_in_Holland_2.jpg, eigen foto van &#91;&#91;Gebruiker:Quistnix]] on GFDL. &#123;&#123;GFDL}})</em></li> <li>17 dec 2004 22:45 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Karte_Inzell_in_Deutschland.png|Karte_Inzell_in_Deutschland.png]]" <em>(afkomstig van Duitse wiki)</em></li> <li>17 dec 2004 20:54 [[Gebruiker:IJzeren Jan|IJzeren Jan]] heeft ge-upload: "[[:Afbeelding:Volodymyr_Lytvyn.jpg|Volodymyr_Lytvyn.jpg]]" <em>(Uit de Engelse wiki. GNU-FDL)</em></li> <li>17 dec 2004 20:39 [[Gebruiker:Walter|Walter]] heeft ge-upload: "[[:Afbeelding:Test_user_walter.png|Test_user_walter.png]]" <em>(upload voor test)</em></li> <li>17 dec 2004 19:46 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Rusland_eco_reg.jpg|Rusland_eco_reg.jpg]]" <em>(nummers 4 en 5 omgeruild)</em></li> <li>17 dec 2004 19:40 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Overlijdensakte.gif|Overlijdensakte.gif]]" <em>(&#91;&#91;Overlijdensakte]] uit 1868, uit de burgerlijke stand dus vrij van auteursrechten. Aangeleverd door &#91;&#91;Gebruiker:Xaphire&#124;Xaphire]].)</em></li> <li>17 dec 2004 17:03 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Sverdlovsk_oblast_wapen.gif|Sverdlovsk_oblast_wapen.gif]]" <em>(van &#91;http&#58;//flagspot.net/flags/ru-sve.html])</em></li> <li>17 dec 2004 16:54 [[Gebruiker:Jupiler|Jupiler]] heeft ge-upload: "[[:Afbeelding:Mariearena.jpg|Mariearena.jpg]]" <em>(Marie Arena; bron: cgsp-ministeres.be)</em></li> <li>17 dec 2004 16:54 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Sverdlovsk_oblast_vlag.gif|Sverdlovsk_oblast_vlag.gif]]" <em>(van &#91;http&#58;//flagspot.net/flags/ru-sve.html])</em></li> <li>17 dec 2004 14:47 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:RW32Locatie.png|RW32Locatie.png]]" <em>(Locatie RW32, eigen werk, &#123;&#123;PD}})</em></li> <li>17 dec 2004 13:13 [[Gebruiker:Robotje|Robotje]] heeft ge-upload: "[[:Afbeelding:Kobe_tower_night_shot.jpg|Kobe_tower_night_shot.jpg]]" <em>(Van Engelse WP (free of copyright) &#91;&#91;:en:imaga:Kobe_tower_night_shot.jpg]])</em></li> <li>17 dec 2004 13:11 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Root_selaginelle_dwarsdoorsnede.jpg|Root_selaginelle_dwarsdoorsnede.jpg]]" <em>(Afbeelding van Duitstalige wikipedia: Querschnitt durch eine Wurzel)</em></li> <li>17 dec 2004 13:09 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Melkweg.jpg|Melkweg.jpg]]" <em>(van engelse wiki)</em></li> <li>17 dec 2004 12:43 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Wortel_dwarsdoorsnede.jpg|Wortel_dwarsdoorsnede.jpg]]" <em>(zelfgemaakte foto van dwarsdoorsnede wortel Daucus carota &#39;Amsterdamse bak&#39;)</em></li> <li>17 dec 2004 11:45 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Loggerhead_Caretta_caretta_bewerkt.JPG|Loggerhead_Caretta_caretta_bewerkt.JPG]]" <em>(Bewerkte (gesneden) foto van http.images.fws.gov: Publiek domein)</em></li> <li>17 dec 2004 11:36 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Sterschildpad_Geochelone.jpg|Sterschildpad_Geochelone.jpg]]" <em>(Uit Gimp.com: Publiek domein)</em></li> <li>17 dec 2004 11:26 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Schildpad_Matamata.jpg|Schildpad_Matamata.jpg]]" <em>(Uit Diotse Wiki, zie http&#58;//de.wikipedia.org/wiki/Bild:Fransenschildkr%C3%B6te_Matamata.jpg)</em></li> <li>17 dec 2004 11:19 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Jackson_kameleon.jpg|Jackson_kameleon.jpg]]" <em>(Uit Duitse Wiki, zie http&#58;//de.wikipedia.org/wiki/Bild:Crw_1569.jpg)</em></li> <li>17 dec 2004 11:17 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Chamealeon_dilepis_petersi.jpg|Chamealeon_dilepis_petersi.jpg]]" <em>(Uit Duitse Wiki, zie http&#58;//de.wikipedia.org/wiki/Bild:Chamealeon_dilepis_petersi.jpg)</em></li> <li>17 dec 2004 11:14 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Vologda_oblast_wapen.GIF|Vologda_oblast_wapen.GIF]]" <em>(estse wiki: geraldika.ru)</em></li> <li>17 dec 2004 11:12 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Vologda_oblast_vlag.GIF|Vologda_oblast_vlag.GIF]]" <em>(estse wiki: geraldika.ru)</em></li> <li>17 dec 2004 11:09 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:C_Calyptratus_male.jpg|C_Calyptratus_male.jpg]]" <em>(Uit Wiki Engels, zie http&#58;//en.wikipedia.org/wiki/Image:C_Calyptratus_male.jpg)</em></li> <li>17 dec 2004 11:03 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Chameleo_parsonii.jpg|Chameleo_parsonii.jpg]]" <em>(GNU; uit Franse Wiki, zie http&#58;//fr.wikipedia.org/wiki/Image:Chameleo_parsonii.jpeg)</em></li> <li>17 dec 2004 10:03 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Weeuwenplanten.jpg|Weeuwenplanten.jpg]]" <em>(zelfgemaakte foto van weeuwenplanten bij bloemkool en spitskool; half december)</em></li> <li>17 dec 2004 07:44 [[Gebruiker:WB|WB]] heeft ge-upload: "[[:Afbeelding:Hillegersberg.gif|Hillegersberg.gif]]" <em>(toestemming voor gebruik van deze Engelstalige website: jeff.sedley.org/ archives/cat_family.html)</em></li> <li>17 dec 2004 06:43 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:Every_Namibian_Nujoma.jpg|Every_Namibian_Nujoma.jpg]]" <em>(President Sam Nujoma op een billboard met boodschap over aids)</em></li> <li>17 dec 2004 02:26 [[Gebruiker:Robotje|Robotje]] heeft ge-upload: "[[:Afbeelding:Schatzkammer_Wien_Collane_Orden_vom_Goldenen_Vlies.jpg|Schatzkammer_Wien_Collane_Orden_vom_Goldenen_Vlies.jpg]]" <em>(Van Duitse WP - GFDL - &#91;&#91;:de:Bild:Schatzkammer_Wien_Collane_Orden_vom_Goldenen_Vlies.jpg]])</em></li> <li>17 dec 2004 01:58 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Westerscheldetunnel-2.jpg|Westerscheldetunnel-2.jpg]]" <em>(Westerscheldetunnel. Eigen foto. &#123;&#123;PD}})</em></li> <li>17 dec 2004 01:57 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Westerscheldetunnel-1.jpg|Westerscheldetunnel-1.jpg]]" <em>(Westerscheldetunnel. Eigen foto. &#123;&#123;PD}})</em></li> <li>16 dec 2004 21:44 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Bewerkt_ameiva_hagedis_kleur_.jpg|Bewerkt_ameiva_hagedis_kleur_.jpg]]" <em>(Uit Wiki Engels, zie http&#58;//en.wikipedia.org/wiki/Image:Unknown_lizard_belize.jpg)</em></li> <li>16 dec 2004 21:35 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Een_jonge_basilisk_hagedis_basiliscus.jpg|Een_jonge_basilisk_hagedis_basiliscus.jpg]]" <em>(UIt Wiki Engels zie http&#58;//en.wikipedia.org/wiki/Image:Unknow_lizard2_belize.jpg)</em></li> <li>16 dec 2004 21:32 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Boa_hortulanus_tuinboa.gif|Boa_hortulanus_tuinboa.gif]]" <em>(Uit Wiki Engels zie http&#58;//en.wikipedia.org/wiki/Image:Corallushortulanus.GIF)</em></li> <li>16 dec 2004 21:14 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Red-bellied_Turtle_Chrysemys_picta.jpg|Red-bellied_Turtle_Chrysemys_picta.jpg]]" <em>(Van Images.gov : Publiek domein.)</em></li> <li>16 dec 2004 21:09 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Ratelslang_diamant_Crotalus_adamanteus_.jpg|Ratelslang_diamant_Crotalus_adamanteus_.jpg]]" <em>(Van Images.gov: Publiek Domein.)</em></li> <li>16 dec 2004 21:04 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Cottonmouth_slang_agkistrodon_giftig.jpg|Cottonmouth_slang_agkistrodon_giftig.jpg]]" <em>(Van Images.gov: publiek domein.)</em></li> <li>16 dec 2004 20:45 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Voronezj_oblast_wapen.gif|Voronezj_oblast_wapen.gif]]" <em>(estse wiki: geraldika.ru)</em></li> <li>16 dec 2004 20:45 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Voronezj_oblast_vlag.gif|Voronezj_oblast_vlag.gif]]" <em>(estse wiki: geraldika.ru)</em></li> <li>16 dec 2004 19:46 [[Gebruiker:Ferrero|Ferrero]] heeft ge-upload: "[[:Afbeelding:Orinocodolfijn.jpg|Orinocodolfijn.jpg]]" <em>(Orinoco dolfijn; Openbare site : http&#58;//www.wnf.nl/dierenbibliotheek/)</em></li> <li>16 dec 2004 18:44 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:DSC00013.jpg|DSC00013.jpg]]" <em>(eigen afbeelding)</em></li> <li>16 dec 2004 18:41 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:DSC00001.jpg|DSC00001.jpg]]" <em>(Eigen afbeelding)</em></li> <li>16 dec 2004 17:56 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Kahn.gif|Kahn.gif]]" <em>(van Vlaggen lexicon.de)</em></li> <li>16 dec 2004 17:54 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:China_khan.gif|China_khan.gif]]" <em>(Van &quot;Een historische atlas van China&quot; (geschreven door A. Herrmann in 1966))</em></li> <li>16 dec 2004 17:42 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:China_1290.gif|China_1290.gif]]" <em>(Van &quot;Een historische atlas van China&quot; (geschreven door A. Herrmann in 1966))</em></li> <li>16 dec 2004 17:19 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Ming.gif|Ming.gif]]" <em>(Van &quot;Een historische atlas van China&quot; (geschreven door A. Herrmann in 1966))</em></li> <li>16 dec 2004 16:59 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:AlexandreB.jpg|AlexandreB.jpg]]" <em>(Alexandre de Beauharnais &#123;&#123;PD}})</em></li> <li>16 dec 2004 12:51 [[Gebruiker:Jürgen|Jürgen]] heeft ge-upload: "[[:Afbeelding:Leefgebied_noordelijke_zeebeer.JPG|Leefgebied_noordelijke_zeebeer.JPG]]" <em>(Bewerking afbeelding: afbeelding_(kaart).JPG)</em></li> <li>16 dec 2004 12:38 [[Gebruiker:Robotje|Robotje]] heeft ge-upload: "[[:Afbeelding:Akihito_and_Throne.jpg|Akihito_and_Throne.jpg]]" <em>(Van de Engelse Wikipedia: &#91;&#91;:en:image:Akihito and Throne.jpg]])</em></li> <li>16 dec 2004 12:02 [[Gebruiker:Thany|Thany]] heeft ge-upload: "[[:Afbeelding:Beschuit_met_muisjes_.jpg|Beschuit_met_muisjes_.jpg]]" <em>(Beschuit met muisjes)</em></li> <li>16 dec 2004 11:50 [[Gebruiker:Barbarossa|Barbarossa]] heeft ge-upload: "[[:Afbeelding:Nucleotides_-_degenerated_code.png|Nucleotides_-_degenerated_code.png]]" <em>(De nucleotidencode)</em></li> <li>16 dec 2004 11:42 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FSchlegel.jpg|FSchlegel.jpg]]" <em>(F. von Schlegel &#123;&#123;PD}} van en:)</em></li> <li>16 dec 2004 06:39 [[Gebruiker:Robotje|Robotje]] heeft ge-upload: "[[:Afbeelding:Doraemon-plush8.jpg|Doraemon-plush8.jpg]]" <em>(overgenomen van Duitse Wikipedia: &#39;Doraemon-plush8.jpg&#39;)</em></li> <li>16 dec 2004 00:29 [[Gebruiker:Cicero|Cicero]] heeft ge-upload: "[[:Afbeelding:Huet1.jpg|Huet1.jpg]]" <em>(Conrad Busken Huet, van het project Laurens Janszoon Coster, http&#58;//cf.hum.uva.nl/dsp/ljc/index.html, &#123;&#123;PD}})</em></li> <li>15 dec 2004 22:47 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Koersk_oblast_wapen.gif|Koersk_oblast_wapen.gif]]" <em>(estse wiki: geraldika.ru)</em></li> <li>15 dec 2004 22:44 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Koersk_oblast_vlag.gif|Koersk_oblast_vlag.gif]]" <em>(van estse wiki: geraldika.ru)</em></li> <li>15 dec 2004 22:26 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Robert_Dudley.jpg|Robert_Dudley.jpg]]" <em>(Portret van &#91;&#91;Robert Dudley, 1e graaf van Leicester&#124;Robert Dudley]]. Uit &#91;&#91;Hugo de Groot&#124;Hugo de Groots]] &quot;Nederlandtsche Jaerboeken en Historien&quot; uit 1681, dus inmiddels vrij van auteursrechten. Geupload door &#91;&#91;Gebruiker:Xaphire&#124;Xaphire]])</em></li> <li>15 dec 2004 22:22 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Slemphout2.jpg|Slemphout2.jpg]]" <em>(Van de:)</em></li> <li>15 dec 2004 22:08 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Kaart_Italie_Catanzaro.png|Kaart_Italie_Catanzaro.png]]" <em>(Oorspronkelijk uit CIA Factbook; vertaald in Nederlands door Danielm; omgezet in PNG door BenTels, enkel plaatsnaam met rood gemarkeerd door mij; Public Domain)</em></li> <li>15 dec 2004 21:50 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Rusland_eco_reg.jpg|Rusland_eco_reg.jpg]]" <em>(van en wiki: herbewerkt &#123;&#123;GDFL}})</em></li> <li>15 dec 2004 20:38 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Twickel.jpg|Twickel.jpg]]" <em>(Kasteel &#91;&#91;Twickel]] bij &#91;&#91;Delden]]. Foto &#91;&#91;Gebruiker:Xaphire&#124;Xaphire]].)</em></li> <li>15 dec 2004 20:32 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Oostendorperwatermolen.jpg|Oostendorperwatermolen.jpg]]" <em>(Oostendorpermolen bij &#91;&#91;Haaksbergen]]. Foto &#91;&#91;Gebruiker:Xaphire&#124;Xaphire]])</em></li> <li>15 dec 2004 20:27 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Blauwereiger.jpg|Blauwereiger.jpg]]" <em>(Foto van een &#91;&#91;blauwe reiger]] bij een vijver in &#91;&#91;Artis]]. Foto &#91;&#91;Gebruiker:Xaphire&#124;Xaphire]])</em></li> <li>15 dec 2004 20:24 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Dendroaspis_mamba_slang.jpg|Dendroaspis_mamba_slang.jpg]]" <em>(Van Wiki Engels, zie (http&#58;//en.wikipedia.org/wiki/Image:Green%2C_yellow_snake.jpg))</em></li> <li>15 dec 2004 19:08 [[Gebruiker:IJzeren Jan|IJzeren Jan]] heeft ge-upload: "[[:Afbeelding:Syldavië_vlag.png|Syldavië_vlag.png]]" <em>(Uit de Engelse wiki)</em></li> <li>15 dec 2004 15:37 [[Gebruiker:Hasekamp|Hasekamp]] heeft ge-upload: "[[:Afbeelding:Witwanggibbon_V.jpg|Witwanggibbon_V.jpg]]" <em>(Zelf gemaakt)</em></li> <li>15 dec 2004 15:36 [[Gebruiker:Hasekamp|Hasekamp]] heeft ge-upload: "[[:Afbeelding:Witwanggibbon_M.jpg|Witwanggibbon_M.jpg]]" <em>(Zelf gemaakt)</em></li> <li>15 dec 2004 13:39 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Portisk.jpg|Portisk.jpg]]" <em>(toestemming Gerard Hund)</em></li> <li>15 dec 2004 13:00 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Whiskyvaten.jpg|Whiskyvaten.jpg]]" <em>(Whiskyvaten bij Glenmorangie. Foto &#91;&#91;Gebruiker:Xaphire&#124;Xaphire]].)</em></li> <li>15 dec 2004 12:57 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Glenmorangie.jpg|Glenmorangie.jpg]]" <em>(Distilleerketels bij Glen Morangie. Foto &#91;&#91;Gebruiker:Xaphire&#124;Xaphire].)</em></li> <li>15 dec 2004 12:37 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Delden.jpg|Delden.jpg]]" <em>(Kaart van Delden door &#91;&#91;Jacobus van Deventer]] uit circa 1565. )</em></li> <li>15 dec 2004 12:00 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Jarrow.jpg|Jarrow.jpg]]" <em>(Ruïne van het klooster te Jarrow, met de nog bestaande kerk op de achtergrond. Foto &#91;&#91;Gebruiker:Xaphire&#124;Xaphire]])</em></li> <li>15 dec 2004 11:53 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Zuckerrohr.jpg|Zuckerrohr.jpg]]" <em>(Afbeelding van Duitstalige Wikipedia lemma Zuckerrohr Lizenzstatus: GNU-FDL ; Bildquelle: Privatfoto Esskay)</em></li> <li>15 dec 2004 11:43 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Aken_dom.jpg|Aken_dom.jpg]]" <em>(Interieur van de Dom te Aken, met reliekschrijn van Karel de Grote. Foto Xaphire.)</em></li> <li>15 dec 2004 11:37 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Aalten_kerk.jpg|Aalten_kerk.jpg]]" <em>(Sint Helenakerk te Aalten, foto Xaphire)</em></li> <li>15 dec 2004 11:27 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Denekamp_kerk.jpg|Denekamp_kerk.jpg]]" <em>(Sint Nicolaaskerk in Denekamp, foto Xaphire)</em></li> <li>15 dec 2004 10:11 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kiriakov.jpg|Kiriakov.jpg]]" <em>(fiat convekta)</em></li> <li>15 dec 2004 08:41 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Mdeswaen.jpg|Mdeswaen.jpg]]" <em>(publiek domein)</em></li> <li>15 dec 2004 08:31 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Mariapetyt.jpg|Mariapetyt.jpg]]" <em>(publiek domein afbeelding (ouderdom))</em></li> <li>15 dec 2004 02:16 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_trbovlje.png|Sl_gemeente_trbovlje.png]]" <em>(gemaakt door Plp sl:wikipeida; auteursrechtenvrij)</em></li> <li>15 dec 2004 02:13 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_trnovska_vas.png|Sl_gemeente_trnovska_vas.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 02:11 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_polzela.png|Sl_gemeente_polzela.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 02:09 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_podcetrtek.png|Sl_gemeente_podcetrtek.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 02:03 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_cerklje.png|Sl_gemeente_cerklje.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 02:00 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_kobarid.png|Sl_gemeente_kobarid.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 01:56 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_sveti_andraz.png|Sl_gemeente_sveti_andraz.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 01:55 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_lenart.png|Sl_gemeente_lenart.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 01:55 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_lendava.png|Sl_gemeente_lendava.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 01:47 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_smarje_jelsah.png|Sl_gemeente_smarje_jelsah.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 01:19 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_verzej.png|Sl_gemeente_verzej.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 01:18 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_trzin.png|Sl_gemeente_trzin.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 01:18 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_sempeter.png|Sl_gemeente_sempeter.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 01:17 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_ribnica_na_pohorju.png|Sl_gemeente_ribnica_na_pohorju.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 01:17 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_lasko.png|Sl_gemeente_lasko.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 01:16 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_ivancna_gorica.png|Sl_gemeente_ivancna_gorica.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 01:15 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_ilirska_bistrica.png|Sl_gemeente_ilirska_bistrica.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>15 dec 2004 01:15 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_braslovce.png|Sl_gemeente_braslovce.png]]" <em>(gemaakt door Plp sl:wikipedia; auteursrechtenvrij)</em></li> <li>14 dec 2004 23:24 [[Gebruiker:TimT|TimT]] heeft ge-upload: "[[:Afbeelding:Ednijpels.jpg|Ednijpels.jpg]]" <em>(Deze foto is van www.parlement.com)</em></li> <li>14 dec 2004 22:40 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Bredevoort_kaart.gif|Bredevoort_kaart.gif]]" <em>(Belegering van Bredevoort in 1597, uit zeventiende eeuws boek dus vrij van auteursrecht.)</em></li> <li>14 dec 2004 22:31 [[Gebruiker:Xaphire|Xaphire]] heeft ge-upload: "[[:Afbeelding:Maurits.jpg|Maurits.jpg]]" <em>(Portret van Maurits van Oranje, uit: Hugo de Groots &quot;Nederlandtsche Jaerboeken en Historien&quot; uit 1681, dus inmiddels vrij van auteursrechten.)</em></li> <li>14 dec 2004 20:55 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:WzuW.jpg|WzuW.jpg]]" <em>(Wilhelm zu Wied - van de: &#123;&#123;PD}})</em></li> <li>14 dec 2004 20:47 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Kaart_Italie_Potenza.png|Kaart_Italie_Potenza.png]]" <em>(Oorspronkelijk uit CIA Factbook; vertaald in Nederlands door Danielm; omgezet in PNG door BenTels, enkel plaatsnaam met rood gemarkeerd door mij; Public Domain)</em></li> <li>14 dec 2004 19:49 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:RW57Locatie.png|RW57Locatie.png]]" <em>(Locatie RW57, eigen werk, &#123;&#123;PD}})</em></li> <li>14 dec 2004 19:40 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Carte_France_Département_12.png|Carte_France_Département_12.png]]" <em>(van franse wikipedia)</em></li> <li>14 dec 2004 19:19 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Janbart.jpg|Janbart.jpg]]" <em>(jan bart - eigen foto)</em></li> <li>14 dec 2004 18:46 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Belfortduinkerke.jpg|Belfortduinkerke.jpg]]" <em>(belfort van Duinkerke - eigen foto)</em></li> <li>14 dec 2004 18:38 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Stadhuisduinkerke.jpg|Stadhuisduinkerke.jpg]]" <em>(stadhuis Duinkerke - eigen foto)</em></li> <li>14 dec 2004 18:06 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Hondschoote.jpg|Hondschoote.jpg]]" <em>(Hondschoote - eigen foto)</em></li> <li>14 dec 2004 16:59 [[Gebruiker:Robk|Robk]] heeft ge-upload: "[[:Afbeelding:Juan_de_Nova.PNG|Juan_de_Nova.PNG]]" <em>(Kaart van Juan de Nova. Van World Factbook CIA.)</em></li> <li>14 dec 2004 14:09 [[Gebruiker:HinaT|HinaT]] heeft ge-upload: "[[:Afbeelding:Homo_rudolfensis_img1.jpg|Homo_rudolfensis_img1.jpg]]" <em>(Homo rudolfensis volgens &quot;walking with cavemen&quot; van de BBC.)</em></li> <li>14 dec 2004 11:36 [[Gebruiker:MarcoVD|MarcoVD]] heeft ge-upload: "[[:Afbeelding:HumphreyBogart.jpg|HumphreyBogart.jpg]]" <em>(Van duitse wiki. Tekst aldaar: &quot;Humphrey Bogart by Yousuf Karsh / National Archives of Canada/PA-212506/Copyright: Expired&quot;)</em></li> <li>14 dec 2004 10:09 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Norfolk_COA.gif|Norfolk_COA.gif]]" <em>(en wiki &#123;&#123;PD}})</em></li> <li>14 dec 2004 10:06 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Norfolk_eiland_vlag.png|Norfolk_eiland_vlag.png]]" <em>(en wiki CIA herbewerkt)</em></li> <li>14 dec 2004 10:06 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Norfolk_COA.gif|Norfolk_COA.gif]]" <em>(en wiki &#123;&#123;PD}})</em></li> <li>14 dec 2004 10:05 [[Gebruiker:Hasekamp|Hasekamp]] heeft ge-upload: "[[:Afbeelding:Withandgibbon.jpg|Withandgibbon.jpg]]" <em>(Zelf gemaakt)</em></li> <li>14 dec 2004 10:02 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:241302.jpg|241302.jpg]]" <em>(toestemming nationaal archief)</em></li> <li>14 dec 2004 09:59 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kostk.jpg|Kostk.jpg]]" <em>(toestemming Kosteniuk)</em></li> <li>14 dec 2004 09:29 [[Gebruiker:FT|FT]] heeft ge-upload: "[[:Afbeelding:BoutrosGhali.jpg|BoutrosGhali.jpg]]" <em>(website UN, publiek)</em></li> <li>14 dec 2004 01:34 [[Gebruiker:Cicero|Cicero]] heeft ge-upload: "[[:Afbeelding:Station_Zwijndrecht.jpg|Station_Zwijndrecht.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>14 dec 2004 01:33 [[Gebruiker:Cicero|Cicero]] heeft ge-upload: "[[:Afbeelding:Station_Zwijndrecht.jpg|Station_Zwijndrecht.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>13 dec 2004 23:53 [[Gebruiker:Tr606|Tr606]] heeft ge-upload: "[[:Afbeelding:Seneca.JPG|Seneca.JPG]]" <em>(Buste van Seneca (de Jongere), van Engelse Wiki)</em></li> <li>13 dec 2004 22:28 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Kaart_Italie_Campobasso.png|Kaart_Italie_Campobasso.png]]" <em>(Oorspronkelijk uit CIA Factbook; vertaald in Nederlands door Danielm; omgezet in PNG door BenTels, enkel plaatsnaam met rood gemarkeerd door mij; Public Domain)</em></li> <li>13 dec 2004 21:40 [[Gebruiker:Maarten Vermaak|Maarten Vermaak]] heeft ge-upload: "[[:Afbeelding:Jacob.gif|Jacob.gif]]" <em>(Ik heb dit plaatje zelf gemaakt en er rust geen auteursrecht op.)</em></li> <li>13 dec 2004 20:16 [[Gebruiker:Hjvannes|Hjvannes]] heeft ge-upload: "[[:Afbeelding:Nachtzwaluw.jpg|Nachtzwaluw.jpg]]" <em>(uit Morris&#39;s British Birds 1891 (meer dan 100 jaar oud), te raadplegen op www.BirdCheck.co.uk)</em></li> <li>13 dec 2004 20:11 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Tarweaar.jpg|Tarweaar.jpg]]" <em>(zelfgemaakte foto van tarweaar)</em></li> <li>13 dec 2004 19:46 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Cixi.jpg|Cixi.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>13 dec 2004 19:28 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Nurhaci.jpg|Nurhaci.jpg]]" <em>(van google afbeeldingen)</em></li> <li>13 dec 2004 19:17 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Hong_Taiji.jpg|Hong_Taiji.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>13 dec 2004 19:05 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Palestine_Flag.gif|Palestine_Flag.gif]]" <em>(vlag palestina (engelse wikipedia))</em></li> <li>13 dec 2004 18:41 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Chongzhen.jpg|Chongzhen.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>13 dec 2004 18:17 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Shunzhi.jpg|Shunzhi.jpg]]"</li> <li>13 dec 2004 18:11 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Kangxi.jpg|Kangxi.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>13 dec 2004 18:06 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Yongzheng.jpg|Yongzheng.jpg]]"</li> <li>13 dec 2004 17:48 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Qianlong.jpg|Qianlong.jpg]]"</li> <li>13 dec 2004 16:57 [[Gebruiker:Drdefcom|Drdefcom]] heeft ge-upload: "[[:Afbeelding:Colossuscomputer.jpg|Colossuscomputer.jpg]]" <em>(Colossus Computer, Copyright Tony Sale. De eigenaar heeft de toestemming verleent om deze foto te gebruiken in Wikipedia)</em></li> <li>13 dec 2004 16:15 [[Gebruiker:Frankdegram|Frankdegram]] heeft ge-upload: "[[:Afbeelding:Rembsask.jpg|Rembsask.jpg]]" <em>(Rembrandt Harmensz. van Rijn, Dubbelportret Saskia en Rembrandt, 1636, British Museum Londen)</em></li> <li>13 dec 2004 15:51 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:KillenStrait.jpg|KillenStrait.jpg]]" <em>(verantwoording - zie foto)</em></li> <li>13 dec 2004 15:12 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:KillenStrait.jpg|KillenStrait.jpg]]" <em>(verantwoording: zie foto)</em></li> <li>13 dec 2004 15:09 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Christmas_tree.jpg|Christmas_tree.jpg]]" <em>(afbeelding van Engelstalige Wikipedia; Nordmann-spar als kerstboom)</em></li> <li>13 dec 2004 14:47 [[Gebruiker:Zander|Zander]] heeft ge-upload: "[[:Afbeelding:Wikip.gif|Wikip.gif]]" <em>(verwijzingsbanner; eigen produktie; animatie kan niet zonder gif )</em></li> <li>13 dec 2004 14:01 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Nordmann-01.jpg|Nordmann-01.jpg]]" <em>(Afbeelding van Duitstalige Wikipedia: *Beschreibung: &#91;&#91;Nordmanntanne]] in der Kultur)</em></li> <li>13 dec 2004 12:26 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Viburnum_opulus_bloem.jpg|Viburnum_opulus_bloem.jpg]]" <em>(zie &#91;&#91;afbeelding:Viburnum_opulus.jpg)</em></li> <li>13 dec 2004 11:46 [[Gebruiker:Nicklaarakkers|Nicklaarakkers]] heeft ge-upload: "[[:Afbeelding:Tichon.jpg|Tichon.jpg]]" <em>(fotograaf is al dood)</em></li> <li>13 dec 2004 11:13 [[Gebruiker:Drdefcom|Drdefcom]] heeft ge-upload: "[[:Afbeelding:Colossusrebuild.jpg|Colossusrebuild.jpg]]" <em>(Foto van Colossus, gerestaureerd door Tony Sale. Toelating gegeven door Tony sale om de foto te publiceren in Wikipedia.)</em></li> <li>13 dec 2004 11:00 [[Gebruiker:Hasekamp|Hasekamp]] heeft ge-upload: "[[:Afbeelding:PhuketChinees.jpg|PhuketChinees.jpg]]" <em>(Zelf gemaakt)</em></li> <li>13 dec 2004 10:59 [[Gebruiker:Hasekamp|Hasekamp]] heeft ge-upload: "[[:Afbeelding:PhuketPortugees.jpg|PhuketPortugees.jpg]]" <em>(Zelf gemaakt)</em></li> <li>13 dec 2004 10:29 [[Gebruiker:Hasekamp|Hasekamp]] heeft ge-upload: "[[:Afbeelding:JamesBondEiland.jpg|JamesBondEiland.jpg]]" <em>(Zelf gemaakt)</em></li> <li>13 dec 2004 08:36 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Grevelingen-1981.jpg|Grevelingen-1981.jpg]]" <em>(Grevelingenmeer. Eigen foto uit 1981. I took this photo myself. &#123;&#123;PD}})</em></li> <li>13 dec 2004 08:25 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Wolken-sfeerfoto-1980.jpg|Wolken-sfeerfoto-1980.jpg]]" <em>(Wolken, zelf gemaakt in 1980. Clouds, made by myself in 1980. &#123;&#123;PD}})</em></li> <li>13 dec 2004 06:47 [[Gebruiker:Sherpa|Sherpa]] heeft ge-upload: "[[:Afbeelding:Thay-TeaCupOnHand_tif.jpg|Thay-TeaCupOnHand_tif.jpg]]" <em>(Thich Nhat Hanh: Pictures of Thich Nhat Hanh - You have the permission to use these pictures for your Websites and publications for materials related to the practices of Plum Village. Please credit the pictures with Courtesy of Plum Village Practice Center, France)</em></li> <li>13 dec 2004 03:52 [[Gebruiker:Lekkere Kwal|Lekkere Kwal]] heeft ge-upload: "[[:Afbeelding:Green_maroon_coleus.jpg|Green_maroon_coleus.jpg]]" <em>(ENG Wikipedia, gebruiker Koyaanis Qatsi verklaart deze afbeelding zelf gemaakt te hebben in publiek domein uit te brengen, zie http&#58;//en.wikipedia.org/wiki/Image:Green_maroon_coleus_sm.jpg)</em></li> <li>12 dec 2004 22:56 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Honingzwam.jpg|Honingzwam.jpg]]" <em>(Van de:)</em></li> <li>12 dec 2004 22:55 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:LocatieSpitsbergen.png|LocatieSpitsbergen.png]]" <em>(engelse wiki: GNU)</em></li> <li>12 dec 2004 22:54 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Spitsbergen_COA.png|Spitsbergen_COA.png]]" <em>(estse wiki)</em></li> <li>12 dec 2004 22:54 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Spechtvoederplaats.jpg|Spechtvoederplaats.jpg]]" <em>(Van de:)</em></li> <li>12 dec 2004 22:42 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Pontebba1900.JPG|Pontebba1900.JPG]]" <em>(pontebba in val canale rond 1900 - publiek domein)</em></li> <li>12 dec 2004 22:39 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FelixElisa.jpg|FelixElisa.jpg]]" <em>(&#91;&#91;Felix Bacciocchi]] en &#91;&#91;Elisa Bonaparte]] &#123;&#123;PD}})</em></li> <li>12 dec 2004 22:30 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Pontebba1900.JPG|Pontebba1900.JPG]]" <em>(Pontebba in het Van canale rond 1900 - publiek domein)</em></li> <li>12 dec 2004 22:24 [[Gebruiker:Zander|Zander]] heeft ge-upload: "[[:Afbeelding:Ponymarkt-bemmel.jpg|Ponymarkt-bemmel.jpg]]" <em>(eigen werk, vrijgegeven voor openbaar gebruik)</em></li> <li>12 dec 2004 22:19 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Larvegangen.jpg|Larvegangen.jpg]]" <em>(Van de:)</em></li> <li>12 dec 2004 21:55 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:CamilloBorghese.jpg|CamilloBorghese.jpg]]" <em>(&#91;&#91;Camillo Filippo Ludovico Borghese]] &#123;&#123;PD}})</em></li> <li>12 dec 2004 21:52 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Glau_Slemphout2.jpg|Glau_Slemphout2.jpg]]" <em>(Van de:)</em></li> <li>12 dec 2004 21:47 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Glau_Slemphout1.jpg|Glau_Slemphout1.jpg]]" <em>(Van de:)</em></li> <li>12 dec 2004 21:44 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Ruigpootuil.jpg|Ruigpootuil.jpg]]" <em>(Van de:)</em></li> <li>12 dec 2004 21:41 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Achtsevlag.png|Achtsevlag.png]]" <em>(Vlag van het plaatsje Acht bij Eindhoven (vlag gemaakt in 2003 toen Acht 700 jaar was).&lt;br&gt;Zie ook http&#58;//www.acht.nl/&lt;br&gt;&lt;br&gt;Dit plaatje is te vervanging van Achtsevlag.jpg wat op 22 sep 2004 19:15 door Gebruiker Kleinspr was geupload. Nu echter betere kleuren en strakker.)</em></li> <li>12 dec 2004 21:39 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Amerikaanse_marter.jpg|Amerikaanse_marter.jpg]]" <em>(Van de:)</em></li> <li>12 dec 2004 21:38 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Slemphout7.jpg|Slemphout7.jpg]]" <em>(Van de:)</em></li> <li>12 dec 2004 21:33 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Slemphout6.jpg|Slemphout6.jpg]]" <em>(Van de:)</em></li> <li>12 dec 2004 21:31 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Slemphout4.jpg|Slemphout4.jpg]]" <em>(Van de:)</em></li> <li>12 dec 2004 21:22 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Napoleon5.jpg|Napoleon5.jpg]]" <em>(Kroning van Napoleon &#123;&#123;PD}})</em></li> <li>12 dec 2004 21:21 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Napoleon4.jpg|Napoleon4.jpg]]" <em>(Napoleon &#123;&#123;PD}})</em></li> <li>12 dec 2004 21:18 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Napoleon3.jpg|Napoleon3.jpg]]" <em>(Napoleon &#123;&#123;PD}})</em></li> <li>12 dec 2004 21:18 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Napoleon1.jpg|Napoleon1.jpg]]" <em>(Napoleon &#123;&#123;PD}})</em></li> <li>12 dec 2004 20:37 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:PaulineBonaparte.jpg|PaulineBonaparte.jpg]]" <em>(Pauline Bonaparte &#123;&#123;PD}})</em></li> <li>12 dec 2004 18:55 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Terrapene_sierschildpad_Chrysemys_picta.jpg|Terrapene_sierschildpad_Chrysemys_picta.jpg]]" <em>(Uit Wiki Engels )</em></li> <li>12 dec 2004 18:41 [[Gebruiker:Bouke|Bouke]] heeft ge-upload: "[[:Afbeelding:DSCF0867.JPG|DSCF0867.JPG]]" <em>(zelf gemaakt op Zondag 12 december 2004)</em></li> <li>12 dec 2004 18:34 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Cuzco_summit.jpg|Cuzco_summit.jpg]]" <em>(foto cusco-declaratie (engelse wikipedia))</em></li> <li>12 dec 2004 18:14 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Baudouin_I_of_Belgium.jpg|Baudouin_I_of_Belgium.jpg]]" <em>(koning boudewijk zaliger (engelse wikipedia))</em></li> <li>12 dec 2004 17:53 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Vallee-chajoux.jpg|Vallee-chajoux.jpg]]" <em>(foto vogesen (engelse wikipedia))</em></li> <li>12 dec 2004 16:52 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Austrasia.jpg|Austrasia.jpg]]" <em>(kaartje austasië (engelse wikipedia))</em></li> <li>12 dec 2004 15:58 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Modelzweefvliegtuig.jpg|Modelzweefvliegtuig.jpg]]" <em>(zelfgemaakte foto van modelzweefvliegtuig)</em></li> <li>12 dec 2004 14:14 [[Gebruiker:Kevinv|Kevinv]] heeft ge-upload: "[[:Afbeelding:Beringen1.jpg|Beringen1.jpg]]"</li> <li>12 dec 2004 14:09 [[Gebruiker:MarcoVD|MarcoVD]] heeft ge-upload: "[[:Afbeelding:BluesBrothers.jpg|BluesBrothers.jpg]]" <em>(van it: (tekst aldaar: Questa immagine è stata rilasciata nel pubblico dominio dal detentore del copyright, o il copyright è scaduto. Questa norma vale in tutto il mondo.))</em></li> <li>12 dec 2004 13:46 [[Gebruiker:Kevinv|Kevinv]] heeft ge-upload: "[[:Afbeelding:Aalst1.gif|Aalst1.gif]]"</li> <li>12 dec 2004 13:41 [[Gebruiker:Zerre|Zerre]] heeft ge-upload: "[[:Afbeelding:The_mirage.jpg|The_mirage.jpg]]" <em>(The Mirage)</em></li> <li>12 dec 2004 13:33 [[Gebruiker:DexieBoy|DexieBoy]] heeft ge-upload: "[[:Afbeelding:Bundestag.jpg|Bundestag.jpg]]" <em>(Is van Duitse Wiki. Is Gemaakt door een gebruiker van die Wiki, en daarom is deze fotot onder GNU FDL)</em></li> <li>12 dec 2004 13:32 [[Gebruiker:Kevinv|Kevinv]] heeft ge-upload: "[[:Afbeelding:Halle1.jpg|Halle1.jpg]]"</li> <li>12 dec 2004 13:18 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Phelsuma_l._laticauda.jpg|Phelsuma_l._laticauda.jpg]]" <em>(Foto door Jurriaan Schulman. Uit Wiki Engels, zie http&#58;//en.wikipedia.org/wiki/Image:Phelsuma_l._laticauda.jpg )</em></li> <li>12 dec 2004 13:07 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Phelsuma_edwardnewtoni.jpg|Phelsuma_edwardnewtoni.jpg]]" <em>(Foto door Jurriaan Schulman. Uit Wiki Engels, zie http&#58;//en.wikipedia.org/wiki/Image:Phelsuma_edwardnewtoni.jpg)</em></li> <li>12 dec 2004 12:31 [[Gebruiker:Nicklaarakkers|Nicklaarakkers]] heeft ge-upload: "[[:Afbeelding:FAN_NOLI.jpg|FAN_NOLI.jpg]]" <em>(Duitse wiki)</em></li> <li>12 dec 2004 12:17 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:P._m._madagascariensis_juvenile.jpg|P._m._madagascariensis_juvenile.jpg]]" <em>(Van Wiki Engels, zie http&#58;//en.wikipedia.org/wiki/Image:P._m._madagascariensis_juvenile.jpg)</em></li> <li>12 dec 2004 12:11 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Us_flag_large.png|Us_flag_large.png]]" <em>(grote vlag vs (engelse wikipedia))</em></li> <li>12 dec 2004 12:10 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:13-stars-us-flag.png|13-stars-us-flag.png]]" <em>(oude vlag vs (engelse wikipedia))</em></li> <li>12 dec 2004 12:09 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Vsachtig_vlag.png|Vsachtig_vlag.png]]" <em>(vs-achtige vlaggen (zelf gemaakt met wikipediavlaggen))</em></li> <li>12 dec 2004 11:57 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Gb_heic.png|Gb_heic.png]]" <em>(vlag britse oost-indische compagnie (engelse wikipedia))</em></li> <li>12 dec 2004 11:53 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Spoorwegmuseum_St_Petersburg_4.jpg|Spoorwegmuseum_St_Petersburg_4.jpg]]" <em>(Spoorwegmuseum (vm. Warschaustation) te St. Petersburg. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], augustus 2002)</em></li> <li>12 dec 2004 11:31 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Abricotboom.jpg|Abricotboom.jpg]]" <em>(Afbeelding afkomstig van Franstalige Wikipedia)</em></li> <li>12 dec 2004 11:24 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Abricot.jpg|Abricot.jpg]]" <em>(Afbeelding afkomstig van Franstalige Wikipedia: *Variété d&#39;abricotier cultivée aux États-Unis)</em></li> <li>12 dec 2004 11:15 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Christianflag.png|Christianflag.png]]" <em>(christelijke vlag (engelse wikipedia))</em></li> <li>12 dec 2004 10:51 [[Gebruiker:FT|FT]] heeft ge-upload: "[[:Afbeelding:Dan_quale.jpg|Dan_quale.jpg]]" <em>(PAUL MICKLE)</em></li> <li>12 dec 2004 10:26 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Slemphout.png|Slemphout.png]]" <em>(Van de:, i.v.m. bestandsgrootte omlaag naar 256 kleuren)</em></li> <li>12 dec 2004 09:02 [[Gebruiker:Kevinv|Kevinv]] heeft ge-upload: "[[:Afbeelding:Mechelen1.jpg|Mechelen1.jpg]]"</li> <li>12 dec 2004 08:43 [[Gebruiker:Kevinv|Kevinv]] heeft ge-upload: "[[:Afbeelding:Genk1.jpg|Genk1.jpg]]"</li> <li>12 dec 2004 07:59 [[Gebruiker:Kevinv|Kevinv]] heeft ge-upload: "[[:Afbeelding:Diest1.jpg|Diest1.jpg]]"</li> <li>12 dec 2004 07:50 [[Gebruiker:Kevinv|Kevinv]] heeft ge-upload: "[[:Afbeelding:Brugge.jpg|Brugge.jpg]]"</li> <li>12 dec 2004 07:44 [[Gebruiker:Kevinv|Kevinv]] heeft ge-upload: "[[:Afbeelding:Kortryk.jpg|Kortryk.jpg]]" <em>(NGW)</em></li> <li>12 dec 2004 07:42 [[Gebruiker:Kevinv|Kevinv]] heeft ge-upload: "[[:Afbeelding:Gent1.jpg|Gent1.jpg]]" <em>(NGW)</em></li> <li>12 dec 2004 07:37 [[Gebruiker:Kevinv|Kevinv]] heeft ge-upload: "[[:Afbeelding:Hasselt2.jpg|Hasselt2.jpg]]"</li> <li>11 dec 2004 22:49 [[Gebruiker:Why hello good sir|Why hello good sir]] heeft ge-upload: "[[:Afbeelding:Pierre.jpg|Pierre.jpg]]" <em>(ik)</em></li> <li>11 dec 2004 22:02 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Spoorwegmuseum_St_Petersburg_4.jpg|Spoorwegmuseum_St_Petersburg_4.jpg]]" <em>(Spoorwegmuseum (vm. Warschaustation) te St. Petersburg. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], augustus 2002)</em></li> <li>11 dec 2004 21:37 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:P36.jpg|P36.jpg]]" <em>(foto van Kneiphof (Stoomlocomotief), kleuren iets bijgewerkt)</em></li> <li>11 dec 2004 21:09 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Spoorwegmuseum_St_Petersburg_3.jpg|Spoorwegmuseum_St_Petersburg_3.jpg]]" <em>(Spoorwegmuseum (vm. Warschaustation) te St. Petersburg. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], augustus 2002)</em></li> <li>11 dec 2004 21:07 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Spoorwegmuseum_St_Petersburg_2.jpg|Spoorwegmuseum_St_Petersburg_2.jpg]]" <em>(Spoorwegmuseum (vm. Warschaustation) te St. Petersburg. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], augustus 2002)</em></li> <li>11 dec 2004 21:06 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Spoorwegmuseum_St_Petersburg_1.jpg|Spoorwegmuseum_St_Petersburg_1.jpg]]" <em>(Spoorwegmuseum (vm. Warschaustation) te St. Petersburg. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], augustus 2002)</em></li> <li>11 dec 2004 20:45 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:CIE1931_2graden.gif|CIE1931_2graden.gif]]" <em>(Zelfgemaakt met Excel)</em></li> <li>11 dec 2004 20:39 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:CIE1931_2graden.gif|CIE1931_2graden.gif]]" <em>(Zelfgemaakt met Excel)</em></li> <li>11 dec 2004 20:24 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Kilometerteller.jpg|Kilometerteller.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>11 dec 2004 20:11 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Schlupf_0011.jpg|Schlupf_0011.jpg]]" <em>(Van de Duitse Wiki, zie (http&#58;//de.wikipedia.org/wiki/Bild:Schlupf_0011.jpg))</em></li> <li>11 dec 2004 19:44 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Doosschildpad.JPG|Doosschildpad.JPG]]" <em>(Eigen tekening)</em></li> <li>11 dec 2004 19:38 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Spoorwegmuseum_St_Petersburg_1.jpg|Spoorwegmuseum_St_Petersburg_1.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>11 dec 2004 18:41 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Schild_Pruisen.jpg|Schild_Pruisen.jpg]]" <em>(beste versie schild pruisen (engelse wikipedia + eigen bewerking))</em></li> <li>11 dec 2004 18:39 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Schild_Pruisen.jpg|Schild_Pruisen.jpg]]" <em>(betere versie schild pruisen (engelse wikipedia + eigen bewerking))</em></li> <li>11 dec 2004 18:35 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Vlag_Pruisen.png|Vlag_Pruisen.png]]" <em>(vlag pruisen (engelse wikipedia))</em></li> <li>11 dec 2004 18:31 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Schild_Pruisen.jpg|Schild_Pruisen.jpg]]" <em>(wapenschild pruisen (engelse wikipedia))</em></li> <li>11 dec 2004 18:20 [[Gebruiker:Kneiphof|Kneiphof]] heeft ge-upload: "[[:Afbeelding:P36.jpg|P36.jpg]]" <em>(Stoomlocomotief, eigen foto)</em></li> <li>11 dec 2004 16:52 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Wart_snake_1.jpg|Wart_snake_1.jpg]]" <em>(Van wiki Engsla, zie (http&#58;//en.wikipedia.org/wiki/Image:Wart_snake_1.jpg))</em></li> <li>11 dec 2004 16:36 [[Gebruiker:Kevinv|Kevinv]] heeft ge-upload: "[[:Afbeelding:Peer.jpg|Peer.jpg]]"</li> <li>11 dec 2004 15:09 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Friedrich_ratzel.jpg|Friedrich_ratzel.jpg]]" <em>(van http&#58;//www.uni-leipzig.de/~geograph/institut/institut6.html (afbeelding meer dan 70 jaar oud))</em></li> <li>11 dec 2004 14:49 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Jiaqing.jpg|Jiaqing.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>11 dec 2004 14:42 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Daoguang.jpg|Daoguang.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>11 dec 2004 14:36 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:GoyaKarelIV.jpg|GoyaKarelIV.jpg]]" <em>(Karel IV van Spanje en familie door Goya &#123;&#123;PD}})</em></li> <li>11 dec 2004 14:34 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Xianfeng.jpg|Xianfeng.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>11 dec 2004 14:31 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Tongzhi.jpg|Tongzhi.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>11 dec 2004 14:22 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:KarelIVSp.jpg|KarelIVSp.jpg]]" <em>(Karel IV van Spanje door Anton Raphael Mengs, olie op canvas, 152 x 110 cm. Museo del Prado, Madrid &#123;&#123;PD}})</em></li> <li>11 dec 2004 14:13 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:KEITH.jpg|KEITH.jpg]]" <em>(fiat levitt)</em></li> <li>11 dec 2004 14:10 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Honxiang.jpg|Honxiang.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>11 dec 2004 14:00 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Odulfusborgloon.JPG|Odulfusborgloon.JPG]]" <em>(Sint-Odulfus - eigen foto)</em></li> <li>11 dec 2004 13:53 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Guangxu.jpg|Guangxu.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>11 dec 2004 13:17 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Xuantong2.jpg|Xuantong2.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>11 dec 2004 13:16 [[Gebruiker:Empoor|Empoor]] heeft ge-upload: "[[:Afbeelding:01_china.jpg|01_china.jpg]]" <em>(Volksrepubliek China, copyright Hewlett-Packard)</em></li> <li>11 dec 2004 12:20 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Buchenwald_Tor_Straflager.jpg|Buchenwald_Tor_Straflager.jpg]]" <em>(Buchenwald, toegangspoort tot het strafkamp. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], augustus 2004)</em></li> <li>11 dec 2004 12:09 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Buchenwald_Tor_Straflager.jpg|Buchenwald_Tor_Straflager.jpg]]" <em>(Buchenwald, toegangspoort tot het strafkamp. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], augustus 2004)</em></li> <li>11 dec 2004 12:08 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Buchenwald_Krematorium.jpg|Buchenwald_Krematorium.jpg]]" <em>(Buchenwald, crematorium. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], augustus 2004)</em></li> <li>11 dec 2004 11:40 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Spain_coa.png|Spain_coa.png]]" <em>(beter spaans wapenschild (engelse wikipedia))</em></li> <li>11 dec 2004 11:19 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Babi_Jar_ravijn.jpg|Babi_Jar_ravijn.jpg]]" <em>(Babi Jar, ravijn. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]] april 2003))</em></li> <li>11 dec 2004 11:17 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Plask.jpg|Plask.jpg]]" <em>(fiat levitt)</em></li> <li>11 dec 2004 11:10 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Babi_Jar_ravijn.jpg|Babi_Jar_ravijn.jpg]]" <em>(Babi Jar, ravijn. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]] april 2003))</em></li> <li>11 dec 2004 10:55 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Babi_Jar_ravijn.jpg|Babi_Jar_ravijn.jpg]]" <em>(Babi Jar, ravijn. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]] april 2003)</em></li> <li>11 dec 2004 10:55 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Babi_Jar_monument_Sovjetburgers.jpg|Babi_Jar_monument_Sovjetburgers.jpg]]" <em>(Babi Jar, monument voor de omgekomen Sovjetburgers. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]] april 2003)</em></li> <li>11 dec 2004 10:54 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Babi_Jar_monument_kinderen_.jpg|Babi_Jar_monument_kinderen_.jpg]]" <em>(Babi Jar, monument voor de omgekomen kinderen. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]] april 2003)</em></li> <li>11 dec 2004 10:52 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Babi_Jar_Menorah-monument.jpg|Babi_Jar_Menorah-monument.jpg]]" <em>(Babi Jar (Kiëv); Menorah-monument. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]] april 2003)</em></li> <li>11 dec 2004 00:02 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Basiliek.jpg|Basiliek.jpg]]" <em>(Basiliek van Scherpenheuvel - eigen foto ter vervanging van andere, eigen foto)</em></li> <li>10 dec 2004 23:30 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Oudemaasdilsen.jpg|Oudemaasdilsen.jpg]]" <em>(Oude Maas te Dilsen - ter vervanging van eigen foto)</em></li> <li>10 dec 2004 22:44 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:Cie_chromaticity_diagram_wavelength.png|Cie_chromaticity_diagram_wavelength.png]]" <em>(Overgenomen uit de engelse Wikipedia)</em></li> <li>10 dec 2004 21:53 [[Gebruiker:Erikweijers|Erikweijers]] heeft ge-upload: "[[:Afbeelding:Hansteeuwen2.jpg|Hansteeuwen2.jpg]]" <em>(Frans Jansen, met toestemming van Hummelinck Stuurman Theaterbureau)</em></li> <li>10 dec 2004 21:41 [[Gebruiker:Erikweijers|Erikweijers]] heeft ge-upload: "[[:Afbeelding:Hansteeuwen1.jpg|Hansteeuwen1.jpg]]" <em>(Foto: Frans Jansen. Met toestemming van Hummelinck Stuurman Theaterbureau)</em></li> <li>10 dec 2004 19:59 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Randschildpad.JPG|Randschildpad.JPG]]" <em>(eigen bitmap geconverteerd )</em></li> <li>10 dec 2004 18:48 [[Gebruiker:Svdmolen|Svdmolen]] heeft ge-upload: "[[:Afbeelding:L&Vlogo.jpg|L&Vlogo.jpg]]" <em>(L&amp;Vlogo - eigen werk met wikiplaatjes - &#123;&#123;GFDL}})</em></li> <li>10 dec 2004 18:38 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Moissi-als-romeo-1907.jpg|Moissi-als-romeo-1907.jpg]]" <em>(foto uit 1907 - publiek)</em></li> <li>10 dec 2004 18:26 [[Gebruiker:Bartux|Bartux]] heeft ge-upload: "[[:Afbeelding:Proton_raket.jpg|Proton_raket.jpg]]" <em>(Lancering van een Russische Proton raket (foto: NASA). &#123;&#123;PD}} )</em></li> <li>10 dec 2004 17:47 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Soepschildpad08b.jpg|Soepschildpad08b.jpg]]" <em>(Van http&#58;//gimp-savvy.com : Photo Copyright-Free. Originele naam: 0000008b.jpg)</em></li> <li>10 dec 2004 17:44 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Chelydra_line0683.jpg|Chelydra_line0683.jpg]]" <em>(Van http&#58;//gimp-savvy.com : Photo Copyright-Free)</em></li> <li>10 dec 2004 16:52 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Reef2576.jpg|Reef2576.jpg]]" <em>(Van http&#58;//gimp-savvy.com : Photo Copyright-Free))</em></li> <li>10 dec 2004 16:43 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Alligator_snapping_turtle.jpg|Alligator_snapping_turtle.jpg]]" <em>(Uit Wiki Engels, zie (http&#58;//en.wikipedia.org/wiki/Image:Alligator_snapping_turtle.jpg))</em></li> <li>10 dec 2004 14:49 [[Gebruiker:Vandierendonck|Vandierendonck]] heeft ge-upload: "[[:Afbeelding:Music_blonde_on_blonde.jpg|Music_blonde_on_blonde.jpg]]" <em>(Blonde On Blonde Cover Bob Dylan LP)</em></li> <li>10 dec 2004 14:48 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Bonomo.jpg|Bonomo.jpg]]" <em>(afbeelding van voor 1800)</em></li> <li>10 dec 2004 12:47 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bothvdk.jpg|Bothvdk.jpg]]" <em>(chessphoto.com)</em></li> <li>10 dec 2004 12:21 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Spain_coa.png|Spain_coa.png]]" <em>(beter wapenschild spanje (engelse wikipedia))</em></li> <li>10 dec 2004 12:20 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Mercosur.png|Mercosur.png]]" <em>(vlag mercosur (engelse wikipedia))</em></li> <li>10 dec 2004 12:07 [[Gebruiker:Nicklaarakkers|Nicklaarakkers]] heeft ge-upload: "[[:Afbeelding:Koerner.jpg|Koerner.jpg]]" <em>(eigen collectie)</em></li> <li>10 dec 2004 11:41 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Ca_qc.png|Ca_qc.png]]" <em>(betere vlag quebec (engelse wikipedia))</em></li> <li>10 dec 2004 10:58 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:WapenBelgië.png|WapenBelgië.png]]" <em>(betere versie wapenschild belgië (engelse wikipedia))</em></li> <li>10 dec 2004 10:31 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bolok.jpg|Bolok.jpg]]" <em>(fiat convekta)</em></li> <li>10 dec 2004 10:30 [[Gebruiker:Pethan|Pethan]] heeft ge-upload: "[[:Afbeelding:Koolzaad.jpg|Koolzaad.jpg]]" <em>(Koolzaad &#123;&#123;eigenwerk}})</em></li> <li>10 dec 2004 09:12 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Rode_kool.jpg|Rode_kool.jpg]]" <em>(zelfgemaakte foto van Rode kool; eind september)</em></li> <li>10 dec 2004 08:29 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieOost-Vlieland.png|LocatieOost-Vlieland.png]]" <em>(Kaart met de locatie van Oost-Vlieland, gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>10 dec 2004 03:05 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Mattenlegger-Cardium-1983.jpg|Mattenlegger-Cardium-1983.jpg]]" <em>(Mattenlegger Cardium, wat matten op de bodem bij de bouw van de oosterscheldekering legde, 1983. Eigen foto. &#123;&#123;PD}})</em></li> <li>10 dec 2004 02:55 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Hefschip-Ostrea-1983.jpg|Hefschip-Ostrea-1983.jpg]]" <em>(Hefschip Ostrea wat de betonnen pijles naar hun plaats vervoerde bij de bouw van de oosterscheldekering, 1983. Eigen foto. &#123;&#123;PD}})</em></li> <li>10 dec 2004 02:42 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Henny-Huisman-1986-efteling.jpg|Henny-Huisman-1986-efteling.jpg]]" <em>(Henny Huisman maakt TV-opnames in de Efteling, 1986. Eigen foto. &#123;&#123;PD}})</em></li> <li>9 dec 2004 22:53 [[Gebruiker:Quistnix|Quistnix]] heeft ge-upload: "[[:Afbeelding:Bletchleypk.700px.jpg|Bletchleypk.700px.jpg]]" <em>(Kopie van en:wiki: &#91;&#91;:en:User:MykReeve]] (Bletchley Park. Photograph taken by Michael Reeve, 22 September 2002.) &#123;&#123;GFDL}})</em></li> <li>9 dec 2004 22:00 [[Gebruiker:Pethan|Pethan]] heeft ge-upload: "[[:Afbeelding:Rosa_eglanteria_img_3218.jpg|Rosa_eglanteria_img_3218.jpg]]" <em>(Egelantier van en:wikipedia Rosa eglanteria&lt;br&gt;)</em></li> <li>9 dec 2004 21:19 [[Gebruiker:MarcoVD|MarcoVD]] heeft ge-upload: "[[:Afbeelding:Himmler_visits_Dachau_1936.jpg|Himmler_visits_Dachau_1936.jpg]]" <em>(van en: (tekst aldaar: This image has been released into the public domain by the copyright holder, its copyright has expired, or it is ineligible for copyright. This applies worldwide.))</em></li> <li>9 dec 2004 19:51 [[Gebruiker:Gmhogervorst|Gmhogervorst]] heeft ge-upload: "[[:Afbeelding:Alkmaar-stadskantoor.JPG|Alkmaar-stadskantoor.JPG]]" <em>(eigen foto)</em></li> <li>9 dec 2004 19:46 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:U-47s.jpg|U-47s.jpg]]" <em>(afkomstig van en.wiki, tekst aldaar, Source: history.navy.mil, &#123;&#123;PD}})</em></li> <li>9 dec 2004 19:34 [[Gebruiker:Zander|Zander]] heeft ge-upload: "[[:Afbeelding:333px-European_Court_of_Human_Rights.jpg|333px-European_Court_of_Human_Rights.jpg]]" <em>(van engelse wikipedia met vermelding vrij van rechten)</em></li> <li>9 dec 2004 19:18 [[Gebruiker:Pethan|Pethan]] heeft ge-upload: "[[:Afbeelding:Quercus_petraea.jpg|Quercus_petraea.jpg]]" <em>(Wintereik &#91;&#91;Sessile oak]] shoot with acorn - photo &#91;&#91;en:User:MPF]])</em></li> <li>9 dec 2004 18:45 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Zegels.jpg|Zegels.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>9 dec 2004 17:51 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Alnus-cordata.jpg|Alnus-cordata.jpg]]" <em>(Alnus cordata: Overgenomen van de Deense wikipedia.)</em></li> <li>9 dec 2004 17:48 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:ParmaPiacenza.jpg|ParmaPiacenza.jpg]]" <em>(Hertogdom Parma - vrij te gebruiken voor educatieve doeleinden - http&#58;//www.lib.utexas.edu/maps/historical/)</em></li> <li>9 dec 2004 17:41 [[Gebruiker:Zander|Zander]] heeft ge-upload: "[[:Afbeelding:Strasbourg-egmr002.jpg|Strasbourg-egmr002.jpg]]" <em>(vrijgegeven door de maker (Gerhard Hahnekamp))</em></li> <li>9 dec 2004 17:03 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-japonicum.jpg|Acer-japonicum.jpg]]" <em>(Acer japonicum: http&#58;//www.biolib.de/)</em></li> <li>9 dec 2004 14:44 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:SuikerfabriekVeurne.jpg|SuikerfabriekVeurne.jpg]]" <em>(suikerfabriek - eigen foto)</em></li> <li>9 dec 2004 14:32 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Basiliektongeren.jpg|Basiliektongeren.jpg]]" <em>(basiliek tongeren - eigen foto)</em></li> <li>9 dec 2004 12:48 [[Gebruiker:Cicero|Cicero]] heeft ge-upload: "[[:Afbeelding:Quimper_axb01.jpg|Quimper_axb01.jpg]]" <em>(van Duitse wikipedia, de beschrijving daar is: Quimper - Cathédrale St. Corentin Fotograf: Alexander Buschorn (1980) Lizenz: GNU-FDL)</em></li> <li>9 dec 2004 12:34 [[Gebruiker:Secretaris|Secretaris]] heeft ge-upload: "[[:Afbeelding:Addekkers.jpg|Addekkers.jpg]]" <em>(zelf gemaakt)</em></li> <li>9 dec 2004 12:22 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FvAnj.jpg|FvAnj.jpg]]" <em>(Frans van Anjou &#123;&#123;PD}})</em></li> <li>9 dec 2004 11:19 [[Gebruiker:Martijn|Martijn]] heeft ge-upload: "[[:Afbeelding:Omajjaden.png|Omajjaden.png]]" <em>(stamboom kaliefen Omajjaden, eigen maaksel)</em></li> <li>9 dec 2004 11:13 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Nakak.jpg|Nakak.jpg]]" <em>(frits 8)</em></li> <li>9 dec 2004 11:11 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Nakak.jpg|Nakak.jpg]]" <em>(frits 8)</em></li> <li>9 dec 2004 08:47 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Hikaru.jpg|Hikaru.jpg]]" <em>(chessgames.com)</em></li> <li>9 dec 2004 06:51 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:LocatieNijverdal.png|LocatieNijverdal.png]]" <em>(Locatie van Nijverdal, zelf gemaakte kaart op basis van &#91;&#91;:Afbeelding:LocatieHellendoorn.png]] van &#91;&#91;Gebruiker:Mtcv]]. Publiek Domein &#123;&#123;PD}})</em></li> <li>8 dec 2004 22:48 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieSuwald.png|LocatieSuwald.png]]" <em>(Kaart met de locatie van Suwâld (Suawoude), gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>8 dec 2004 22:35 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:KaolinUSGOV.jpg|KaolinUSGOV.jpg]]" <em>(Overgenomen uit engelse Wikipedia. Public Domain foto volgens beschrijving)</em></li> <li>8 dec 2004 22:30 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieBurgum.png|LocatieBurgum.png]]" <em>(Kaart met de locatie van Burgum (Bergum), gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>8 dec 2004 22:02 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Grafmonument_Dostojevski.jpg|Grafmonument_Dostojevski.jpg]]" <em>(Grafmonument Dostojevski te Sint Petersburg. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], augustus 2002.)</em></li> <li>8 dec 2004 21:59 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieEarnewald.png|LocatieEarnewald.png]]" <em>(Kaart met de locatie van Earnewâld (Eernewoude), gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>8 dec 2004 20:39 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:LocatieNoordbroek.png|LocatieNoordbroek.png]]" <em>(Locatie van &#91;&#91;Noordbroek]] Zelf vervaardigd met behulp van &#91;&#91;:Afbeelding:LocatieMenterwolde.png]], gemaakt door &#91;&#91;Gebruiker:Mtcv]] vrijgegeven voor het publiek domein. &#123;&#123;PD}} )</em></li> <li>8 dec 2004 20:29 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Billboard3.jpg|Billboard3.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>8 dec 2004 20:29 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Billboard2.jpg|Billboard2.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>8 dec 2004 20:28 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Billboard1.jpg|Billboard1.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>8 dec 2004 19:41 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ravensbruck_camp_barracks.jpg|Ravensbruck_camp_barracks.jpg]]" <em>(Afbeelding gekopieerd vanaf en.wikipedia.org. De beschrijving daar was: View of the barracks at the Ravensbrück concentration camp. From the United States Holocaust Memorial Museum. &quot;The United States Holocaust Memorial Museum wants to make its resources available and useful to the public. Whenever possible, we provide information on this Web site without restriction and do not require payment or permission for its use by our Web site visitors. We have placed restrictions on the use of some materials to protect the rights and interests of third party copyright owners. Use of these protected materials beyond that allowed by fair use requires written permission from the United States Holocaust Memorial Museum or a third party copyright owner.&quot; &#123;&#123;PD}} &#91;&#91;en:Image:Ravensbruck camp barracks.jpg]])</em></li> <li>8 dec 2004 17:58 [[Gebruiker:Svdmolen|Svdmolen]] heeft ge-upload: "[[:Afbeelding:MPlogo.jpg|MPlogo.jpg]]" <em>(Muziek portaal logo - eigen werk - &#123;&#123;GFDL}})</em></li> <li>8 dec 2004 17:20 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Buigproef.JPG|Buigproef.JPG]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>8 dec 2004 15:30 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Hessen1930.png|Hessen1930.png]]" <em>(Hessen in 1930 - GNU DFL zelf gemaakt door &#91;&#91;de:Benutzer:Störfix]])</em></li> <li>8 dec 2004 14:36 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Koolvlieg_bloemkool.jpg|Koolvlieg_bloemkool.jpg]]" <em>(zelfgemaakte afbeelding van koolvlieg aantasting op bloemkool; eind mei)</em></li> <li>8 dec 2004 13:43 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Zhang.jpg|Zhang.jpg]]" <em>(alper ataman)</em></li> <li>8 dec 2004 13:36 [[Gebruiker:BFunk|BFunk]] heeft ge-upload: "[[:Afbeelding:Escudo_armas_Panama.png|Escudo_armas_Panama.png]]" <em>(kopie van wapen zoals gebruik in zowel en als es versie van wikipedia)</em></li> <li>8 dec 2004 13:14 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Akopian.jpg|Akopian.jpg]]" <em>(fiat Alper Ataman)</em></li> <li>8 dec 2004 13:04 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Highlanders-boers.jpg|Highlanders-boers.jpg]]" <em>(Boer Wars: Highlanders capture Boer artillery. Photo: H.Rau, 1900. Copied from http&#58;//lcweb2.loc.gov &#123;&#123;PD}})</em></li> <li>8 dec 2004 12:47 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Alnus-glutinosa_bladeren.jpg|Alnus-glutinosa_bladeren.jpg]]" <em>(Alnus glutinosa - bladeren: http&#58;//www.kulak.ac.be/nl/KULAKAlgemeen/Natuur/)</em></li> <li>8 dec 2004 12:44 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Alnus-glutinosa_katjes.jpg|Alnus-glutinosa_katjes.jpg]]" <em>(Alnus glutinosa - katjes: http&#58;//www.kulak.ac.be/nl/KULAKAlgemeen/Natuur/)</em></li> <li>8 dec 2004 12:39 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Alnus-glutinosa_vrouwelijkkatje.jpg|Alnus-glutinosa_vrouwelijkkatje.jpg]]" <em>(Alnus glutinosa - vrouwelijk katje: http&#58;//www.kulak.ac.be/nl/KULAKAlgemeen/Natuur/)</em></li> <li>8 dec 2004 11:09 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Inulin.jpg|Inulin.jpg]]" <em>(afbeelding afkomstig van Duitstalige Wikipedia: Inulin - Strukturformel)</em></li> <li>8 dec 2004 08:38 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Ostrya-virginiana.jpg|Ostrya-virginiana.jpg]]" <em>(Ostrya virginiana: Overgenomen van de Engelse wikipedia (Downloaded from : &#91;&#91;1] (http&#58;//plants.usda.gov/cgi_bin/large_image_rpt.cgi?imageID=osvi_002_ahp.tif)] License: free to use for non-commercial purposes. This image is copyrighted and is not licenced under the GFDL. The licence holder allows anyone to use it for any non-commercial purpose, provided that: Please credit the artist, original publication if applicable, and the USDA-NRCS PLANTS Database. The following format is suggested and will be appreciated:Larry Allain @ USDA-NRCS PLANTS Database)</em></li> <li>8 dec 2004 06:58 [[Gebruiker:Soleil|Soleil]] heeft ge-upload: "[[:Afbeelding:Annie_Besant_-_Project_Gutenberg_eText_13715.png|Annie_Besant_-_Project_Gutenberg_eText_13715.png]]" <em>(http&#58;//en.wikipedia.org/wiki/Image:Annie_Besant_-_Project_Gutenberg_eText_13715.png; - Project Gutenberg eText 13715 - http&#58;//www.gutenberg.net/dirs/1/3/7/1/13715/13715-h/13715-h.htm -)</em></li> <li>7 dec 2004 21:46 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Myra_kerk_st_nicolaas.jpg|Myra_kerk_st_nicolaas.jpg]]" <em>(&#123;&#123;GDFL}} en wikii)</em></li> <li>7 dec 2004 21:41 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Dodenstad_van_myra.JPG|Dodenstad_van_myra.JPG]]" <em>(&#123;&#123;GDFL}} de wiki)</em></li> <li>7 dec 2004 21:39 [[Gebruiker:Hstoffels|Hstoffels]] heeft ge-upload: "[[:Afbeelding:Kievskaya.jpg|Kievskaya.jpg]]" <em>(zelf gemaakt)</em></li> <li>7 dec 2004 21:39 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Amphitheater_Myra.jpg|Amphitheater_Myra.jpg]]" <em>(&#123;&#123;GDFL}} de wiki)</em></li> <li>7 dec 2004 21:37 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:Graf_st_Nikolaas.jpg|Graf_st_Nikolaas.jpg]]" <em>(&#123;&#123;GDFL}} de wiki)</em></li> <li>7 dec 2004 20:50 [[Gebruiker:Drdefcom|Drdefcom]] heeft ge-upload: "[[:Afbeelding:Enigma,stepping.jpg|Enigma,stepping.jpg]]" <em>(Copyright Tom Perera, alle rechten voorbehouden)</em></li> <li>7 dec 2004 20:50 [[Gebruiker:Drdefcom|Drdefcom]] heeft ge-upload: "[[:Afbeelding:Enigma,rotors.jpg|Enigma,rotors.jpg]]" <em>(Copyright Tom Perera, alle rechten voorbehouden)</em></li> <li>7 dec 2004 20:49 [[Gebruiker:Drdefcom|Drdefcom]] heeft ge-upload: "[[:Afbeelding:Enigma,rotor,left.jpg|Enigma,rotor,left.jpg]]" <em>(Copyright Tom Perera, alle rechten voorbehouden)</em></li> <li>7 dec 2004 20:48 [[Gebruiker:Drdefcom|Drdefcom]] heeft ge-upload: "[[:Afbeelding:Enigma,reflector.jpg|Enigma,reflector.jpg]]" <em>(Copyright Tom Perera, alle rechten voorbehouden)</em></li> <li>7 dec 2004 20:48 [[Gebruiker:Drdefcom|Drdefcom]] heeft ge-upload: "[[:Afbeelding:Enigma,plugboard.jpg|Enigma,plugboard.jpg]]" <em>(Copyright Tom Perera, alle rechten voorbehouden)</em></li> <li>7 dec 2004 20:47 [[Gebruiker:Drdefcom|Drdefcom]] heeft ge-upload: "[[:Afbeelding:Enigma,overview.jpg|Enigma,overview.jpg]]" <em>(Copyright Tom Perera, alle rechten voorbehouden)</em></li> <li>7 dec 2004 20:35 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:Donghwasa_2.JPG|Donghwasa_2.JPG]]" <em>(Eigen foto, geen copyright)</em></li> <li>7 dec 2004 20:34 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:Donghwasa_1.JPG|Donghwasa_1.JPG]]" <em>(Eigen foto, geen copyright)</em></li> <li>7 dec 2004 20:00 [[Gebruiker:Drdefcom|Drdefcom]] heeft ge-upload: "[[:Afbeelding:Enigma,wiringdiagram.png|Enigma,wiringdiagram.png]]" <em>(Stroomdiagram van de Enigma codeermachine)</em></li> <li>7 dec 2004 19:56 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-saccharinum_bast.jpg|Acer-saccharinum_bast.jpg]]" <em>(Overgenomen van de Engelse wikipedia (Bark of the Silver Maple Photograph 2003-09-14 Karl DeBisschop Quincy, MA (USA)))</em></li> <li>7 dec 2004 19:55 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-saccharinum_bladeren.jpg|Acer-saccharinum_bladeren.jpg]]" <em>(Overgenomen van de Engelse wikipedia (Bark of the Silver Maple Photograph 2003-09-14 Karl DeBisschop Quincy, MA (USA)))</em></li> <li>7 dec 2004 19:41 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Denisderougemont2.jpg|Denisderougemont2.jpg]]" <em>(denis de rougemont - door mij bewerkte foto)</em></li> <li>7 dec 2004 19:41 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Denisderougemont1.jpg|Denisderougemont1.jpg]]" <em>(denis de rougemont - door mij bewerkte foto)</em></li> <li>7 dec 2004 18:40 [[Gebruiker:Pethan|Pethan]] heeft ge-upload: "[[:Afbeelding:Anax_imperator.jpg|Anax_imperator.jpg]]" <em>(Anax imperator Grote keizerlibel &#91;http&#58;//www.kulak.ac.be/nl/KULAKAlgemeen/Natuur])</em></li> <li>7 dec 2004 18:39 [[Gebruiker:Pethan|Pethan]] heeft ge-upload: "[[:Afbeelding:09-Lestes_viridis-houtpantserjuffer2-D7.jpg|09-Lestes_viridis-houtpantserjuffer2-D7.jpg]]" <em>(Lestes viridis houtpantserjuffer van &#91;http&#58;//www.kulak.ac.be/nl/KULAKAlgemeen/Natuur])</em></li> <li>7 dec 2004 18:27 [[Gebruiker:Pethan|Pethan]] heeft ge-upload: "[[:Afbeelding:Kulak_azuurwaterjuffer.jpg|Kulak_azuurwaterjuffer.jpg]]" <em>(Kulak Azuurwaterjuffer van &#91;http&#58;//www.kulak.ac.be/nl/KULAKAlgemeen/Natuur])</em></li> <li>7 dec 2004 16:59 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-rubrum_bloemen.jpg|Acer-rubrum_bloemen.jpg]]" <em>(Overgenomen van de Engelse wikipedia: &#123;&#123;GFDL}})</em></li> <li>7 dec 2004 16:58 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-rubrum_bast.jpg|Acer-rubrum_bast.jpg]]" <em>(Overgenomen van de Engelse wikipedia: &#123;&#123;GFDL}})</em></li> <li>7 dec 2004 16:47 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-rubrum_blad.JPG|Acer-rubrum_blad.JPG]]" <em>(Overgenomen van de Engelse wikipedia: &#123;&#123;GFDL}})</em></li> <li>7 dec 2004 16:30 [[Gebruiker:Bass|Bass]] heeft ge-upload: "[[:Afbeelding:Sarahbrightman.jpg|Sarahbrightman.jpg]]" <em>(Dit is een afbeelding van http:/www.sarah-brightman.com. Deze afbeelding mag gebruikt worden op websites, onder voorwaarde dat er een link onder staat naar de website www.sarah-brightman.com.)</em></li> <li>7 dec 2004 16:16 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieBartlehiem.png|LocatieBartlehiem.png]]" <em>(Kaart met de locatie van Bartlehiem, gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>7 dec 2004 15:32 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:KSalzburg.jpg|KSalzburg.jpg]]" <em>(Keurvorstendom Salzburg - vrij te gebruiken voor educatieve doeleinden - http&#58;//www.lib.utexas.edu/usage_statement.html)</em></li> <li>7 dec 2004 15:18 [[Gebruiker:JePe|JePe]] heeft ge-upload: "[[:Afbeelding:Subwoofer_downfiring.jpg|Subwoofer_downfiring.jpg]]" <em>(Eigen foto van subwoofer. &#123;&#123;eigenwerk}})</em></li> <li>7 dec 2004 15:13 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Wife.jpg|Wife.jpg]]" <em>(fiat Jos Heesen)</em></li> <li>7 dec 2004 14:58 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:GrhWb.jpg|GrhWb.jpg]]" <em>(Groothertogdom Würzburg - vrij te gebruiken voor educatieve doeleinden - http&#58;//www.lib.utexas.edu/usage_statement.html)</em></li> <li>7 dec 2004 14:27 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Spoelk.jpg|Spoelk.jpg]]" <em>(toestemming jan roorda)</em></li> <li>7 dec 2004 13:58 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Tiviakk.jpg|Tiviakk.jpg]]" <em>(fiat convekta)</em></li> <li>7 dec 2004 13:41 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:De-Munt-1900.jpg|De-Munt-1900.jpg]]" <em>(De Munt in Amsterdam tussen 1890 and 1900. Van &quot;The Library of Congress&quot;, http&#58;//hdl.loc.gov/loc.pnp/ppmsc.05763, no know usage restriction on this publication. &#123;&#123;PD}}))</em></li> <li>7 dec 2004 13:35 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-retouch-2.jpg|Example-retouch-2.jpg]]" <em>(Voorbeeld van retoucheren. Afbeelding is een detail van &#91;&#91;:Afbeelding:Paleis-op-de-dam-1900.jpg]], wat een public domain foto is van het Library of Congress http&#58;//hdl.loc.gov/loc.pnp/cph.3g02127. &#123;&#123;PD}})</em></li> <li>7 dec 2004 13:35 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-retouch-1.jpg|Example-retouch-1.jpg]]" <em>(Voorbeeld van retoucheren. Afbeelding is een detail van &#91;&#91;:Afbeelding:Paleis-op-de-dam-1900.jpg]], wat een public domain foto is van het Library of Congress http&#58;//hdl.loc.gov/loc.pnp/cph.3g02127. &#123;&#123;PD}})</em></li> <li>7 dec 2004 13:28 [[Gebruiker:Tr606|Tr606]] heeft ge-upload: "[[:Afbeelding:Raymond_goethals.jpg|Raymond_goethals.jpg]]" <em>(Raymond Goethals - bron: Engelse wiki)</em></li> <li>7 dec 2004 12:45 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Amsterdamse-Poort-1900.jpg|Amsterdamse-Poort-1900.jpg]]" <em>(Amsterdamse Poort te Haarlem tussen 1890 and 1900. Van &quot;The Library of Congress&quot;, http&#58;//hdl.loc.gov/loc.pnp/cph.3g02124 , no know usage restriction on this publication. &#123;&#123;PD}}))</em></li> <li>7 dec 2004 12:30 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Paleis-op-de-dam-1900.jpg|Paleis-op-de-dam-1900.jpg]]" <em>(Paleis op de Dam tussen 1890 and 1900. Van &quot;The Library of Congress&quot;, http&#58;//hdl.loc.gov/loc.pnp/cph.3g02127, no know usage restriction on this publication. &#123;&#123;PD}})</em></li> <li>7 dec 2004 11:24 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Centraal-Station-1900.jpg|Centraal-Station-1900.jpg]]" <em>(Het centraal station tussen 1890 and 1900. Van &quot;The Library of Congress&quot;, http&#58;//hdl.loc.gov/loc.pnp/cph.3g02120, no know usage restriction on this publication. &#123;&#123;PD}})</em></li> <li>7 dec 2004 11:13 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Manatee_with_calf.PD.jpg|Manatee_with_calf.PD.jpg]]" <em>(Afbeelding van Engelstalige Wikipedia &#123;&#123;PD}})</em></li> <li>7 dec 2004 10:37 [[Gebruiker:MarcoVD|MarcoVD]] heeft ge-upload: "[[:Afbeelding:Kerstboom.jpg|Kerstboom.jpg]]" <em>(van en: (tekst aldaar: Image and tree by the uploader))</em></li> <li>7 dec 2004 09:29 [[Gebruiker:MarcoVD|MarcoVD]] heeft ge-upload: "[[:Afbeelding:Keith_Richards.jpg|Keith_Richards.jpg]]" <em>(van en: (tekst aldaar: Merseybeat photo out of copyright))</em></li> <li>6 dec 2004 22:53 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:JohannesII.jpg|JohannesII.jpg]]" <em>(Johannes II van Liechtenstein door John Quincy Adams (1875 - 1933; een Weens portretschilder, niet de president van de VS) - langer dan 70 jaar dood, dus publiek domein &#123;&#123;PD}})</em></li> <li>6 dec 2004 22:52 [[Gebruiker:Quistnix|Quistnix]] heeft ge-upload: "[[:Afbeelding:Chocoladeletter_A.jpg|Chocoladeletter_A.jpg]]" <em>(Chocoladeletter A &#123;&#123;eigenwerk}})</em></li> <li>6 dec 2004 22:27 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-capillipes_stam.jpg|Acer-capillipes_stam.jpg]]" <em>(Overgenomen van de Duitse wikipedia: &#123;&#123;GFDL}})</em></li> <li>6 dec 2004 22:26 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-capillipes_blad.jpg|Acer-capillipes_blad.jpg]]" <em>(Overgenomen van de Duitse wikipedia: &#123;&#123;GFDL}})</em></li> <li>6 dec 2004 22:25 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-capillipes.jpg|Acer-capillipes.jpg]]" <em>(Overgenomen van de Duitse wikipedia: &#123;&#123;Bild-GFDL}})</em></li> <li>6 dec 2004 22:24 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-enlarge-3-lineair.png|Example-enlarge-3-lineair.png]]" <em>(Voorbeeld met vergroten, eigen werk. &#123;&#123;PD}})</em></li> <li>6 dec 2004 22:24 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-enlarge-4-cubic.png|Example-enlarge-4-cubic.png]]" <em>(Voorbeeld met vergroten, eigen werk. &#123;&#123;PD}})</em></li> <li>6 dec 2004 22:24 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-enlarge-2-none.png|Example-enlarge-2-none.png]]" <em>(Voorbeeld met vergroten, eigen werk. &#123;&#123;PD}})</em></li> <li>6 dec 2004 22:24 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-enlarge-1-original.png|Example-enlarge-1-original.png]]" <em>(Voorbeeld met vergroten, eigen werk. &#123;&#123;PD}})</em></li> <li>6 dec 2004 21:49 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Speculaas.jpg|Speculaas.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>6 dec 2004 21:21 [[Gebruiker:Quistnix|Quistnix]] heeft ge-upload: "[[:Afbeelding:Nummerplaat_Aruba.jpg|Nummerplaat_Aruba.jpg]]" <em>(Nummerplaat uit Aruba - eigen werk &#123;&#123;GFDL}})</em></li> <li>6 dec 2004 21:15 [[Gebruiker:Cicero|Cicero]] heeft ge-upload: "[[:Afbeelding:Sainte_chapelle_int.450px.jpg|Sainte_chapelle_int.450px.jpg]]" <em>(van Engelse wikipedia, de omschrijving daar was: Sainte Chapelle interior, Paris. Photograph taken by Michael Reeve, 30 January 2004., &#123;&#123;GFDL}})</em></li> <li>6 dec 2004 21:00 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Creditcard.jpg|Creditcard.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>6 dec 2004 20:43 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:Kaart_busan.png|Kaart_busan.png]]" <em>(Overgenomen uit de duitse Wikipedia, 18:45, 6. Okt 2003 . . Diruwiki (3258 Byte) (Karte von Busan, Südekorea, selbstgezeichnet))</em></li> <li>6 dec 2004 19:04 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-vector-2.png|Example-vector-2.png]]" <em>(zelfde afbeelding, nu wat kleiner, en achtergrond is nu helemaal wit.)</em></li> <li>6 dec 2004 18:57 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-vector-2.png|Example-vector-2.png]]" <em>(zelfde afbeelding, nu wat kleiner.)</em></li> <li>6 dec 2004 18:57 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-vector-1.png|Example-vector-1.png]]" <em>(zelfde afbeelding, nu wat kleiner.)</em></li> <li>6 dec 2004 18:44 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Karte_oesterreich_wien.png|Karte_oesterreich_wien.png]]" <em>(kaart wenen in oostenrijk (engelse wikipedia))</em></li> <li>6 dec 2004 18:39 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-denoise-2.jpg|Example-denoise-2.jpg]]" <em>(Voorbeeld ruis verminderen. Bewerkt detail van GFDL foto (&#91;&#91;:Afbeelding:Kanarie.jpg]] 31 jan 2003) van &#91;&#91;Gebruiker:Jcwf]]. &#123;&#123;GFDL}})</em></li> <li>6 dec 2004 18:39 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-denoise-1.jpg|Example-denoise-1.jpg]]" <em>(Voorbeeld ruis verminderen. Bewerkt detail van GFDL foto (&#91;&#91;:Afbeelding:Kanarie.jpg]] 31 jan 2003) van &#91;&#91;Gebruiker:Jcwf]]. &#123;&#123;GFDL}})</em></li> <li>6 dec 2004 18:33 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Baldur_von_Schirach.jpg|Baldur_von_Schirach.jpg]]" <em>(baldur von schirach (engelse wikipedia))</em></li> <li>6 dec 2004 18:10 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Narodni_dom_triest.jpg|Narodni_dom_triest.jpg]]" <em>(narodni dom 1920 triest - rechten verjaard)</em></li> <li>6 dec 2004 18:10 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Sint-MaartenKortrijk.jpg|Sint-MaartenKortrijk.jpg]]" <em>(Sint-Maartenskerk - eigen foto)</em></li> <li>6 dec 2004 17:50 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-sharpen-2.jpg|Example-sharpen-2.jpg]]" <em>(Voorbeeld scherptefilter. Eigen foto. &#123;&#123;PD}})</em></li> <li>6 dec 2004 17:50 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Amphisbaenia_1.jpg|Amphisbaenia_1.jpg]]" <em>(Van Wiki Engels, zie (http&#58;//en.wikipedia.org/wiki/Image:Amphisbaenia_1.JPG))</em></li> <li>6 dec 2004 17:38 [[Gebruiker:JePe|JePe]] heeft ge-upload: "[[:Afbeelding:De_Slufter_Texel.jpg|De_Slufter_Texel.jpg]]" <em>(Eigen foto, De Slufter op Texel)</em></li> <li>6 dec 2004 17:35 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Zone_triest_1947-1954.jpg|Zone_triest_1947-1954.jpg]]" <em>(zelf gemaakt)</em></li> <li>6 dec 2004 16:11 [[Gebruiker:JePe|JePe]] heeft ge-upload: "[[:Afbeelding:Doldersummer_Veld_11-2004.jpg|Doldersummer_Veld_11-2004.jpg]]" <em>(Eigen foto van Doldersummerveld (nov 2004) vanaf de uitzichttoren, onderdeel van Nationaalpark Drents Friese Wold. In het midden is de zendmast van Smilde te herkennen.)</em></li> <li>6 dec 2004 15:59 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Potato_beetle_0482.jpg|Potato_beetle_0482.jpg]]" <em>(scherper gemaakt)</em></li> <li>6 dec 2004 12:12 [[Gebruiker:Welleman|Welleman]] heeft ge-upload: "[[:Afbeelding:Tunnel.jpg|Tunnel.jpg]]" <em>(aanbouw van een tunnel, door Peter Welleman)</em></li> <li>6 dec 2004 11:15 [[Gebruiker:Welleman|Welleman]] heeft ge-upload: "[[:Afbeelding:Steamer.jpg|Steamer.jpg]]" <em>(Opengewerkte tekening, door Peter Welleman)</em></li> <li>6 dec 2004 11:14 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Colorado_potato_beetle.jpg|Colorado_potato_beetle.jpg]]" <em>(Afbeelding afkomstig van Engelstalige Wikipedia: A &#91;&#91;Colorado potato beetle]]. USDA photograph by Scott Bauer. Image Number K4978-5.)</em></li> <li>6 dec 2004 11:08 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Potato_beetle_0482.jpg|Potato_beetle_0482.jpg]]" <em>(afbeelding afkomstig van Engelstalige Wikipedia; Colorado potato beetle, larval form)</em></li> <li>6 dec 2004 11:05 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Plumed.basilisk.750pix.jpg|Plumed.basilisk.750pix.jpg]]" <em>(Uit Wiki Engels, zie http&#58;//upload.wikimedia.org/wikipedia/en/9/94/Plumed.basilisk.750pix.jpg)</em></li> <li>6 dec 2004 00:49 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-artistic-1.jpg|Example-artistic-1.jpg]]" <em>(Voorbeeld van artistieke bewerking. Verkleinde foto van een eigen foto van Wouter Hagens &#91;&#91;:Afbeelding:Appelbloesem.jpg]].)</em></li> <li>6 dec 2004 00:48 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-artistic-2.jpg|Example-artistic-2.jpg]]" <em>(Voorbeeld van artistieke bewerking. Verkleinde foto van een eigen foto van Wouter Hagens &#91;&#91;:Afbeelding:Appelbloesem.jpg]].)</em></li> <li>6 dec 2004 00:12 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-vector-2.png|Example-vector-2.png]]" <em>(Voorbeeld bitmap naar vector omzetting, gemaakt met opensource programma Inkscape. Bewerkt detail van &#91;&#91;:Afbeelding:Nederlands-Verkeersbord-J20.png]]. &#123;&#123;GFDL}})</em></li> <li>6 dec 2004 00:12 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-vector-1.png|Example-vector-1.png]]" <em>(Voorbeeld bitmap naar vector omzetting, gemaakt met opensource programma Inkscape. Bewerkt detail van &#91;&#91;:Afbeelding:Nederlands-Verkeersbord-J20.png]]. &#123;&#123;GFDL}})</em></li> <li>5 dec 2004 23:04 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-curves-2.jpg|Example-curves-2.jpg]]" <em>(Verkleint en bewerkt detail van afbeelding Pop2.jpg, 4 dec 2004 23:26 eigen werk van Michiel1972 &#123;&#123;GFDL}})</em></li> <li>5 dec 2004 23:04 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Example-curves-1.jpg|Example-curves-1.jpg]]" <em>(Verkleint en bewerkt detail van afbeelding Pop2.jpg, 4 dec 2004 23:26 eigen werk van Michiel1972 &#123;&#123;GFDL}})</em></li> <li>5 dec 2004 22:42 [[Gebruiker:Avanbijleveld|Avanbijleveld]] heeft ge-upload: "[[:Afbeelding:RuslandKoersk.png|RuslandKoersk.png]]" <em>(Ligging oblast Koersk (en-wiki, GNU-lic))</em></li> <li>5 dec 2004 21:50 [[Gebruiker:JePe|JePe]] heeft ge-upload: "[[:Afbeelding:Texel_Airport.jpg|Texel_Airport.jpg]]" <em>(Eigen foto (vliegveld op Texel))</em></li> <li>5 dec 2004 21:48 [[Gebruiker:JePe|JePe]] heeft ge-upload: "[[:Afbeelding:Veerboot_Schulpengat.jpg|Veerboot_Schulpengat.jpg]]" <em>(Eigen foto (veerboot naar Texel))</em></li> <li>5 dec 2004 21:14 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Kabelspoorlugano.jpg|Kabelspoorlugano.jpg]]" <em>(Eigen foto, GNU/FDL)</em></li> <li>5 dec 2004 21:14 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Rangeerlocomotief.jpg|Rangeerlocomotief.jpg]]" <em>(Rangeerlocomotief van de NS. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], 9 oktober 2004 (open dag SSN))</em></li> <li>5 dec 2004 21:13 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Hagedis_tam.jpg|Hagedis_tam.jpg]]" <em>(Eigen foto van een wateragame op mijn bureau. )</em></li> <li>5 dec 2004 21:13 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Kabelspoorlugano.jpg|Kabelspoorlugano.jpg]]" <em>(Test, sorry. Gaat iets mis met uploaden. Goede foto komt zo weer terug.)</em></li> <li>5 dec 2004 21:11 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Kabelspoorlugano.jpg|Kabelspoorlugano.jpg]]" <em>(Eigen foto, GNU/FDL)</em></li> <li>5 dec 2004 21:10 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Kabelspoorlugano.jpg|Kabelspoorlugano.jpg]]" <em>(Eigen foto, GNU/FDL (nieuwe versie foto, betere kleurbalans))</em></li> <li>5 dec 2004 20:33 [[Gebruiker:Quistnix|Quistnix]] heeft ge-upload: "[[:Afbeelding:Kabelbaan_bad_Ems.jpg|Kabelbaan_bad_Ems.jpg]]" <em>(Kabelbaan in Bad Ems (Dld) - eigen foto, ca. 1985 &#123;&#123;GFDL}})</em></li> <li>5 dec 2004 19:55 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Muisarm.jpg|Muisarm.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>5 dec 2004 19:18 [[Gebruiker:JePe|JePe]] heeft ge-upload: "[[:Afbeelding:Bergen-FloiBanen.jpg|Bergen-FloiBanen.jpg]]" <em>(Eigen foto, gemaakt tijdens vakantie in Noorwegen)</em></li> <li>5 dec 2004 19:17 [[Gebruiker:JePe|JePe]] heeft ge-upload: "[[:Afbeelding:Bergen-Noorwegen-Haven.jpg|Bergen-Noorwegen-Haven.jpg]]" <em>(Eigen foto, gemaakt tijdens vakantie in Noorwegen)</em></li> <li>5 dec 2004 19:16 [[Gebruiker:JePe|JePe]] heeft ge-upload: "[[:Afbeelding:Odda-Hardangerfjord.jpg|Odda-Hardangerfjord.jpg]]" <em>(Eigen foto, gemaakt tijdens vakantie in Noorwegen)</em></li> <li>5 dec 2004 19:05 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Mehmetali.gif|Mehmetali.gif]]" <em>(mehmet ali (engelse wikipedia))</em></li> <li>5 dec 2004 18:59 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Jacobsen's_organ.JPG|Jacobsen's_organ.JPG]]" <em>(Zelfgemaakte geconverteerde bitmap.)</em></li> <li>5 dec 2004 18:47 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:AswanHighDam_Egypt.jpg|AswanHighDam_Egypt.jpg]]" <em>(hoge aswandam (engelse wikipedia))</em></li> <li>5 dec 2004 18:47 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:AswanLowDam_Egypt.jpg|AswanLowDam_Egypt.jpg]]" <em>(lage aswandam (engelse wikipedia))</em></li> <li>5 dec 2004 18:34 [[Gebruiker:Rass|Rass]] heeft ge-upload: "[[:Afbeelding:Bitchfuckerbouyeri.jpg|Bitchfuckerbouyeri.jpg]]" <em>(Mohammed Bouyeri, zonder &quot;balkje&quot;)</em></li> <li>5 dec 2004 18:32 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Gebitsstatus.png|Gebitsstatus.png]]" <em>(ter vervanging van &quot;Gebitsstatus.BMP&quot;, nieuwe bestand is 70 maal kleiner. eigen werk van Bernard bill5)</em></li> <li>5 dec 2004 18:19 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:EgyptAbuSimbel.jpg|EgyptAbuSimbel.jpg]]" <em>(abu simbel (engelse wikipedia))</em></li> <li>5 dec 2004 17:12 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Jean-philippe_rameau.jpg|Jean-philippe_rameau.jpg]]" <em>(van fr:, publiek domein)</em></li> <li>5 dec 2004 16:41 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Mauereidechse.jpg|Mauereidechse.jpg]]" <em>(Uit Duitse Wiki, zie http&#58;//de.wikipedia.org/wiki/Bild:Mauereidechse.jpg)</em></li> <li>5 dec 2004 16:40 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Mauereidechse_Leutesdorf.jpg|Mauereidechse_Leutesdorf.jpg]]" <em>(Uit Duitse Wiki, zie http&#58;//de.wikipedia.org/wiki/Bild:Mauereidechse_Leutesdorf.jpg)</em></li> <li>5 dec 2004 16:29 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Iguana_iguana.jpg|Iguana_iguana.jpg]]" <em>(Uit de Duitse Wiki, zie http&#58;//de.wikipedia.org/wiki/Bild:Iguana_iguana.jpg)</em></li> <li>5 dec 2004 16:19 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Zauneidechse3.jpg|Zauneidechse3.jpg]]" <em>(Van Duitse Wiki, zie http&#58;//de.wikipedia.org/wiki/Bild:Zauneidechse3.jpg)</em></li> <li>5 dec 2004 16:17 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Eidechse1.jpg|Eidechse1.jpg]]" <em>(Uit Duitse Wiki, zie http&#58;//de.wikipedia.org/wiki/Bild:Eidechse1.jpg)</em></li> <li>5 dec 2004 16:11 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Lacerta_viridis.jpg|Lacerta_viridis.jpg]]" <em>(Uit Duitse Wiki, zie http&#58;//de.wikipedia.org/wiki/Bild:Lacerta_viridis.jpg)</em></li> <li>5 dec 2004 15:36 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Marie-Antoinette.jpg|Marie-Antoinette.jpg]]" <em>(Van Engelse pagina: PD)</em></li> <li>5 dec 2004 15:24 [[Gebruiker:Gamekeeper|Gamekeeper]] heeft ge-upload: "[[:Afbeelding:Goalkeeper.jpg|Goalkeeper.jpg]]" <em>(Publiek domein)</em></li> <li>5 dec 2004 15:12 [[Gebruiker:J.W.Richter|J.W.Richter]] heeft ge-upload: "[[:Afbeelding:Barnsteenroutes.gif|Barnsteenroutes.gif]]" <em>(Barnsteenroutes)</em></li> <li>5 dec 2004 15:04 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieJorwert.png|LocatieJorwert.png]]" <em>(Kaart met de locatie van Jorwert (Jorwerd), gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>5 dec 2004 14:50 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:200px-Viviparous_lizard_female_2004.jpg|200px-Viviparous_lizard_female_2004.jpg]]" <em>(Van wiki Engels, zie http&#58;//en.wikipedia.org/wiki/Image:Viviparous_lizard_female_2004.jpg)</em></li> <li>5 dec 2004 13:14 [[Gebruiker:Quistnix|Quistnix]] heeft ge-upload: "[[:Afbeelding:BlasonBOURGOGNE.JPG|BlasonBOURGOGNE.JPG]]" <em>(wapen van Bourgogne - van fr:wikipedia - Dessiné par --&#91;&#91;:fr:Utilisateur:MG&#124;&amp;#61472;-M-G***]] &#123;&#123;GFDL}})</em></li> <li>5 dec 2004 12:37 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Lake_Nasser_Vista.jpg|Lake_Nasser_Vista.jpg]]" <em>(nassermeer uitzicht (engelse wikipedia))</em></li> <li>5 dec 2004 11:35 [[Gebruiker:Bartux|Bartux]] heeft ge-upload: "[[:Afbeelding:Neptune.jpg|Neptune.jpg]]" <em>(Voyager 2 foto Neptunus - augustus 1989 - bron: http&#58;//photojournal.jpl.nasa.gov/catalog/PIA00046 &#123;&#123;PD}})</em></li> <li>5 dec 2004 06:30 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:Karte_daegu.png|Karte_daegu.png]]" <em>(overgenomen uit Duitse Wikipedia, 18:46, 6. Okt 2003 . . Diruwiki (3264 Byte) (Karte von Daegu, Südkorea, selbstgezeichnet))</em></li> <li>5 dec 2004 05:59 [[Gebruiker:Londenp|Londenp]] heeft ge-upload: "[[:Afbeelding:Papiermachine.gif|Papiermachine.gif]]" <em>(Copyright Crown Van Gelder N.V. Met permissie vrijgegeven voor gebruik in Wikipedia op 29.11.2004.)</em></li> <li>5 dec 2004 01:23 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Doolhof.png|Doolhof.png]]" <em>(Voorbeeld van een doolhof. Eigenwerk. &#123;&#123;PD}})</em></li> <li>4 dec 2004 22:52 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Russische_Stoomlocomotief.jpg|Russische_Stoomlocomotief.jpg]]" <em>(Russische stoomlocomotief, Treinmuseum Sint Petersburg. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], augustus 2002)</em></li> <li>4 dec 2004 22:26 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Pop2.jpg|Pop2.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>4 dec 2004 21:41 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Commodore64.jpg|Commodore64.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>4 dec 2004 21:26 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Camping.jpg|Camping.jpg]]" <em>(van beelddonateur &#91;&#91;Wikipedia:Peter Polling]])</em></li> <li>4 dec 2004 21:14 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Loch.jpg|Loch.jpg]]" <em>(van beelddonateur &#91;&#91;Wikipedia:Peter Polling]])</em></li> <li>4 dec 2004 21:12 [[Gebruiker:Welleman|Welleman]] heeft ge-upload: "[[:Afbeelding:LNGtanker.jpg|LNGtanker.jpg]]" <em>(Opgewerkte tekening van LNG tanker, zelf getekend)</em></li> <li>4 dec 2004 20:58 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Koud.jpg|Koud.jpg]]" <em>(foto door Victor Bos http&#58;//nl.wikipedia.org/wiki/Wikipedia:Victor_Bos)</em></li> <li>4 dec 2004 20:54 [[Gebruiker:Welleman|Welleman]] heeft ge-upload: "[[:Afbeelding:Hybrid.jpg|Hybrid.jpg]]" <em>(Opengewerkte tekening van hybride motor, zelf getekend)</em></li> <li>4 dec 2004 20:53 [[Gebruiker:Welleman|Welleman]] heeft ge-upload: "[[:Afbeelding:Prius.jpg|Prius.jpg]]" <em>(Opengewerkte tekening van de Toyota Prius, zelf getekend)</em></li> <li>4 dec 2004 20:29 [[Gebruiker:Goodies|Goodies]] heeft ge-upload: "[[:Afbeelding:Fibula2.jpg|Fibula2.jpg]]" <em>(foto fibula uit webshop historicalshop.com)</em></li> <li>4 dec 2004 20:29 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Ferdinand_III.jpg|Ferdinand_III.jpg]]" <em>(ferdinand III van het heilige roomse rijk (engelse wikipedia))</em></li> <li>4 dec 2004 20:21 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Sluisbelfort.jpg|Sluisbelfort.jpg]]" <em>(gemeente Sluis)</em></li> <li>4 dec 2004 20:18 [[Gebruiker:Welleman|Welleman]] heeft ge-upload: "[[:Afbeelding:Maglev.jpg|Maglev.jpg]]" <em>(Opengewerkte tekening van een zweeftrein)</em></li> <li>4 dec 2004 20:15 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Vandale.jpg|Vandale.jpg]]" <em>(Johan Hendrik van Dale)</em></li> <li>4 dec 2004 20:12 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Francis_I_Holy_Roman_Emperor.jpg|Francis_I_Holy_Roman_Emperor.jpg]]" <em>(frans i van het heilige roomse rijk (engelse wikipedia))</em></li> <li>4 dec 2004 19:56 [[Gebruiker:WeeJeeVee|WeeJeeVee]] heeft ge-upload: "[[:Afbeelding:Hand_1_1.jpg|Hand_1_1.jpg]]" <em>(zelf gemaakt)</em></li> <li>4 dec 2004 19:28 [[Gebruiker:Dick Bos|Dick Bos]] heeft ge-upload: "[[:Afbeelding:MK_banner.gif|MK_banner.gif]]" <em>(logo Miss Koop vrij te verspreiden)</em></li> <li>4 dec 2004 19:09 [[Gebruiker:Dick Bos|Dick Bos]] heeft ge-upload: "[[:Afbeelding:Banner-koop-niets.png|Banner-koop-niets.png]]" <em>(banner Niet-Winkeldag vrij om te verspreiden)</em></li> <li>4 dec 2004 19:05 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:Huns.png|Huns.png]]" <em>(Kaart met de locatie van Húns (Huins), gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>4 dec 2004 18:52 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Charles_VI.jpg|Charles_VI.jpg]]" <em>(karel vi van het heilige roomse rijk (engelse wikipedia))</em></li> <li>4 dec 2004 18:46 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Warschau.jpg|Warschau.jpg]]" <em>(Eigen foto, GNU/FDL)</em></li> <li>4 dec 2004 18:46 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:WaalbrugNijmegen.jpg|WaalbrugNijmegen.jpg]]" <em>(Eigen foto, GNU/FDL)</em></li> <li>4 dec 2004 18:46 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:TramBern.jpg|TramBern.jpg]]" <em>(Eigen foto, GNU/FDL)</em></li> <li>4 dec 2004 18:45 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Nijmegen.jpg|Nijmegen.jpg]]" <em>(Eigen foto, GNU/FDL)</em></li> <li>4 dec 2004 18:45 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Kabelspoorlugano.jpg|Kabelspoorlugano.jpg]]" <em>(Eigen foto, GNU/FDL)</em></li> <li>4 dec 2004 18:45 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Eindhovenskyline.jpg|Eindhovenskyline.jpg]]" <em>(Eigen foto, GNU/FDL)</em></li> <li>4 dec 2004 18:44 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:BramDeGroot.jpg|BramDeGroot.jpg]]" <em>(Eigen foto, GNU/FDL)</em></li> <li>4 dec 2004 18:43 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:BBAbus.jpg|BBAbus.jpg]]" <em>(Eigen foto, GNU/FDL)</em></li> <li>4 dec 2004 18:41 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:MariaTheresa.jpg|MariaTheresa.jpg]]" <em>(maria theresia (engelse wikipedia))</em></li> <li>4 dec 2004 18:34 [[Gebruiker:Dick Bos|Dick Bos]] heeft ge-upload: "[[:Afbeelding:NietWinkelDag2004Afoort.jpeg|NietWinkelDag2004Afoort.jpeg]]" <em>(Amersfoort Niet Winkeldag 2004 afgestaan door Maranke)</em></li> <li>4 dec 2004 18:31 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Zeelandbrug-waiting-1986.jpg|Zeelandbrug-waiting-1986.jpg]]" <em>(Zeelandbrug, wachten op de brug, 1986, eigen foto. &#123;&#123;PD}})</em></li> <li>4 dec 2004 17:34 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Voelkerschlacht.jpg|Voelkerschlacht.jpg]]" <em>(monument leipzig (engelse wikipedia))</em></li> <li>4 dec 2004 17:33 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Map_of_Leipzig.png|Map_of_Leipzig.png]]" <em>(kaart gevecht van Leipzig (engelse wikipedia))</em></li> <li>4 dec 2004 16:59 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Sterappel.jpg|Sterappel.jpg]]" <em>(zelfgemaakte foto van de Sterappel; begin december)</em></li> <li>4 dec 2004 16:02 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Koninklijk_rijtuig_NL.jpg|Koninklijk_rijtuig_NL.jpg]]" <em>(Nederlands koninklijk rijtuig, station Utrecht Centraal. Eigen foto &#91;&#91;Gebruiker:Markv&#124;Mark Voorendt]], november 2004.)</em></li> <li>4 dec 2004 15:50 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Harik.jpg|Harik.jpg]]" <em>(fiat Otto Borik fotograaf)</em></li> <li>4 dec 2004 12:48 [[Gebruiker:Pronk|Pronk]] heeft ge-upload: "[[:Afbeelding:Warstory.jpg|Warstory.jpg]]" <em>(www.brothersinarmsgame.com - open source, plaatje gepubliceerd in zomer van 2004 voor publicatie)</em></li> <li>4 dec 2004 12:22 [[Gebruiker:J.W.Richter|J.W.Richter]] heeft ge-upload: "[[:Afbeelding:Barnsteenroutes.gif|Barnsteenroutes.gif]]" <em>(Barnsteen_routes)</em></li> <li>4 dec 2004 12:19 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:NedGuyanaLocatie.png|NedGuyanaLocatie.png]]" <em>(kaartje nederlands guyana (zelf gemaakt))</em></li> <li>4 dec 2004 12:13 [[Gebruiker:J.W.Richter|J.W.Richter]] heeft ge-upload: "[[:Afbeelding:Bernstein_Handelsrouten.gif|Bernstein_Handelsrouten.gif]]" <em>(Barnsteenroutes)</em></li> <li>4 dec 2004 06:35 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Grevenhuis.jpg|Grevenhuis.jpg]]" <em>(Grevenhuis)</em></li> <li>4 dec 2004 02:42 [[Gebruiker:Dexsuperior|Dexsuperior]] heeft ge-upload: "[[:Afbeelding:Luchtfoto_wijkaanzee1999.jpg|Luchtfoto_wijkaanzee1999.jpg]]" <em>(Luchtfoto 1999, gemaakt door KLPD, ondertussen verouderd en daardoor vrij van rechten)</em></li> <li>4 dec 2004 02:36 [[Gebruiker:Dexsuperior|Dexsuperior]] heeft ge-upload: "[[:Afbeelding:Luchtfoto_wijkaanzee1938.gif|Luchtfoto_wijkaanzee1938.gif]]" <em>(Rijksluchtvaartdienst 1938, auteursrecht vrij)</em></li> <li>3 dec 2004 23:02 [[Gebruiker:Svdmolen|Svdmolen]] heeft ge-upload: "[[:Afbeelding:SPlogo.jpg|SPlogo.jpg]]" <em>(SPlogo - eigenwerk met wikiplaatjes - &#123;&#123;PD}})</em></li> <li>3 dec 2004 22:43 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:RuslandCentraalGenummerd.png|RuslandCentraalGenummerd.png]]" <em>(hernummering nl &#123;&#123;GDFL}})</em></li> <li>3 dec 2004 22:05 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Sleutelhangers.jpg|Sleutelhangers.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>3 dec 2004 21:24 [[Gebruiker:Kero|Kero]] heeft ge-upload: "[[:Afbeelding:Jalal_Talabani.jpg|Jalal_Talabani.jpg]]" <em>(Jalal Talabani; Behrouz Mehri/AFP-Getty Images)</em></li> <li>3 dec 2004 21:13 [[Gebruiker:Jürgen|Jürgen]] heeft ge-upload: "[[:Afbeelding:Leefgebied_vos.JPG|Leefgebied_vos.JPG]]" <em>(Bewerking afbeelding: afbeelding_(kaart).jpg)</em></li> <li>3 dec 2004 20:54 [[Gebruiker:Jürgen|Jürgen]] heeft ge-upload: "[[:Afbeelding:Leefgebied_reuzenpanda.JPG|Leefgebied_reuzenpanda.JPG]]" <em>(Bewerking afbeelding: afbeelding_(kaart).jpg)</em></li> <li>3 dec 2004 20:49 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:RW67Locatie.png|RW67Locatie.png]]" <em>(Locatie RW67, eigen werk, &#123;&#123;PD}})</em></li> <li>3 dec 2004 20:23 [[Gebruiker:Jürgen|Jürgen]] heeft ge-upload: "[[:Afbeelding:Leefgebied_orang_oetan.JPG|Leefgebied_orang_oetan.JPG]]" <em>(Bewerking afbeelding: afbeelding_(kaart).jpg)</em></li> <li>3 dec 2004 20:10 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Pastinaak.png|Pastinaak.png]]" <em>(Pastinaak (eigen werk) GFDL &#123;&#123;GFDL}})</em></li> <li>3 dec 2004 19:24 [[Gebruiker:Gert-Paul|Gert-Paul]] heeft ge-upload: "[[:Afbeelding:Firefox10NL.png|Firefox10NL.png]]" <em>(Firefox 1.0 op Windows XP)</em></li> <li>3 dec 2004 19:07 [[Gebruiker:B kimmel|B kimmel]] heeft ge-upload: "[[:Afbeelding:Kameleon_kenmerken.JPG|Kameleon_kenmerken.JPG]]" <em>(Zelfgemaakte afbeelding en dat is wel te zien.)</em></li> <li>3 dec 2004 19:03 [[Gebruiker:Svdmolen|Svdmolen]] heeft ge-upload: "[[:Afbeelding:K&Clogo.jpg|K&Clogo.jpg]]" <em>(K&amp;Clogo - eigenwerk met wikiplaatjes - &#123;&#123;PD}})</em></li> <li>3 dec 2004 19:02 [[Gebruiker:Svdmolen|Svdmolen]] heeft ge-upload: "[[:Afbeelding:W&Tlogo.jpg|W&Tlogo.jpg]]" <em>(W&amp;Tlogo - eigenwerk met wikiplaatjes - &#123;&#123;PD}})</em></li> <li>3 dec 2004 19:01 [[Gebruiker:Svdmolen|Svdmolen]] heeft ge-upload: "[[:Afbeelding:GPlogo.jpg|GPlogo.jpg]]" <em>(GPlogo - eigenwerk met wikiplaatjes - &#123;&#123;PD}})</em></li> <li>3 dec 2004 16:55 [[Gebruiker:IJzeren Jan|IJzeren Jan]] heeft ge-upload: "[[:Afbeelding:Leonid_Kravtsjoek.jpg|Leonid_Kravtsjoek.jpg]]" <em>(De Oekraïense president Leonid Kravtsjoek, augustus 1992 (eigen foto))</em></li> <li>3 dec 2004 16:23 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieKornwerderzand.png|LocatieKornwerderzand.png]]" <em>(Kaart met de locatie van Kornwerderzand, gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>3 dec 2004 16:14 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Kasteel_Duurstede.jpg|Kasteel_Duurstede.jpg]]" <em>(Kasteel Duurstede. Eigen foto &#91;&#91;Gebruiker:Markv]], augustus 2004)</em></li> <li>3 dec 2004 16:07 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Kasteel_Duurstede.jpg|Kasteel_Duurstede.jpg]]" <em>(Kasteel Duurstede. Eigen foto &#91;&#91;Gebruiker:Markv]], augustus 2004.)</em></li> <li>3 dec 2004 15:52 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Den_Haag_Centrum_nieuwe_architectuur.jpg|Den_Haag_Centrum_nieuwe_architectuur.jpg]]" <em>(Den Haag Centrum, nieuwe architectuur nabij het Centraal Station. Eigen foto &#91;&#91;Gebruiker:Markv]], november 2004)</em></li> <li>3 dec 2004 15:48 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieBreezanddijk.png|LocatieBreezanddijk.png]]" <em>(Kaart met de locatie van Breezanddijk, gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>3 dec 2004 15:43 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Zoetermeer_t_Oude_Huis.jpg|Zoetermeer_t_Oude_Huis.jpg]]" <em>(&#39;t Oude Huis (gemeentemuseum) te Zoetermeer. Eigen foto &#91;&#91;Gebruiker:Markv]], juli 2004)</em></li> <li>3 dec 2004 15:39 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:MecklenburgKaart.jpg|MecklenburgKaart.jpg]]" <em>(Mecklenburg 1803 - vrij te gebruiken voor educatieve doeleinden - http&#58;//www.lib.utexas.edu/usage_statement.html)</em></li> <li>3 dec 2004 15:27 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Zoetermeer_sprinter.jpg|Zoetermeer_sprinter.jpg]]" <em>(Sprinter op station Zoetermeer. Eigen foto &#91;&#91;Gebruiker:Markv]], december 2004)</em></li> <li>3 dec 2004 15:09 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Spar_naalden.jpg|Spar_naalden.jpg]]" <em>(zelfgemaakte foto van takje van fijnspar; begin december)</em></li> <li>3 dec 2004 15:06 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Zoetermeer_Citypendel.jpg|Zoetermeer_Citypendel.jpg]]" <em>(Citypendel op de Zoetermeer stadslijn. Eigen foto &#91;&#91;Gebruiker:Markv]], juli 2004)</em></li> <li>3 dec 2004 14:59 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Wuitbreiding.jpg|Wuitbreiding.jpg]]" <em>(Württemberg 1495-1810 - vrij te gebruiken voor educatieve doeleinden - http&#58;//www.lib.utexas.edu/usage_statement.html - Courtesy of the University of Texas Libraries, The University of Texas at Austin.)</em></li> <li>3 dec 2004 14:45 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:BadenUitbreiding.jpg|BadenUitbreiding.jpg]]" <em>(Baden 1801-1819 - vrij te gebruiken voor educatieve doeleinden - http&#58;//www.lib.utexas.edu/usage_statement.html)</em></li> <li>3 dec 2004 14:22 [[Gebruiker:Vussiewussie|Vussiewussie]] heeft ge-upload: "[[:Afbeelding:Zeenaald.jpg|Zeenaald.jpg]]" <em>(foto van een zeenaald (vis), de foto is beschikbaar onder de GNU free licentie)</em></li> <li>3 dec 2004 14:06 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieZurich.png|LocatieZurich.png]]" <em>(Kaart met de locatie van Zurich, gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>3 dec 2004 10:58 [[Gebruiker:Chrisevers|Chrisevers]] heeft ge-upload: "[[:Afbeelding:Alcatraz.jpg|Alcatraz.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>3 dec 2004 10:54 [[Gebruiker:Wobble|Wobble]] heeft ge-upload: "[[:Afbeelding:Degage.jpg|Degage.jpg]]" <em>(zelf gemaakt)</em></li> <li>3 dec 2004 09:45 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:Vote-SWAPO-2004-2.jpg|Vote-SWAPO-2004-2.jpg]]" <em>(Billboard SWAPO 2004 met Hifikepunye Pohamba als presidentskandidaat. )</em></li> <li>3 dec 2004 09:42 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:Vote-SWAPO-2004-1.jpg|Vote-SWAPO-2004-1.jpg]]" <em>(Billboard SWAPO 2004 met Hifikepunye Pohamba als presidentskandidaat. )</em></li> <li>3 dec 2004 06:48 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:250px-Namibia_Regions_numbered_300px.png|250px-Namibia_Regions_numbered_300px.png]]" <em>(overgenomen van Duitse Wikipedia)</em></li> <li>2 dec 2004 23:23 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Sint-Nicolaas.jpg|Sint-Nicolaas.jpg]]" <em>(van engelse pagina: Saint Nicholas, from an early 20th century holy card.)</em></li> <li>2 dec 2004 22:18 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FransIO.jpg|FransIO.jpg]]" <em>(Frans II &#123;&#123;PD}})</em></li> <li>2 dec 2004 22:15 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FerdinandIO.jpg|FerdinandIO.jpg]]" <em>(Ferdinand I van Oostenrijk &#123;&#123;PD}})</em></li> <li>2 dec 2004 21:59 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:KarelIO.jpg|KarelIO.jpg]]" <em>(Karel i van Oostenrijk - PD van en:)</em></li> <li>2 dec 2004 21:47 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieReahus.png|LocatieReahus.png]]" <em>(Kaart met de locatie van Reahûs (Roodhuis), gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>2 dec 2004 21:17 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:NorodomSihanouk.jpg|NorodomSihanouk.jpg]]" <em>(Norodom Sihanouk - Ministry of Foreign Affairs - Photographic Service - vrij te gebruiken met bronvermelding)</em></li> <li>2 dec 2004 20:52 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:RuslandOeralfederaaldistrictGenummerd.png|RuslandOeralfederaaldistrictGenummerd.png]]" <em>(&#123;&#123;GDFL}} ja wiki:herbewerkt)</em></li> <li>2 dec 2004 20:52 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:RuslandOeralfederaaldistrict.png|RuslandOeralfederaaldistrict.png]]" <em>(&#123;&#123;GDFL}} en wiki)</em></li> <li>2 dec 2004 20:42 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:KPWilhelm.jpg|KPWilhelm.jpg]]" <em>(Kroonprins &#91;&#91;Wilhelm van Pruisen]] - public domain van http&#58;//www.gwpda.org/photos/greatwar.htm)</em></li> <li>2 dec 2004 20:35 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Naaimachine.jpg|Naaimachine.jpg]]" <em>(&#123;&#123;eigenwerk}} (nee, deze is van mijn vriendin))</em></li> <li>2 dec 2004 20:24 [[Gebruiker:IJzeren Jan|IJzeren Jan]] heeft ge-upload: "[[:Afbeelding:Levko_Loekjanenko.jpg|Levko_Loekjanenko.jpg]]" <em>(Levko Loekjanenko. Foto van http&#58;//maidan.org.ua/n/foto/1047247714 (GNU-FDL))</em></li> <li>2 dec 2004 20:21 [[Gebruiker:Nikio|Nikio]] heeft ge-upload: "[[:Afbeelding:LocatieWjelsryp.png|LocatieWjelsryp.png]]" <em>(Kaart met de locatie van Wjelsryp (Welsrijp), gemaakt uit sjabloon van Wikipedia-gebruiker Mtcv)</em></li> <li>2 dec 2004 20:15 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Washer.600pix.jpg|Washer.600pix.jpg]]" <em>(van engelse wikipedia &#91;&#91;:en:Image:Washer.600pix.jpg]], met tekst: &quot;Front-loading washing machine.Taken by Adrian Pingstone in England in May 2003 and released to the public domain.&quot; &#123;&#123;PD}})</em></li> <li>2 dec 2004 18:24 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Signature-Peguy.jpg|Signature-Peguy.jpg]]" <em>(handtekening peguy, rechten verjaard)</em></li> <li>2 dec 2004 18:23 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Peguy.jpg|Peguy.jpg]]" <em>(foto peguy, rechten verjaard (voor 1914))</em></li> <li>2 dec 2004 17:10 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Milan_Vidmar.jpg|Milan_Vidmar.jpg]]" <em>( fotorechten verjaard)</em></li> <li>2 dec 2004 14:47 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:DSC00190.JPG|DSC00190.JPG]]" <em>(eigen foto)</em></li> <li>2 dec 2004 14:37 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen0991.JPG|Scannen0991.JPG]]" <em>(eigen foto)</em></li> <li>2 dec 2004 14:19 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:DSC00190.JPG|DSC00190.JPG]]" <em>(eigen foto)</em></li> <li>2 dec 2004 14:09 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen0075.JPG|Scannen0075.JPG]]" <em>(eigen foto)</em></li> <li>2 dec 2004 13:42 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen0090.JPG|Scannen0090.JPG]]" <em>(eigen foto)</em></li> <li>2 dec 2004 13:40 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen0077.JPG|Scannen0077.JPG]]" <em>(eigen foto)</em></li> <li>2 dec 2004 13:39 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_dornava.png|Sl_gemeente_dornava.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia; auteursrechtenvrij)</em></li> <li>2 dec 2004 13:39 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_brda.png|Sl_gemeente_brda.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia; auteursrechtenvrij)</em></li> <li>2 dec 2004 13:38 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen0056.JPG|Scannen0056.JPG]]" <em>(eigen foto)</em></li> <li>2 dec 2004 13:38 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_dravograd.png|Sl_gemeente_dravograd.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia; auteursrechtenvrij)</em></li> <li>2 dec 2004 13:30 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:DSC00045nieuw.jpg|DSC00045nieuw.jpg]]" <em>(eigen foto)</em></li> <li>2 dec 2004 13:12 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen0020.JPG|Scannen0020.JPG]]" <em>(eigen foto)</em></li> <li>2 dec 2004 13:09 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen0006.jpg|Scannen0006.jpg]]" <em>(eigen foto)</em></li> <li>2 dec 2004 13:02 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Pleterjea.jpg|Pleterjea.jpg]]" <em>(auteursrecht prentbriefkaart verjaard )</em></li> <li>2 dec 2004 12:57 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_sentjernej.png|Sl_gemeente_sentjernej.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia; auteursrechtenvrij)</em></li> <li>2 dec 2004 12:57 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen123.jpg|Scannen123.jpg]]" <em>(eigen foto)</em></li> <li>2 dec 2004 12:54 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen0004.jpg|Scannen0004.jpg]]" <em>(eigen foto)</em></li> <li>2 dec 2004 12:49 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannennieuwe.jpg|Scannennieuwe.jpg]]" <em>(eigen foto)</em></li> <li>2 dec 2004 12:42 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Nolherman.jpeg|Nolherman.jpeg]]" <em>(eigen foto)</em></li> <li>2 dec 2004 12:42 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Nolherman.jpeg|Nolherman.jpeg]]" <em>(eigen foto)</em></li> <li>2 dec 2004 12:29 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen12.jpg|Scannen12.jpg]]" <em>(foto uit eigen archief)</em></li> <li>2 dec 2004 12:29 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen12.jpg|Scannen12.jpg]]" <em>(foto uit eigen archief)</em></li> <li>2 dec 2004 12:28 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen.jpg|Scannen.jpg]]" <em>(foto uit eigen archief)</em></li> <li>2 dec 2004 12:25 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Scannen.jpg|Scannen.jpg]]" <em>(eigen foto uit archief)</em></li> <li>2 dec 2004 12:15 [[Gebruiker:Blom86|Blom86]] heeft ge-upload: "[[:Afbeelding:Papparenz.jpeg|Papparenz.jpeg]]" <em>(www.renz.nl)</em></li> <li>2 dec 2004 11:45 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_divaca.png|Sl_gemeente_divaca.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia; auteursrechtenvrij)</em></li> <li>2 dec 2004 11:26 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_markovci.png|Sl_gemeente_markovci.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia; auteursrechtenvrij)</em></li> <li>2 dec 2004 10:43 [[Gebruiker:Belgeld|Belgeld]] heeft ge-upload: "[[:Afbeelding:Optische_telefoonkaart.jpg|Optische_telefoonkaart.jpg]]" <em>(Optische telefoonkaart )</em></li> <li>2 dec 2004 10:38 [[Gebruiker:Belgeld|Belgeld]] heeft ge-upload: "[[:Afbeelding:Hol02r.jpg|Hol02r.jpg]]" <em>(Nederlandse telefoonkaart met chip.)</em></li> <li>2 dec 2004 10:28 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:RehobothBasters.gif|RehobothBasters.gif]]" <em>(Vlag van Rehoboth Basters)</em></li> <li>2 dec 2004 10:14 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Telkaart_strip.jpg|Telkaart_strip.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>2 dec 2004 10:06 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Telkaart.jpg|Telkaart.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>2 dec 2004 10:03 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:Cabinda.gif|Cabinda.gif]]" <em>(Vlag van Cabinda)</em></li> <li>2 dec 2004 07:45 [[Gebruiker:IJzeren Jan|IJzeren Jan]] heeft ge-upload: "[[:Afbeelding:Jusch_Julia.jpg|Jusch_Julia.jpg]]" <em>(Joesjtsjenko + Tymosjenko, nov. 2004; from Maidan.org (GNU-FDL))</em></li> <li>2 dec 2004 07:34 [[Gebruiker:IJzeren Jan|IJzeren Jan]] heeft ge-upload: "[[:Afbeelding:Moroz_2003.jpg|Moroz_2003.jpg]]" <em>(Afkomstig van Maidan.org; GNU-FDL)</em></li> <li>2 dec 2004 01:15 [[Gebruiker:Yorg|Yorg]] heeft ge-upload: "[[:Afbeelding:Nobelport_Zierikzee_2.jpg|Nobelport_Zierikzee_2.jpg]]" <em>(by myself)</em></li> <li>2 dec 2004 01:11 [[Gebruiker:Yorg|Yorg]] heeft ge-upload: "[[:Afbeelding:Nobelport_Zierikzee_1.jpg|Nobelport_Zierikzee_1.jpg]]" <em>(by myself)</em></li> <li>2 dec 2004 00:55 [[Gebruiker:Yorg|Yorg]] heeft ge-upload: "[[:Afbeelding:Oostkerk_Middelburg.jpg|Oostkerk_Middelburg.jpg]]" <em>(by myself)</em></li> <li>1 dec 2004 22:44 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_tolmin.png|Sl_gemeente_tolmin.png]]" <em>(gemaakt door gebruiker Plp van sl.wikipedia; auteursrechtenvrij)</em></li> <li>1 dec 2004 22:09 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_zelezniki.png|Sl_gemeente_zelezniki.png]]" <em>(gemaakt door gebruiker Plp van sl.wikipedia; auteursrechtenvrij)</em></li> <li>1 dec 2004 21:35 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Kalmarunie_vlag.png|Kalmarunie_vlag.png]]" <em>(vlag kalmarunie (engelse wikipedia))</em></li> <li>1 dec 2004 21:35 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Strijkplank.jpg|Strijkplank.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>1 dec 2004 20:49 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Bernhard.jpg|Bernhard.jpg]]" <em>(Prins Bernhard&lt;br&gt;Van Wikipedia.en&lt;br&gt;Volgens bescrijving aldaar:&lt;br&gt;&#123;&#123;PD}})</em></li> <li>1 dec 2004 20:37 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_zuzemberk.png|Sl_gemeente_zuzemberk.png]]" <em>(gemaakt door gebruiker Plp van sl.wikipedia; auteursrechtenvrij)</em></li> <li>1 dec 2004 20:25 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_mozirje.png|Sl_gemeente_mozirje.png]]" <em>(gemaakt door gebruiker Plp van sl.wikipedia; auteursrechtenvrij)</em></li> <li>1 dec 2004 20:13 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:BisdomRoermondLocatie.png|BisdomRoermondLocatie.png]]" <em>(Locatie Bisdom Roermond, eigen werk, &#123;&#123;PD}})</em></li> <li>1 dec 2004 20:11 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:BisdomHaarlemLocatie.png|BisdomHaarlemLocatie.png]]" <em>(Locatie Bisdom Haarlem, eigen werk, &#123;&#123;PD}})</em></li> <li>1 dec 2004 19:43 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_kocevje.png|Sl_gemeente_kocevje.png]]" <em>(gemaakt door gebruiker Plp van sl.wikipedia; auteursrechtenvrij)</em></li> <li>1 dec 2004 18:15 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Afstamming_banaan.png|Afstamming_banaan.png]]" <em>(verbeterde versie)</em></li> <li>1 dec 2004 18:04 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Afstamming_banaan.png|Afstamming_banaan.png]]" <em>(zelfgemaakte tekening van de afstamming van de banaan)</em></li> <li>1 dec 2004 18:00 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-platanoides_schors.jpg|Acer-platanoides_schors.jpg]]" <em>(Schors van de Acer plataniodes. Overgenomen van de Engelse wikipedia : Photograph 2003-09-12 Karl DeBisschop Quincy, MA (USA) &#123;&#123;GFDL}})</em></li> <li>1 dec 2004 17:59 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-platanoides_vrucht.jpg|Acer-platanoides_vrucht.jpg]]" <em>(Vruchten van de Acer platanoides. Overgenomen van de Engelse wikipedia: )</em></li> <li>1 dec 2004 17:34 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-platanoides_blad.jpg|Acer-platanoides_blad.jpg]]" <em>(Overgenomen van de Engelse wikipedia : Norway Maple Leaves)</em></li> <li>1 dec 2004 17:05 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Betula-pendula-'Laciniata'_bladeren.jpg|Betula-pendula-'Laciniata'_bladeren.jpg]]" <em>(Overgenomen van http&#58;//www.biolib.de/)</em></li> <li>1 dec 2004 16:46 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Kocbek.jpg|Kocbek.jpg]]" <em>(publiek domein (PT Slovenija))</em></li> <li>1 dec 2004 14:47 [[Gebruiker:Wim V.L.|Wim V.L.]] heeft ge-upload: "[[:Afbeelding:Eriugena.jpg|Eriugena.jpg]]" <em>(http&#58;//www.grass-land.com/wenji/sieg/108/043_048.html - vrij in gebruik)</em></li> <li>1 dec 2004 14:20 [[Gebruiker:Martijn|Martijn]] heeft ge-upload: "[[:Afbeelding:Martijn.png|Martijn.png]]" <em>(eigen werk, zelfportret voor gebruikerspagina)</em></li> <li>1 dec 2004 13:47 [[Gebruiker:Ziggyziggyziggy|Ziggyziggyziggy]] heeft ge-upload: "[[:Afbeelding:Ziggyziggyziggy.jpg|Ziggyziggyziggy.jpg]]" <em>(Foto voor op eigen userpagina, betreft een zelfportret)</em></li> <li>1 dec 2004 13:47 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Carthagena_Colombia_ca1600.jpg|Carthagena_Colombia_ca1600.jpg]]" <em>(Carthagena_oude_prent)</em></li> <li>1 dec 2004 12:59 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Memory_Stick.jpg|Memory_Stick.jpg]]" <em>(Memory Stick, van duitse wiki (&#91;&#91;:de:Bild:Memory_Stick.jpg]], met tekst: &quot;Memory Stick und Memory Stick Duo mit Adapter, jeweils Vorder- und Rückseite, Eigene Aufnahme, GNU-FDL&quot;. &#123;&#123;GFDL}})</em></li> <li>1 dec 2004 12:22 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:Hagegeingob.JPG|Hagegeingob.JPG]]" <em>(Hage Geingob, de eerste premier van Namibie)</em></li> <li>1 dec 2004 12:13 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:Geingob.gif|Geingob.gif]]" <em>(Hage Geingob, eerste premier van Namibie)</em></li> <li>1 dec 2004 10:23 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:Gurirab.jpg|Gurirab.jpg]]" <em>(Theo-Ben Gurirab)</em></li> <li>1 dec 2004 10:05 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:Pohamba.jpg|Pohamba.jpg]]" <em>(Pohamba)</em></li> <li>1 dec 2004 08:14 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Grien.jpg|Grien.jpg]]" <em>(fiat Monique)</em></li> <li>1 dec 2004 08:06 [[Gebruiker:Fortinbras|Fortinbras]] heeft ge-upload: "[[:Afbeelding:Aphrodite_eros_pan.jpg|Aphrodite_eros_pan.jpg]]"</li> <li>1 dec 2004 07:30 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:Nujoma.jpg|Nujoma.jpg]]" <em>(Officieel portret van Sam Nujoma)</em></li> <li>1 dec 2004 00:06 [[Gebruiker:Harm|Harm]] heeft ge-upload: "[[:Afbeelding:Meet041127d.jpg|Meet041127d.jpg]]" <em>(Eigen foto - Oscar tijdens afsluitend praatje)</em></li> <li>1 dec 2004 00:05 [[Gebruiker:Harm|Harm]] heeft ge-upload: "[[:Afbeelding:Meet041127c.jpg|Meet041127c.jpg]]" <em>(Eigen foto - Rotterdam kubuswoningen)</em></li> <li>1 dec 2004 00:03 [[Gebruiker:Harm|Harm]] heeft ge-upload: "[[:Afbeelding:Meet041127b.jpg|Meet041127b.jpg]]" <em>(Eigen foto - groep voor museum)</em></li> <li>1 dec 2004 00:00 [[Gebruiker:Harm|Harm]] heeft ge-upload: "[[:Afbeelding:Meet041127a.jpg|Meet041127a.jpg]]" <em>(eigen foto - Andre en Marco in de trein)</em></li> <li>30 nov 2004 22:52 [[Gebruiker:JoJan|JoJan]] heeft ge-upload: "[[:Afbeelding:Angela2.jpg|Angela2.jpg]]" <em>(Angela in Rotterdam 27.11.04)</em></li> <li>30 nov 2004 22:37 [[Gebruiker:Avanbijleveld|Avanbijleveld]] heeft ge-upload: "[[:Afbeelding:RuslandPenza.png|RuslandPenza.png]]" <em>(Ligging Penza (en-wiki, GNU-lic))</em></li> <li>30 nov 2004 21:46 [[Gebruiker:Pethan|Pethan]] heeft ge-upload: "[[:Afbeelding:Tigerlilysmall.jpg|Tigerlilysmall.jpg]]" <em>(Lilium lancifolium van en:wiki van &#91;http&#58;//GIMP-savvy.com/cgi-bin/img.cgi?ufwseOKSlhdzLhk979 GIMP photo library])</em></li> <li>30 nov 2004 21:13 [[Gebruiker:Pethan|Pethan]] heeft ge-upload: "[[:Afbeelding:Acorus-calamus1rotatie.jpg|Acorus-calamus1rotatie.jpg]]" <em>(kalmoes van en:wikipedia )</em></li> <li>30 nov 2004 21:11 [[Gebruiker:Avanbijleveld|Avanbijleveld]] heeft ge-upload: "[[:Afbeelding:RuslandPerm.png|RuslandPerm.png]]" <em>(Ligging Perm (en-wiki, GNU-lic))</em></li> <li>30 nov 2004 21:02 [[Gebruiker:Avanbijleveld|Avanbijleveld]] heeft ge-upload: "[[:Afbeelding:RuslandRjazan.png|RuslandRjazan.png]]" <em>(Ligging Rjazan (en-wiki, GNU-lic))</em></li> <li>30 nov 2004 21:02 [[Gebruiker:Pethan|Pethan]] heeft ge-upload: "[[:Afbeelding:Arum_maculatum_700.jpg|Arum_maculatum_700.jpg]]" <em>(Arum maculatum van en:wikipedia Photo by &#91;&#91;en:User:Sannse&#124;Sannse]], 24 April 2004, Essex, England. )</em></li> <li>30 nov 2004 20:49 [[Gebruiker:Avanbijleveld|Avanbijleveld]] heeft ge-upload: "[[:Afbeelding:RuslandRostov.png|RuslandRostov.png]]" <em>(Ligging Rostov (en-wiki, GNU-lic))</em></li> <li>30 nov 2004 20:20 [[Gebruiker:Avanbijleveld|Avanbijleveld]] heeft ge-upload: "[[:Afbeelding:Clementine.jpg|Clementine.jpg]]" <em>(Clementine (en-wiki, GNU-lic))</em></li> <li>30 nov 2004 19:04 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-campestre_vruchten.jpg|Acer-campestre_vruchten.jpg]]" <em>(Overgenomen van de Frande wikipedia: Érable champêtre, photo J.F. Gaffard, &#91;&#91;Esprels]] juillet 2004, &#123;&#123;GFDL}})</em></li> <li>30 nov 2004 19:00 [[Gebruiker:Fortinbras|Fortinbras]] heeft ge-upload: "[[:Afbeelding:Zeus.jpg|Zeus.jpg]]" <em>(National Archaeological Museum (#15161), Athens http&#58;//arthist.cla.umn.edu/aict/html/ancient/GS/gs048.html)</em></li> <li>30 nov 2004 18:37 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-campestre.jpg|Acer-campestre.jpg]]" <em>(http&#58;//www.kulak.ac.be/nl/KULAKAlgemeen/Natuur/)</em></li> <li>30 nov 2004 15:15 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:Swapo_vlag.gif|Swapo_vlag.gif]]" <em>(SWAPO vlag)</em></li> <li>30 nov 2004 15:04 [[Gebruiker:Bries|Bries]] heeft ge-upload: "[[:Afbeelding:Christuskirche_Windhoek.jpg|Christuskirche_Windhoek.jpg]]" <em>(Christuskirche_Windhoek)</em></li> <li>30 nov 2004 14:27 [[Gebruiker:MWAK|MWAK]] heeft ge-upload: "[[:Afbeelding:Char2Cpainting8.JPG|Char2Cpainting8.JPG]]" <em>(zelf gemaakt)</em></li> <li>30 nov 2004 13:49 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Poesieplaatje-2.jpg|Poesieplaatje-2.jpg]]" <em>(Poesieplaatje, 70 jaar oud, maker onbekend.)</em></li> <li>30 nov 2004 13:49 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Poesieplaatje-1.jpg|Poesieplaatje-1.jpg]]" <em>(Poesieplaatje, 70 jaar oud, maker onbekend.)</em></li> <li>30 nov 2004 11:22 [[Gebruiker:Hent|Hent]] heeft ge-upload: "[[:Afbeelding:Selectie.jpg|Selectie.jpg]]"</li> <li>30 nov 2004 11:19 [[Gebruiker:Hent|Hent]] heeft ge-upload: "[[:Afbeelding:Oudevijverberg.jpg|Oudevijverberg.jpg]]"</li> <li>30 nov 2004 11:17 [[Gebruiker:Hent|Hent]] heeft ge-upload: "[[:Afbeelding:Stadionbank.jpg|Stadionbank.jpg]]"</li> <li>30 nov 2004 11:16 [[Gebruiker:Hent|Hent]] heeft ge-upload: "[[:Afbeelding:Stadion1.jpg|Stadion1.jpg]]"</li> <li>30 nov 2004 11:11 [[Gebruiker:Hent|Hent]] heeft ge-upload: "[[:Afbeelding:Graafschap4.jpg|Graafschap4.jpg]]"</li> <li>30 nov 2004 11:11 [[Gebruiker:Hent|Hent]] heeft ge-upload: "[[:Afbeelding:Graafschap3.jpg|Graafschap3.jpg]]"</li> <li>30 nov 2004 11:11 [[Gebruiker:Hent|Hent]] heeft ge-upload: "[[:Afbeelding:Graafschap2.jpg|Graafschap2.jpg]]"</li> <li>30 nov 2004 11:05 [[Gebruiker:Hent|Hent]] heeft ge-upload: "[[:Afbeelding:Graafschap1.jpg|Graafschap1.jpg]]"</li> <li>30 nov 2004 10:59 [[Gebruiker:Hent|Hent]] heeft ge-upload: "[[:Afbeelding:Logo.jpg|Logo.jpg]]"</li> <li>30 nov 2004 10:26 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Rot-Walter.JPG|Rot-Walter.JPG]]" <em>(Foto van het Wikipedia-symposium in Rotterdam, novermber 2004. &#91;&#91;Gebruiker:Walter&#124;Walter]]. Foto: &#91;&#91;Gebruiker:Andre Engels&#124;Andre Engels]]. &#123;&#123;GFDL}})</em></li> <li>30 nov 2004 10:25 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Rot-Waerth.JPG|Rot-Waerth.JPG]]" <em>(Foto van het Wikipedia-symposium in Rotterdam, novermber 2004. &#91;&#91;Gebruiker:Waerth&#124;Waerth]]. Foto: &#91;&#91;Gebruiker:Andre Engels&#124;Andre Engels]]. &#123;&#123;GFDL}})</em></li> <li>30 nov 2004 10:23 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Rot-Anthere.JPG|Rot-Anthere.JPG]]" <em>(Foto van het Wikipedia-symposium in Rotterdam, novermber 2004. Anthere. Foto: &#91;&#91;Gebruiker:Andre Engels&#124;Andre Engels]]. &#123;&#123;GFDL}})</em></li> <li>30 nov 2004 10:21 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Boogbrug2.jpg|Boogbrug2.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>30 nov 2004 10:20 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Rot-Angela.JPG|Rot-Angela.JPG]]" <em>(Foto van het Wikipedia-symposium in Rotterdam, novermber 2004. Angela. Foto: &#91;&#91;Gebruiker:Andre Engels&#124;)</em></li> <li>30 nov 2004 10:06 [[Gebruiker:Blaman|Blaman]] heeft ge-upload: "[[:Afbeelding:Lucie_de_Lange.GIF|Lucie_de_Lange.GIF]]" <em>(eigen gemaakte foto)</em></li> <li>30 nov 2004 09:29 [[Gebruiker:Jeroenvrp|Jeroenvrp]] heeft ge-upload: "[[:Afbeelding:Queensland_coat_of_arms_small.jpg|Queensland_coat_of_arms_small.jpg]]" <em>(van en: - deze valt onder fairuse en kan dus op nl: verwijderd worden)</em></li> <li>30 nov 2004 09:29 [[Gebruiker:Jeroenvrp|Jeroenvrp]] heeft ge-upload: "[[:Afbeelding:New_South_Wales_coat_of_arms_small.jpg|New_South_Wales_coat_of_arms_small.jpg]]" <em>(van en: - deze valt onder fairuse en kan dus op nl: verwijderd worden)</em></li> <li>30 nov 2004 07:55 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Gene.png|Gene.png]]" <em>(afbeeldingoorspronkelijk afkomstig van Engelstalige Wikipedia)</em></li> <li>30 nov 2004 04:16 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:Logo_Protestantse_Kerk.png|Logo_Protestantse_Kerk.png]]" <em>(Van www.pkn.nl, betere kleuren zoals bedoeld, kleiner bestand.)</em></li> <li>30 nov 2004 01:19 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Janez_Potocnik.jpg|Janez_Potocnik.jpg]]" <em>(ter beschikking gesteld door de Europese Commissie voor niet-commercieel gebruik)</em></li> <li>30 nov 2004 00:16 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_sveti_jurij.png|Sl_gemeente_sveti_jurij.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia; auteursrechtenvrij)</em></li> <li>29 nov 2004 23:03 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_maribor.png|Sl_gemeente_maribor.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia; auteursrechtenvrij)</em></li> <li>29 nov 2004 22:52 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_ormoz.png|Sl_gemeente_ormoz.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia;auteursrechtenvrij)</em></li> <li>29 nov 2004 22:48 [[Gebruiker:Vussiewussie|Vussiewussie]] heeft ge-upload: "[[:Afbeelding:Jonge_sepia.jpg|Jonge_sepia.jpg]]" <em>(foto van een jonge sepia, vrij van rechten)</em></li> <li>29 nov 2004 22:42 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_kranj.png|Sl_gemeente_kranj.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia;auteursrechtenvrij)</em></li> <li>29 nov 2004 22:38 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_piran.png|Sl_gemeente_piran.png]]" <em>(gemaakt door gebruiker Plp skl.wikipedia; auteursrechtenvrij)</em></li> <li>29 nov 2004 22:36 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:350px-Piran.jpg|350px-Piran.jpg]]" <em>(foto door Andrejj, gebruiker sl.wikipedia)</em></li> <li>29 nov 2004 22:31 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_koper.png|Sl_gemeente_koper.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia;auteursrechtenvrij)</em></li> <li>29 nov 2004 22:27 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_crnomelj.png|Sl_gemeente_crnomelj.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia;auteursrechtenvrij)</em></li> <li>29 nov 2004 22:27 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_izola.png|Sl_gemeente_izola.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia; auteursrechtenvrij)</em></li> <li>29 nov 2004 22:23 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Vanderhoeven.jpg|Vanderhoeven.jpg]]" <em>(Eigen foto, GNU-FDL.)</em></li> <li>29 nov 2004 22:18 [[Gebruiker:Okki|Okki]] heeft ge-upload: "[[:Afbeelding:MohammedB.png|MohammedB.png]]" <em>(Foto vrijgegeven door Justitie in programma &#39;Opsporing verzocht&#39;)</em></li> <li>29 nov 2004 22:15 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_sezana.png|Sl_gemeente_sezana.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia; auterusrechtenvrij)</em></li> <li>29 nov 2004 22:12 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_ajdovscina.png|Sl_gemeente_ajdovscina.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia;auteursrechtenvrij)</em></li> <li>29 nov 2004 22:05 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_ptuj.png|Sl_gemeente_ptuj.png]]" <em>(gemaakt door gebruiker Plp van sl.wikipedia; auteursrechtenvrij)</em></li> <li>29 nov 2004 22:05 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_ljubno.png|Sl_gemeente_ljubno.png]]" <em>(gemaakt door gebruiker Plp sl.wikipedia)</em></li> <li>29 nov 2004 22:04 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:RuslandWolgafederaaldistrictGenummerd.png|RuslandWolgafederaaldistrictGenummerd.png]]" <em>(&#123;&#123;GDFL}} en wiki: herbewerkt)</em></li> <li>29 nov 2004 22:03 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:RuslandWolgafederaaldistrict.png|RuslandWolgafederaaldistrict.png]]" <em>(&#123;&#123;GDFL}} en wiki)</em></li> <li>29 nov 2004 21:44 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_ljutomer.png|Sl_gemeente_ljutomer.png]]" <em>(gemaakt door gebruiker Plp van sl.wikipedia)</em></li> <li>29 nov 2004 21:44 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Sl_gemeente_bovec.png|Sl_gemeente_bovec.png]]" <em>(gemaakt door gebruiker Plp van sl.wikipedia)</em></li> <li>29 nov 2004 20:34 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Wappen-Südwestafrika.JPG|Wappen-Südwestafrika.JPG]]" <em>(Vlag van Duits Zuidwest-Afrika; zelf gemaakt door &#91;&#91;de:Benutzer:Thdoerfler]])</em></li> <li>29 nov 2004 20:31 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Namibia_Regions_Caprivi_250px.png|Namibia_Regions_Caprivi_250px.png]]" <em>(Caprivi - GFDL van en:)</em></li> <li>29 nov 2004 20:16 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Veer.jpg|Veer.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>29 nov 2004 20:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Foucaultspendulum.250px.jpg|Foucaultspendulum.250px.jpg]]" <em>(Afbeelding gekopieerd vanaf pl.wikipedia.org. De beschrijving daar was: Wahad&amp;#322;o Foucaulta, Panteon, Pary&amp;#380;&lt;br&gt; Autor: Michael Reeve.&lt;br&gt; Data wykonania zdj&amp;#281;cia: 30 stycznia 2004. &amp;#377;r&amp;#243;d&amp;#322;o: &#91;&#91;:en:Image:Foucaultspendulum.250px.jpg]] (GFDL) &#91;&#91;pl:Grafika:Foucaultspendulum.250px.jpg]])</em></li> <li>29 nov 2004 20:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Foucault_pendel2.jpeg|Foucault_pendel2.jpeg]]" <em>(Afbeelding gekopieerd vanaf de.wikipedia.org. De beschrijving daar was: Foucault Pendel an der Uni-Koblenz *Beschreibung: Foucault Pendel *Standort: Universität Koblenz *Quelle: fotografiert am 25.11.2004 *Fotograf oder Zeichner: Joscha Arenz *Lizenzstatus: GNU FDL &#91;&#91;de:Bild:Foucault pendel2.jpeg]])</em></li> <li>29 nov 2004 20:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Foucault_pendel1.jpeg|Foucault_pendel1.jpeg]]" <em>(Afbeelding gekopieerd vanaf de.wikipedia.org. De beschrijving daar was: Foucault Pendel an der Uni-Koblenz *Beschreibung: Foucault Pendel *Standort: Universität Koblenz *Quelle: fotografiert am 25.11.2004 *Fotograf oder Zeichner: Joscha Arenz *Lizenzstatus: GNU FDL &#91;&#91;de:Bild:Foucault pendel1.jpeg]])</em></li> <li>29 nov 2004 20:01 [[Gebruiker:Besednjak|Besednjak]] heeft ge-upload: "[[:Afbeelding:Saksen_km.png|Saksen_km.png]]" <em>(overgenomen van &#91;&#91;Wikipedia:WikiProject German districts/Maptemplates]])</em></li> <li>29 nov 2004 19:46 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Zuurtjes.jpg|Zuurtjes.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>29 nov 2004 19:02 [[Gebruiker:Caseman|Caseman]] heeft ge-upload: "[[:Afbeelding:Opslagtanks.jpg|Opslagtanks.jpg]]" <em>(betere versie opslagtanks, eigen foto Caseman)</em></li> <li>29 nov 2004 18:52 [[Gebruiker:Pethan|Pethan]] heeft ge-upload: "[[:Afbeelding:Lightmatter_snowleopard.jpg|Lightmatter_snowleopard.jpg]]" <em>(Sneeuwpanter van en:wikipedia)</em></li> <li>29 nov 2004 18:51 [[Gebruiker:Caseman|Caseman]] heeft ge-upload: "[[:Afbeelding:Ferrietkraal.jpg|Ferrietkraal.jpg]]" <em>(foto ferrietkraal aan USB kabel, eigen foto Caseman)</em></li> <li>29 nov 2004 18:36 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Mespilus_Germanica.jpg|Mespilus_Germanica.jpg]]" <em>(&#91;&#91;de:Bild:Mespilus Germanica.jpg]])</em></li> <li>29 nov 2004 18:30 [[Gebruiker:Cicero|Cicero]] heeft ge-upload: "[[:Afbeelding:Adreadoriaalsneptunusdooragnolobronzino.jpeg|Adreadoriaalsneptunusdooragnolobronzino.jpeg]]" <em>(van en:wikipedia, de beschrijving daar is: &quot;Andrea Doria as Neptune&quot; by Agnolo Bronzino &#123;&#123;msg:PD}})</em></li> <li>29 nov 2004 18:24 [[Gebruiker:Avanbijleveld|Avanbijleveld]] heeft ge-upload: "[[:Afbeelding:RuslandSachalin.png|RuslandSachalin.png]]" <em>(Ligging Sachalin (en-wiki, GNU-lic))</em></li> <li>29 nov 2004 18:23 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Mispel-vrucht.jpg|Mispel-vrucht.jpg]]"</li> <li>29 nov 2004 18:11 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Mispel.jpg|Mispel.jpg]]" <em>(zelfgemaakt foto van Mispel; eind november)</em></li> <li>29 nov 2004 18:08 [[Gebruiker:Avanbijleveld|Avanbijleveld]] heeft ge-upload: "[[:Afbeelding:RuslandSamara.png|RuslandSamara.png]]" <em>(Ligging Samara (en-wiki, GNU-lic))</em></li> <li>29 nov 2004 18:07 [[Gebruiker:Avanbijleveld|Avanbijleveld]] heeft ge-upload: "[[:Afbeelding:RuslandSaratov.png|RuslandSaratov.png]]" <em>(Ligging Saratov (en-wiki, GNU-lic))</em></li> <li>29 nov 2004 18:07 [[Gebruiker:Avanbijleveld|Avanbijleveld]] heeft ge-upload: "[[:Afbeelding:RuslandSmolensk.png|RuslandSmolensk.png]]" <em>(Ligging Smolensk (en-wiki, GNU-lic))</em></li> <li>29 nov 2004 17:56 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Betula-nigra_schors.jpg|Betula-nigra_schors.jpg]]" <em>(Permission granted to use under by Kurt Stueber http&#58;//www.biolib.de/ &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 17:46 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Betula-ermanii_stam.jpg|Betula-ermanii_stam.jpg]]" <em>(Permission granted to use under &#123;&#123;GFDL}} by Kurt Stueber http&#58;//www.biolib.de/)</em></li> <li>29 nov 2004 17:05 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:BisdomBredaLocatie.png|BisdomBredaLocatie.png]]" <em>(Locatie Bisdom Breda, eigen werk, &#123;&#123;PD}})</em></li> <li>29 nov 2004 16:53 [[Gebruiker:Emesbe|Emesbe]] heeft ge-upload: "[[:Afbeelding:11_28_207.JPEG|11_28_207.JPEG]]" <em>(eigen foto)</em></li> <li>29 nov 2004 16:43 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:3d-metaball-1.png|3d-metaball-1.png]]" <em>(3D demonstratie van metaball. Eigen ontwerp, met programma Strata 3D 3.0.2 (gratis versie die ook gebruikt mag worden, geen demo-versie) &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 15:52 [[Gebruiker:RJB|RJB]] heeft ge-upload: "[[:Afbeelding:Edwardsig.png|Edwardsig.png]]" <em>(Publiek Domein)</em></li> <li>29 nov 2004 14:05 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Betula-ermanii.jpg|Betula-ermanii.jpg]]" <em>(Naam: Betula ermanii; Permission granted to use under GFDL by Kurt Stueber Source: &#91;http&#58;//www.biolib.de www.biolib.de] &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 14:03 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Betula-ermanii.jpg|Betula-ermanii.jpg]]" <em>(Permission granted to use under GFDL by Kurt Stueber http&#58;//www.biolib.de/)</em></li> <li>29 nov 2004 13:38 [[Gebruiker:RJB|RJB]] heeft ge-upload: "[[:Afbeelding:Wallis.jpg|Wallis.jpg]]" <em>(Publiek Domein)</em></li> <li>29 nov 2004 13:19 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Smurffilmposter.jpg|Smurffilmposter.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>29 nov 2004 12:14 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Achillea-millefolium.jpg|Achillea-millefolium.jpg]]" <em>(Overgenomen van de Engelse wikipedia)</em></li> <li>29 nov 2004 11:51 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Circea-lutetiana_tros.jpg|Circea-lutetiana_tros.jpg]]" <em>(http&#58;//www.kulak.ac.be/nl/KULAKAlgemeen/Natuur/)</em></li> <li>29 nov 2004 11:46 [[Gebruiker:RJB|RJB]] heeft ge-upload: "[[:Afbeelding:ChristiaanIX.jpg|ChristiaanIX.jpg]]" <em>(Publiek Domein)</em></li> <li>29 nov 2004 11:11 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Catalpa-bignonioides_bloemen.jpg|Catalpa-bignonioides_bloemen.jpg]]" <em>(Overgenomen van de Duitse wikipedia)</em></li> <li>29 nov 2004 10:14 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Prunus-serotina_trossen.jpg|Prunus-serotina_trossen.jpg]]" <em>(http&#58;//www.kulak.ac.be/nl/KULAKAlgemeen/Natuur/)</em></li> <li>29 nov 2004 08:38 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-pseudoplatanus_vruchten.jpg|Acer-pseudoplatanus_vruchten.jpg]]" <em>(http&#58;//www.kulak.ac.be/facult/wet/biologie/pb/kulakbiocampus/images)</em></li> <li>29 nov 2004 08:15 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-pseudoplatanus.jpg|Acer-pseudoplatanus.jpg]]" <em>(Overgenomen van de Engelse wikipedia)</em></li> <li>29 nov 2004 07:48 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Acer-pseudoplatanus_tros.jpg|Acer-pseudoplatanus_tros.jpg]]" <em>(http&#58;//www.kulak.ac.be/facult/wet/biologie/pb/kulakbiocampus/images)</em></li> <li>29 nov 2004 07:37 [[Gebruiker:Zander|Zander]] heeft ge-upload: "[[:Afbeelding:Pappa.jpg|Pappa.jpg]]" <em>(eigen werk, vrijgegeven voor openbaar gebruik)</em></li> <li>29 nov 2004 07:25 [[Gebruiker:IJzeren Jan|IJzeren Jan]] heeft ge-upload: "[[:Afbeelding:Koetsjma.jpg|Koetsjma.jpg]]" <em>(Eng. wiki; gebruik vrij mits credits voor ABr en fotograaf. )</em></li> <li>29 nov 2004 07:20 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Symposium_naarjaar_2004_walter_robhooft_polyglot_en_puckly_staand.JPG|Symposium_naarjaar_2004_walter_robhooft_polyglot_en_puckly_staand.JPG]]" <em>(Eigen foto &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 00:49 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Symposium_najaar_2004_walter.JPG|Symposium_najaar_2004_walter.JPG]]" <em>(Eigen foto &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 00:49 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Symposium_najaar_2004_sander_spek_en_dick_bos.JPG|Symposium_najaar_2004_sander_spek_en_dick_bos.JPG]]" <em>(Eigen foto &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 00:48 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Symposium_najaar_2004_museumbezoek.JPG|Symposium_najaar_2004_museumbezoek.JPG]]" <em>(Eigen foto &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 00:47 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Symposium_najaar_2004_marco_roepers_en_wie.JPG|Symposium_najaar_2004_marco_roepers_en_wie.JPG]]" <em>(Eigen foto &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 00:47 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Symposium_najaar_2004_marco_roepers.JPG|Symposium_najaar_2004_marco_roepers.JPG]]" <em>(Eigen foto &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 00:46 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Symposium_najaar_2004_dick_en_weeveejee.JPG|Symposium_najaar_2004_dick_en_weeveejee.JPG]]" <em>(Eigen foto &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 00:45 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Symposium_najaar_2004_de_zaal.jpg|Symposium_najaar_2004_de_zaal.jpg]]" <em>(Eigen foto &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 00:45 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Symposium_najaar_2004_Daniel.JPG|Symposium_najaar_2004_Daniel.JPG]]" <em>(Eigen foto &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 00:44 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Symposium_najaar_2004_CE_Quistnix_Angela_en_Jimbo_Wales.JPG|Symposium_najaar_2004_CE_Quistnix_Angela_en_Jimbo_Wales.JPG]]" <em>(Eigen foto &#123;&#123;GFDL}})</em></li> <li>29 nov 2004 00:43 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Symposium_najaar_2004_bontenbal.JPG|Symposium_najaar_2004_bontenbal.JPG]]" <em>(Eigen foto, onder &#123;&#123;GFDL}})</em></li> <li>28 nov 2004 23:45 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Catalpa-speciosa.jpg|Catalpa-speciosa.jpg]]" <em>(Overgenomen van de Engelse wikipedia)</em></li> <li>28 nov 2004 23:45 [[Gebruiker:Wezy|Wezy]] heeft ge-upload: "[[:Afbeelding:Catalpa-specioa.jpg|Catalpa-specioa.jpg]]" <em>(Overgenomen van de Engelse wikipedia)</em></li> <li>28 nov 2004 22:46 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Snoep.jpg|Snoep.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>28 nov 2004 21:35 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:KarelIIIP.jpg|KarelIIIP.jpg]]" <em>(Karel III van Parma &#123;&#123;PD}})</em></li> <li>28 nov 2004 21:33 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Rottemeren.jpg|Rottemeren.jpg]]" <em>(Rottemeren nabij Bleiswijk. Eigen foto, oktober 2004 (lichtere versie dan eerst).)</em></li> <li>28 nov 2004 21:25 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:RuslandSiberischfederaaldistrictGenummerd.png|RuslandSiberischfederaaldistrictGenummerd.png]]" <em>(en wiki herbewerkt &#123;&#123;GDFL}})</em></li> <li>28 nov 2004 21:24 [[Gebruiker:Hardscarf|Hardscarf]] heeft ge-upload: "[[:Afbeelding:RuslandSiberischfederaaldistrict.png|RuslandSiberischfederaaldistrict.png]]" <em>(en wiki &#123;&#123;GDFL}})</em></li> <li>28 nov 2004 21:18 [[Gebruiker:Markv|Markv]] heeft ge-upload: "[[:Afbeelding:Escorial.jpg|Escorial.jpg]]" <em>(El Escorial nabij Madrid. Eigen foto &#91;&#91;Gebruiker:Markv]], april 2000)</em></li> <li>28 nov 2004 20:57 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Donan3.jpg|Donan3.jpg]]" <em>(tweede poging opladen verbeterde versie eigen foto)</em></li> <li>28 nov 2004 20:53 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Donan3.jpg|Donan3.jpg]]" <em>(verbeterde versie van eigen foto)</em></li> <li>28 nov 2004 19:33 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Parkeerautomaat.jpg|Parkeerautomaat.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>28 nov 2004 19:26 [[Gebruiker:BenTheWikiMan|BenTheWikiMan]] heeft ge-upload: "[[:Afbeelding:3d-extrude.png|3d-extrude.png]]" <em>(3d-demonstratie extrude, eigen werk, gemaakt met open source programma &quot;Art Of Illusion&quot; &#123;&#123;PD}})</em></li> <li>28 nov 2004 19:17 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Straatparkeren.jpg|Straatparkeren.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>28 nov 2004 19:16 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Parkeergarage.jpg|Parkeergarage.jpg]]" <em>(&#123;&#123;eigenwerk}})</em></li> <li>28 nov 2004 17:54 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:LocatieZuidbroek.png|LocatieZuidbroek.png]]" <em>(Locatie van Zuidbroek, aangegeven op &#91;&#91;:Afbeelding:LocatieMenterwolde.png]] van &#91;&#91;Gebruiker:Mtcv]], publiek domein &#123;&#123;PD}})</em></li> <li>28 nov 2004 16:33 [[Gebruiker:Taka|Taka]] heeft ge-upload: "[[:Afbeelding:Belly-button.jpg|Belly-button.jpg]]" <em>(GFDL (vanaf engelse wikipedia))</em></li> <li>28 nov 2004 15:58 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Flitspaal_Zwolle.jpg|Flitspaal_Zwolle.jpg]]" <em>(Flitspaal aan de Zwartewaterallee (Zwolle), eigen foto, &#123;&#123;PD}})</em></li> <li>5 jul 2004 10:11 [[Gebruiker:Gerritholl|Gerritholl]] heeft ge-upload: "[[:Afbeelding:Ledend66.png|Ledend66.png]]" <em>(Ledentallen D66: met gnuplot door ondergetekende geproduceerde .png op basis van informatie van het DNPP (nu goed))</em></li> <li>5 jul 2004 10:09 [[Gebruiker:Gerritholl|Gerritholl]] heeft ge-upload: "[[:Afbeelding:Ledencda.png|Ledencda.png]]" <em>(Ledentallen CDA: met gnuplot door ondergetekende geproduceerde .png op basis van informatie van het DNPP (NOG een poging))</em></li> <li>5 jul 2004 10:06 [[Gebruiker:Gerritholl|Gerritholl]] heeft ge-upload: "[[:Afbeelding:Ledencda.png|Ledencda.png]]" <em>(Ledentallen CDA: met gnuplot door ondergetekende geproduceerde .png op basis van informatie van het DNPP (nu goed))</em></li> <li>5 jul 2004 10:03 [[Gebruiker:Gerritholl|Gerritholl]] heeft ge-upload: "[[:Afbeelding:Ledencda.png|Ledencda.png]]" <em>(Ledentallen CDA: met gnuplot door ondergetekende geproduceerde .png op basis van informatie van het DNPP)</em></li> <li>5 jul 2004 09:54 [[Gebruiker:Gerritholl|Gerritholl]] heeft ge-upload: "[[:Afbeelding:Ledend66.png|Ledend66.png]]" <em>(Ledentallen D66: met gnuplot door ondergetekende geproduceerde .png op basis van informatie van het DNPP)</em></li> <li>5 jul 2004 09:38 [[Gebruiker:Gerritholl|Gerritholl]] heeft ge-upload: "[[:Afbeelding:Ledenvvd.png|Ledenvvd.png]]" <em>(Ledentallen VVD: met gnuplot door ondergetekende geproduceerde .png op basis van informatie van het DNPP)</em></li> <li>5 jul 2004 09:11 [[Gebruiker:Napoleon Vier|Napoleon Vier]] heeft ge-upload: "[[:Afbeelding:Petersen.JPG|Petersen.JPG]]" <em>(eigen werk)</em></li> <li>5 jul 2004 08:57 [[Gebruiker:Gerritholl|Gerritholl]] heeft ge-upload: "[[:Afbeelding:Ledenpvda.png|Ledenpvda.png]]" <em>(Ledentallen PVDA: met gnuplot door ondergetekende geproduceerde .png op basis van informatie van het DNPP)</em></li> <li>5 jul 2004 08:08 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Witte_Paal.png|Witte_Paal.png]]" <em>(Locatie van Witte Paal in &#91;&#91;Overijssel]]. Afbeelding is een uitsnede van &#91;&#91;Afbeelding:Rijkswegenkaart.png]], gemaakt door Lennart Bolks en door hem in het public domain geplaatst. &#123;&#123;msg:PD}})</em></li> <li>4 jul 2004 22:28 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Novocaine.png|Novocaine.png]]" <em>(Novocaine van wiki-en ontdaan van engelse tekst)</em></li> <li>4 jul 2004 20:56 [[Gebruiker:Napoleon Vier|Napoleon Vier]] heeft ge-upload: "[[:Afbeelding:Platoon.JPG|Platoon.JPG]]" <em>(eigen werk)</em></li> <li>4 jul 2004 20:46 [[Gebruiker:Napoleon Vier|Napoleon Vier]] heeft ge-upload: "[[:Afbeelding:Elgin.JPG|Elgin.JPG]]" <em>(eigen werk)</em></li> <li>4 jul 2004 20:30 [[Gebruiker:Hjvannes|Hjvannes]] heeft ge-upload: "[[:Afbeelding:Wijk_aan_Zee_1.jpg|Wijk_aan_Zee_1.jpg]]" <em>(Eigen werk)</em></li> <li>4 jul 2004 20:29 [[Gebruiker:Hjvannes|Hjvannes]] heeft ge-upload: "[[:Afbeelding:Wijk_aan_Zee_2.jpg|Wijk_aan_Zee_2.jpg]]" <em>(Eigen werk)</em></li> <li>4 jul 2004 20:26 [[Gebruiker:Hjvannes|Hjvannes]] heeft ge-upload: "[[:Afbeelding:Wijk_aan_Zee_2.jpg|Wijk_aan_Zee_2.jpg]]" <em>(Eigen werk)</em></li> <li>4 jul 2004 18:19 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Armeensegenocide.jpg|Armeensegenocide.jpg]]" <em>(Armenen, afgeslacht door de Turken (public domain van http&#58;//www.gwpda.org/photos/greatwar.htm))</em></li> <li>4 jul 2004 18:05 [[Gebruiker:Ladino|Ladino]] heeft ge-upload: "[[:Afbeelding:Darco-tmb.jpg|Darco-tmb.jpg]]" <em>(Mini afbeeelding van Darco en Ludo)</em></li> <li>4 jul 2004 17:59 [[Gebruiker:Ladino|Ladino]] heeft ge-upload: "[[:Afbeelding:Darco.jpg|Darco.jpg]]" <em>(Darco met Ludo Philippaerts tijdens de olympische spelen te Barcelona in 1992 (7de plaats))</em></li> <li>4 jul 2004 17:00 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Akkerhommel_angel.jpg|Akkerhommel_angel.jpg]]" <em>(zelfgemaakte foto van angel van Akkerhommel)</em></li> <li>4 jul 2004 14:12 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Ccool.jpg|Ccool.jpg]]" <em>(Calvin Coolidge&lt;br&gt;Bron: Wikipedia.en&lt;br&gt;Aangenomen licentie: &#123;&#123;GFDL}})</em></li> <li>4 jul 2004 04:54 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:SophieHohenzollern.jpg|SophieHohenzollern.jpg]]" <em>(Sophie van Griekenland (public domain van http&#58;//www.gwpda.org/photos/greatwar.htm))</em></li> <li>4 jul 2004 04:35 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FerdinandWilhelm.jpg|FerdinandWilhelm.jpg]]" <em>(Ferdand van Roemenië ontmoet keizer Wilhelm II te NiÅ¡ (public domain van http&#58;//www.gwpda.org/photos/greatwar.htm))</em></li> <li>4 jul 2004 00:14 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:NiccoloPaganini.jpg|NiccoloPaganini.jpg]]" <em>(Paganini van wiki-en: PD: Coal drawing by J. A. D. Ingres, c. 1819)</em></li> <li>3 jul 2004 23:14 [[Gebruiker:Napoleon Vier|Napoleon Vier]] heeft ge-upload: "[[:Afbeelding:Plato.JPG|Plato.JPG]]" <em>(eigen werk)</em></li> <li>3 jul 2004 22:22 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AquilegiaVulgaris-closeup-hr.jpg|AquilegiaVulgaris-closeup-hr.jpg]]" <em>(&#91;&#91;den Haag]], Florence Nightingalepark, &#123;&#123;eigenwerk}})</em></li> <li>3 jul 2004 21:29 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Madeliefje-overz-kl.jpg|Madeliefje-overz-kl.jpg]]" <em>(&#123;&#123;eigenwerk}}, schouwen duiveland, 3 mei 2004)</em></li> <li>3 jul 2004 21:04 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:KorpLu.png|KorpLu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 21:04 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:KapLu.png|KapLu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:45 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:VaandrigLu.png|VaandrigLu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:44 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Soldaat3Lu.png|Soldaat3Lu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:44 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Soldaat1Lu.png|Soldaat1Lu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:43 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:SgtMajoorLu.png|SgtMajoorLu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:43 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:SgtLu.png|SgtLu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:43 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Sgt1Lu.png|Sgt1Lu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:42 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:MajoorLu.png|MajoorLu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:42 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:LtKolLu.png|LtKolLu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:41 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:LtGenLu.png|LtGenLu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:41 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Lt2Lu.png|Lt2Lu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:41 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Lt1Lu.png|Lt1Lu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:40 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Korp1Lu.png|Korp1Lu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:40 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:KolLu.png|KolLu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:39 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:GenMajLu.png|GenMajLu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:39 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:GenLu.png|GenLu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:39 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Commodore.png|Commodore.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:38 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:AdjudantLu.png|AdjudantLu.png]]" <em>(Luchtmachtrangteken; naar publicatie van de Koninklijke Luchtmacht)</em></li> <li>3 jul 2004 20:37 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:VaandrigLg.png|VaandrigLg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:37 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Soldaat1Lg.png|Soldaat1Lg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:36 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Soldaat.png|Soldaat.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:36 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:SgtMajoorLg.png|SgtMajoorLg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:34 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:SgtLg.png|SgtLg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:34 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Sgt1Lg.png|Sgt1Lg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:34 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:MajoorLg.png|MajoorLg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:33 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:LtKolLg.png|LtKolLg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:33 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:LtGenLg.png|LtGenLg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:32 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Lt2Lg.png|Lt2Lg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:32 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Lt1Lg.png|Lt1Lg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:31 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:KorpLg.png|KorpLg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:31 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Korp1Lg.png|Korp1Lg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:31 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:KolLg.png|KolLg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:30 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:KapLg.png|KapLg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:29 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:GenMajLg.png|GenMajLg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:29 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:GenLg.png|GenLg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:28 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:BgGen.png|BgGen.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:27 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:AdjudantLg.png|AdjudantLg.png]]" <em>(Legerrangteken; naar publicatie van de Koninklijke Landmacht)</em></li> <li>3 jul 2004 20:10 [[Gebruiker:Brinkia|Brinkia]] heeft ge-upload: "[[:Afbeelding:Heule.jpg|Heule.jpg]]" <em>(standbeeld Tineke van Heule in het centrum van Heule, foto genomen door mezelf)</em></li> <li>3 jul 2004 19:31 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:VAdmiraal.png|VAdmiraal.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:30 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:SgtMar.png|SgtMar.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:30 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:SgtMajoorMar.png|SgtMajoorMar.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:30 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:SchoutBijNacht.png|SchoutBijNacht.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:29 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Matroos3.png|Matroos3.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:29 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Matroos2.png|Matroos2.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:28 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Matroos1.png|Matroos1.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:28 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:LtTZ3.png|LtTZ3.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:28 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:LtTZ2o.png|LtTZ2o.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:27 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:LtTZ2.png|LtTZ2.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:27 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:LtTZ1.png|LtTZ1.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:27 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:LtAdmiraal.png|LtAdmiraal.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:26 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:KorpMar.png|KorpMar.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:26 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:KapiteinTerZee.png|KapiteinTerZee.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:25 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:KapLuitTerZee.png|KapLuitTerZee.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:25 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Commandeur.png|Commandeur.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:24 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Admiraal.png|Admiraal.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:24 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:AdjudantMar.png|AdjudantMar.png]]" <em>(Marinerangteken; naar publicatie van de Koninklijke Marine)</em></li> <li>3 jul 2004 19:05 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:Echinacea_pupurea.JPG|Echinacea_pupurea.JPG]]" <em>(eigen foto van bij ons in de tuin)</em></li> <li>3 jul 2004 18:57 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:Echinacea_pururea.JPG|Echinacea_pururea.JPG]]" <em>(eigen foto van bij ons in de tuin)</em></li> <li>3 jul 2004 18:16 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Kaart_Frankrijk_Departement_06.png|Kaart_Frankrijk_Departement_06.png]]"</li> <li>3 jul 2004 18:16 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Wapenschild_Alpes_Maritimes.gif|Wapenschild_Alpes_Maritimes.gif]]"</li> <li>3 jul 2004 17:46 [[Gebruiker:Brinkia|Brinkia]] heeft ge-upload: "[[:Afbeelding:Kortrijk_broeltorens.JPG|Kortrijk_broeltorens.JPG]]" <em>(Broeltorens in Kortrijk, foto door mezelf genomen)</em></li> <li>3 jul 2004 17:31 [[Gebruiker:Brinkia|Brinkia]] heeft ge-upload: "[[:Afbeelding:Rumolduskerk_heikant.jpg|Rumolduskerk_heikant.jpg]]" <em>(Kerk Sint-Rumoldus in Berlaar Heikant, foto door mezelf genomen)</em></li> <li>3 jul 2004 17:14 [[Gebruiker:Brinkia|Brinkia]] heeft ge-upload: "[[:Afbeelding:Steen.JPG|Steen.JPG]]" <em>(Het Steen met ervoor het beeld van Lange Wapper, foto door mijzelf genomen)</em></li> <li>3 jul 2004 16:29 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Sappho.jpg|Sappho.jpg]]" <em>(Sappho (public domain van http&#58;//www.lib.utexas.edu/photodraw/portraits/index.html))</em></li> <li>3 jul 2004 16:18 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:PeterIJoego2.jpg|PeterIJoego2.jpg]]" <em>(Peter I van Servië/Joegoslavië (http&#58;//www.gwpda.org/photos/greatwar.htm))</em></li> <li>3 jul 2004 16:10 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:VictorEmanuelIIIwo1.jpg|VictorEmanuelIIIwo1.jpg]]" <em>(Victor Emanuel III tijdens WO1 (public domain van http&#58;//www.gwpda.org/photos/greatwar.htm))</em></li> <li>3 jul 2004 15:45 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Brando.jpg|Brando.jpg]]" <em>(Van Engelse pagina: public domain)</em></li> <li>3 jul 2004 14:27 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Wapenschild_Hautes-Alpes.gif|Wapenschild_Hautes-Alpes.gif]]"</li> <li>3 jul 2004 14:26 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Kaart_Frankrijk_Departement_05.png|Kaart_Frankrijk_Departement_05.png]]"</li> <li>3 jul 2004 13:53 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:VlagTilburg.png|VlagTilburg.png]]" <em>(Vlag gemeente Tilburg. Eigen werk.)</em></li> <li>3 jul 2004 13:40 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:JohanSaksen.jpg|JohanSaksen.jpg]]" <em>(Johan van Saksen (van Duitse Wiki))</em></li> <li>3 jul 2004 13:39 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:JohanSaksen.gif|JohanSaksen.gif]]" <em>(Johan van Saksen ligt opgebaard (&quot;Canadian Illustrated News, Vol. VIII, No. 26, Page 405. Reproduced from the National Library of Canada&#39;s website http&#58;//www.collectionscanada.ca/index-e.html - vrij te gebruiken mits met deze bronvermelding))</em></li> <li>3 jul 2004 11:59 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FrederikAugustII.jpg|FrederikAugustII.jpg]]" <em>(Koning Frederik August II van Saksen (van Duitse Wiki))</em></li> <li>3 jul 2004 10:12 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:MarcusAureliusCapitolijn.jpg|MarcusAureliusCapitolijn.jpg]]" <em>(Foto van (replica van) het beeld van Marcus Aurelius. Eigen foto, GFDL.)</em></li> <li>3 jul 2004 09:42 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:ResedaLutea-plant-kl.jpg|ResedaLutea-plant-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein GoudsePoort, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>3 jul 2004 09:41 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:ResedaLutea-overz-kl.jpg|ResedaLutea-overz-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein GoudsePoort, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>3 jul 2004 09:40 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:ResedaLutea-closeup-kl.jpg|ResedaLutea-closeup-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein GoudsePoort, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>3 jul 2004 09:40 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:ResedaLutea-blad-kl.jpg|ResedaLutea-blad-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein GoudsePoort, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>3 jul 2004 09:35 [[Gebruiker:Napoleon Vier|Napoleon Vier]] heeft ge-upload: "[[:Afbeelding:Aspasia.JPG|Aspasia.JPG]]" <em>(eigen werk)</em></li> <li>3 jul 2004 09:32 [[Gebruiker:Napoleon Vier|Napoleon Vier]] heeft ge-upload: "[[:Afbeelding:Aspasia.jpg|Aspasia.jpg]]" <em>(eigen werk)</em></li> <li>3 jul 2004 00:48 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Berlioz.jpg|Berlioz.jpg]]" <em>(Berlioz van wiki-en (PD aldaar - logisch wegens ouderdom))</em></li> <li>2 jul 2004 21:16 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Wankel-1.jpg|Wankel-1.jpg]]" <em>(Wankelmort van de: Eigen fot van &#91;&#91;:de:Benutzer:Softeis]] vrijgegeven onder GNU/FDL &#123;&#123;msg:GFDL}} &#91;&#91;de:Bild:Wankel-1.jpg]])</em></li> <li>2 jul 2004 20:04 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:AntonSaksen.jpg|AntonSaksen.jpg]]" <em>(Koning Anton van Saksen (van Duitse Wiki))</em></li> <li>2 jul 2004 18:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:VitamineD3.png|VitamineD3.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Structure de la &#39;&#39;&#39;vitamine D3&#39;&#39;&#39; Auteur : &#91;&#91;Utilisateur:Yohan&#124;Yohan]] Source : Crée avec MarvinSketch Licence : GFLD &#91;&#91;fr:Image:vitamineD3.png]])</em></li> <li>2 jul 2004 18:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:VitamineD2.png|VitamineD2.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Structure de la &#39;&#39;&#39;vitamine D2&#39;&#39;&#39; Auteur : &#91;&#91;Utilisateur:Yohan&#124;Yohan]] Source : Crée avec MarvinSketch Licence : GFLD &#91;&#91;fr:Image:vitamineD2.png]])</em></li> <li>2 jul 2004 18:27 [[Gebruiker:Snoop|Snoop]] heeft ge-upload: "[[:Afbeelding:Ginagershon001.jpg|Ginagershon001.jpg]]" <em>(van engelse wiki)</em></li> <li>2 jul 2004 17:41 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Geborenworden.PNG|Geborenworden.PNG]]" <em>(Bewerkte versie van de afbeelding die &#91;&#91;Gebruiker:Sepoki]] maakte: overbodige rand van enkele pixels er af geknipt, en bestand beter gecomprimeerd)</em></li> <li>2 jul 2004 17:41 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Doodgaan.PNG|Doodgaan.PNG]]" <em>(Bewerkte versie van de afbeelding die &#91;&#91;Gebruiker:Sepoki]] maakte: overbodige rand van enkele pixels er af geknipt, en bestand beter gecomprimeerd)</em></li> <li>2 jul 2004 17:40 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Dimitrov.jpg|Dimitrov.jpg]]" <em>(Georgi Dimitrov (van Engelse Wiki))</em></li> <li>2 jul 2004 17:40 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Blijvenleven.PNG|Blijvenleven.PNG]]" <em>(Bewerkte versie van de afbeelding die &#91;&#91;Gebruiker:Sepoki]] maakte: overbodige rand van enkele pixels er af geknipt, en bestand beter gecomprimeerd)</em></li> <li>2 jul 2004 15:16 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Wapenschild_Alpes-de-Haute-Provence.gif|Wapenschild_Alpes-de-Haute-Provence.gif]]"</li> <li>2 jul 2004 15:16 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Kaart_Frankrijk_Departement_04.png|Kaart_Frankrijk_Departement_04.png]]"</li> <li>2 jul 2004 14:26 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:WillemIW.jpg|WillemIW.jpg]]" <em>(Willem I van Württemberg (te oud voor copyright))</em></li> <li>2 jul 2004 14:23 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:AndreMarieAmpere.jpg|AndreMarieAmpere.jpg]]" <em>(Ampere van wiki-en (PD wegens ouderdom))</em></li> <li>2 jul 2004 13:30 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FrederiKAugustI.jpg|FrederiKAugustI.jpg]]" <em>(Koning Frederik August I van Saksen (van Duitse Wiki))</em></li> <li>2 jul 2004 12:32 [[Gebruiker:N. Steensma|N. Steensma]] heeft ge-upload: "[[:Afbeelding:Satyr.gif|Satyr.gif]]"</li> <li>2 jul 2004 11:53 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Singapore_lrt.jpg|Singapore_lrt.jpg]]"</li> <li>2 jul 2004 11:50 [[Gebruiker:N. Steensma|N. Steensma]] heeft ge-upload: "[[:Afbeelding:Apollo_en_Marsyas.jpg|Apollo_en_Marsyas.jpg]]"</li> <li>2 jul 2004 11:49 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Singapore-bukit1x.jpg|Singapore-bukit1x.jpg]]" <em>(lijnnetkaart LRT)</em></li> <li>2 jul 2004 11:42 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Fracx100.jpg|Fracx100.jpg]]" <em>(people mover op luchthaven frankfurt)</em></li> <li>2 jul 2004 09:32 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Invoegen.jpg|Invoegen.jpg]]"</li> <li>2 jul 2004 08:08 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Weefvak.jpg|Weefvak.jpg]]" <em>(getekend weefvak)</em></li> <li>2 jul 2004 02:20 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_voulwammes.jpg|Geul_voulwammes.jpg]]" <em>(De monding van de Geul bij Voulwammes)</em></li> <li>2 jul 2004 02:18 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_voor_plombieres.jpg|Geul_voor_plombieres.jpg]]" <em>(De Geul bij Plombieres)</em></li> <li>2 jul 2004 02:07 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_stockem.jpg|Geul_stockem.jpg]]" <em>(De Geul bij de Gronsele put tussen Wijlre en Schin op Geul)</em></li> <li>2 jul 2004 02:01 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_mechelen.jpg|Geul_mechelen.jpg]]" <em>(Prachtig wandelen langs de Geul bij Mechelen)</em></li> <li>2 jul 2004 01:57 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_monding.jpg|Geul_monding.jpg]]" <em>(De Monding van de Geul in Voulwammes)</em></li> <li>2 jul 2004 01:53 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_plombieres.jpg|Geul_plombieres.jpg]]" <em>(De Geul bij Plombieres)</em></li> <li>2 jul 2004 01:40 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_monding.jpg|Geul_monding.jpg]]" <em>(De monding van de Geul in Voulwammes)</em></li> <li>2 jul 2004 01:39 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_plombieres.jpg|Geul_plombieres.jpg]]" <em>(De Geul bij Plombieres)</em></li> <li>2 jul 2004 01:36 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_monding.jpg|Geul_monding.jpg]]" <em>(De monding van de Geul in Voulwammes)</em></li> <li>2 jul 2004 01:36 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_monding.jpg|Geul_monding.jpg]]" <em>(De monding van de Geul in Voulwammes)</em></li> <li>2 jul 2004 01:34 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_plombieres.jpg|Geul_plombieres.jpg]]" <em>(De Geul bij Plombieres)</em></li> <li>2 jul 2004 01:32 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_plombieres.jpg|Geul_plombieres.jpg]]" <em>(De Geul Bij Plombieres)</em></li> <li>2 jul 2004 01:16 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_monding.jpg|Geul_monding.jpg]]" <em>(De monding van de Geul in Voulwammes)</em></li> <li>2 jul 2004 01:11 [[Gebruiker:Gdonners|Gdonners]] heeft ge-upload: "[[:Afbeelding:Geul_plombieres.jpg|Geul_plombieres.jpg]]" <em>(Geul Plombieres)</em></li> <li>1 jul 2004 23:12 [[Gebruiker:N. Steensma|N. Steensma]] heeft ge-upload: "[[:Afbeelding:Medusa.gif|Medusa.gif]]"</li> <li>1 jul 2004 22:19 [[Gebruiker:N. Steensma|N. Steensma]] heeft ge-upload: "[[:Afbeelding:Perseus.jpg|Perseus.jpg]]"</li> <li>1 jul 2004 21:15 [[Gebruiker:N. Steensma|N. Steensma]] heeft ge-upload: "[[:Afbeelding:Gorgo_antefix2.jpg|Gorgo_antefix2.jpg]]"</li> <li>1 jul 2004 21:04 [[Gebruiker:N. Steensma|N. Steensma]] heeft ge-upload: "[[:Afbeelding:Gorgo_antefix.jpg|Gorgo_antefix.jpg]]"</li> <li>1 jul 2004 19:49 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Lclive.JPG|Lclive.JPG]]" <em>(foto tijdens concert genomen)</em></li> <li>1 jul 2004 19:43 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Bertladen.jpg|Bertladen.jpg]]"</li> <li>1 jul 2004 19:13 [[Gebruiker:N. Steensma|N. Steensma]] heeft ge-upload: "[[:Afbeelding:Herme.gif|Herme.gif]]"</li> <li>1 jul 2004 19:03 [[Gebruiker:N. Steensma|N. Steensma]] heeft ge-upload: "[[:Afbeelding:Dubbele_herme.jpg|Dubbele_herme.jpg]]"</li> <li>1 jul 2004 18:01 [[Gebruiker:Gerritholl|Gerritholl]] heeft ge-upload: "[[:Afbeelding:Ledensp.png|Ledensp.png]]" <em>(Met gnuplot geproduceerde grafiek van aantal leden van de SP als functie van de tijd. Bron informatie: DNPP. Deze afbeelding is .png en door mij zelf gemaakt, en bij dezen cadeau gedaan aan het publieke domein.)</em></li> <li>1 jul 2004 17:27 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Cassini_ringen.jpg|Cassini_ringen.jpg]]" <em>(Foto vanacht genomen van ringen. Afkomstig van website JPL.)</em></li> <li>1 jul 2004 14:12 [[Gebruiker:Sepoki|Sepoki]] heeft ge-upload: "[[:Afbeelding:Geborenworden.PNG|Geborenworden.PNG]]" <em>(Illustratie om een voorbeeld te geven van een situatie waarin een cel geboren wordt in game of life, deze afbeelding is zelf getekend door mij in Paint)</em></li> <li>1 jul 2004 14:03 [[Gebruiker:Sepoki|Sepoki]] heeft ge-upload: "[[:Afbeelding:Doodgaan.PNG|Doodgaan.PNG]]" <em>(Illustratie om een voorbeeld te geven van een situatie waarin een cel dood gaat in game of life, deze afbeelding is zelf getekend door mij in Paint)</em></li> <li>1 jul 2004 13:52 [[Gebruiker:Sepoki|Sepoki]] heeft ge-upload: "[[:Afbeelding:Blijvenleven.PNG|Blijvenleven.PNG]]" <em>(Illustratie om een voorbeeld te geven van een situatie waarin een cel blijft leven, deze afbeelding is zelf getekend door mij in Paint)</em></li> <li>1 jul 2004 13:16 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:GeorgePatton.jpg|GeorgePatton.jpg]]" <em>(Patton van wiki-en (GFDL wegen library of congress))</em></li> <li>1 jul 2004 12:28 [[Gebruiker:Neep|Neep]] heeft ge-upload: "[[:Afbeelding:LogoZwaag.jpg|LogoZwaag.jpg]]" <em>(logo van de gemeente Zwaag)</em></li> <li>1 jul 2004 11:30 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:RudolfHoess.jpg|RudolfHoess.jpg]]" <em>(Hoess van wikipedia en)</em></li> <li>1 jul 2004 11:25 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:HjalmarSchacht.jpg|HjalmarSchacht.jpg]]" <em>(Hjalmar Schacht (van Engelse Wiki))</em></li> <li>1 jul 2004 11:19 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:HorthyHitler.jpg|HorthyHitler.jpg]]" <em>(Miklós Horthy met Adolf Hitler (van Engelse Wiki))</em></li> <li>1 jul 2004 10:38 [[Gebruiker:N. Steensma|N. Steensma]] heeft ge-upload: "[[:Afbeelding:S.V._Rachmaninov.gif|S.V._Rachmaninov.gif]]"</li> <li>1 jul 2004 10:01 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Metternich.jpg|Metternich.jpg]]" <em>(Metternich (zelfde als vorige versie maar onderschrift erafgeknipt en wat verkleind))</em></li> <li>1 jul 2004 07:04 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Wortel_Amsterdamse_Bak.jpg|Wortel_Amsterdamse_Bak.jpg]]" <em>(zelfgemaakte foto van peen Amsterdamse Bak)</em></li> <li>1 jul 2004 07:02 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Wortel_winter_Flakkeese.jpg|Wortel_winter_Flakkeese.jpg]]" <em>(zelfgemaakte foto van winterwortelen)</em></li> <li>30 jun 2004 20:05 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:ScrophulariaVernalis-overz-hr.jpg|ScrophulariaVernalis-overz-hr.jpg]]" <em>(&#91;&#91;Scheveningen&#124;Scheveningse]] &#91;&#91;duin]]en, 24 april 2004, &#123;&#123;eigenwerk}})</em></li> <li>30 jun 2004 20:04 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:ScrophulariaVernalis-closeup-hr.jpg|ScrophulariaVernalis-closeup-hr.jpg]]" <em>(&#91;&#91;Scheveningen&#124;Scheveningse]] &#91;&#91;duin]]en, 24 april 2004, &#123;&#123;eigenwerk}})</em></li> <li>30 jun 2004 20:03 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:ScrophulariaVernalis-closeup-hr.jpg|ScrophulariaVernalis-closeup-hr.jpg]]" <em>(&#91;&#91;Scheveningen&#124;Scheveningse]] &#91;&#91;duin]]en, 24 april 2004, &#123;&#123;eigenwerk}})</em></li> <li>30 jun 2004 20:03 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:ScrophulariaVernalis-bloem-hr.jpg|ScrophulariaVernalis-bloem-hr.jpg]]" <em>(&#91;&#91;Scheveningen&#124;Scheveningse]] &#91;&#91;duin]]en, 24 april 2004, &#123;&#123;eigenwerk}})</em></li> <li>30 jun 2004 20:02 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:ScrophulariaVernalis-blad-hr.jpg|ScrophulariaVernalis-blad-hr.jpg]]" <em>(&#91;&#91;Scheveningen&#124;Scheveningse]] &#91;&#91;duin]]en, 24 april 2004, &#123;&#123;eigenwerk}})</em></li> <li>30 jun 2004 20:01 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:ScrophulariaVernalis-plant-hr.jpg|ScrophulariaVernalis-plant-hr.jpg]]" <em>(&#91;&#91;Scheveningen&#124;Scheveningse]] &#91;&#91;duin]]en, 24 april 2004, &#123;&#123;eigenwerk}})</em></li> <li>30 jun 2004 18:19 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Paddy_Ashdown.jpg|Paddy_Ashdown.jpg]]" <em>(en:wikipedia)</em></li> <li>30 jun 2004 17:42 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Spoorstroomloop.png|Spoorstroomloop.png]]" <em>(paar foutjes eruit gehaald.)</em></li> <li>30 jun 2004 17:41 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Radovan.jpg|Radovan.jpg]]" <em>(en:wikipedia)</em></li> <li>30 jun 2004 17:34 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Spoorstroomloop.png|Spoorstroomloop.png]]" <em>(betere tekening, eigen werk, &#123;&#123;PD}})</em></li> <li>30 jun 2004 17:22 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Fun_diagram.jpg|Fun_diagram.jpg]]"</li> <li>30 jun 2004 16:23 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Metternich.jpg|Metternich.jpg]]" <em>((zelfde als vorige maar betere kwaliteit))</em></li> <li>30 jun 2004 16:16 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Metternich.jpg|Metternich.jpg]]" <em>(Metternich (schilder ongetwijfeld langer dan 70 jaar dood; bovendien dezelfde afbeelding als op en: en de: maar dan in kleur))</em></li> <li>30 jun 2004 15:08 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Radetzky.jpg|Radetzky.jpg]]" <em>(Josef Radetzky von Radetz (gestorven 1858 dus de schilder hiervan is ongetwijfeld al 70 jaar dood))</em></li> <li>30 jun 2004 13:43 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Kurtvonschuschnigg.jpg|Kurtvonschuschnigg.jpg]]" <em>(Kurt von Schuschnigg (van Engelse Wiki))</em></li> <li>30 jun 2004 10:43 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:PavelicHitler.jpg|PavelicHitler.jpg]]" <em>(Ante Pavelic met Adolf Hitler (van Engelse Wiki))</em></li> <li>30 jun 2004 10:43 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:AntePavelic.jpg|AntePavelic.jpg]]" <em>(Ante Pavelic (van Engelse Wiki))</em></li> <li>30 jun 2004 10:30 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:TitoGadaffi.jpg|TitoGadaffi.jpg]]" <em>(Tito met Moammar Gadaffi (van Engelse Wiki))</em></li> <li>30 jun 2004 09:36 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Faure.jpg|Faure.jpg]]" <em>(Gabriel Fauré - foto ouder dan 70 jaar)</em></li> <li>30 jun 2004 09:15 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Indirag.jpg|Indirag.jpg]]" <em>(en:wikipedia)</em></li> <li>30 jun 2004 09:13 [[Gebruiker:Napoleon Vier|Napoleon Vier]] heeft ge-upload: "[[:Afbeelding:Koning_otto.jpg|Koning_otto.jpg]]" <em>(eigen archief)</em></li> <li>30 jun 2004 08:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Ontwk.jpg|Ontwk.jpg]]" <em>(Fritz8 - print)</em></li> <li>30 jun 2004 07:30 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Schede_Tuinhommelkoningin_op_braam.jpg|Schede_Tuinhommelkoningin_op_braam.jpg]]" <em>(zelfgemaakte foto van een Tuinhommelkoningin op braam; half juni)</em></li> <li>30 jun 2004 05:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bota.jpg|Bota.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;Boris Tadic]] &amp;mdash; picture is from website of national assembly. Copyright sign refers to the design of the website not contents &#91;&#91;en:Image:Bota.jpg]])</em></li> <li>29 jun 2004 22:56 [[Gebruiker:Napoleon Vier|Napoleon Vier]] heeft ge-upload: "[[:Afbeelding:Justus_1.jpg|Justus_1.jpg]]" <em>(eigen werk)</em></li> <li>29 jun 2004 22:50 [[Gebruiker:Napoleon Vier|Napoleon Vier]] heeft ge-upload: "[[:Afbeelding:Lipsius1.JPG|Lipsius1.JPG]]" <em>(eigen werk)</em></li> <li>29 jun 2004 20:55 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Loekie.JPG|Loekie.JPG]]" <em>(eigen foto)</em></li> <li>29 jun 2004 20:54 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Cocker2.JPG|Cocker2.JPG]]" <em>(eigen foto)</em></li> <li>29 jun 2004 20:54 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Cocker1.JPG|Cocker1.JPG]]" <em>(eigen foto)</em></li> <li>29 jun 2004 19:53 [[Gebruiker:Michiel1972|Michiel1972]] heeft ge-upload: "[[:Afbeelding:Acadiane.jpg|Acadiane.jpg]]" <em>(Acadiane (eigen foto))</em></li> <li>29 jun 2004 19:49 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Napelsgeel.png|Napelsgeel.png]]" <em>(Napels geel, eigen werk, ter beschikking gesteld onder GFDL)</em></li> <li>29 jun 2004 18:56 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Bunch_of_radishes.jpg|Bunch_of_radishes.jpg]]"</li> <li>29 jun 2004 18:56 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Bunch_of_radishes.jpg|Bunch_of_radishes.jpg]]"</li> <li>29 jun 2004 17:44 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Wapenschild_Allier.gif|Wapenschild_Allier.gif]]"</li> <li>29 jun 2004 17:42 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Wapenschiild_Allier.gif|Wapenschiild_Allier.gif]]"</li> <li>29 jun 2004 16:08 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Bruceroutes2.PNG|Bruceroutes2.PNG]]" <em>(Routes van &#91;&#91;James Bruce]]. Gemaakt door &#91;&#91;Gebruiker:Andre Engels&#124;Andre Engels]] op een kaart van de CIA, vertaald door &#91;&#91;Gebruiker:Danielm&#124;Danielm]]. Zie &#91;&#91;Media:Kaart Afrika.jpg]] voor het origineel. &#123;&#123;msg:PD}})</em></li> <li>29 jun 2004 15:28 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:KingVulturepubdom.jpg|KingVulturepubdom.jpg]]" <em>(en:wikipedia)</em></li> <li>29 jun 2004 14:49 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Hertshoorn.jpg|Hertshoorn.jpg]]" <em>(Hertshoornvaren (eigen foto, public domain - bij nader inzien was de vorige geüploade foto gekanteld))</em></li> <li>29 jun 2004 14:29 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Hertshoorn.jpg|Hertshoorn.jpg]]" <em>(Hertshoornvaren (eigen foto, public domain))</em></li> <li>29 jun 2004 11:38 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Boog-en-middelpuntshoek-cirkel.png|Boog-en-middelpuntshoek-cirkel.png]]" <em>(cirkel met een boog en zijn middelpuntshoek aangeduid - gemaakt door Wilinckx en hierbij in het publiek domein geplaatst)</em></li> <li>29 jun 2004 10:25 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:TitoCastro.jpg|TitoCastro.jpg]]" <em>(Tito met Fidel Castro (van Engelse Wiki))</em></li> <li>29 jun 2004 10:23 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Tito2.jpg|Tito2.jpg]]" <em>(Tito met Ivan Ribar, 13 juni 1943 (van Engelse Wiki))</em></li> <li>29 jun 2004 10:18 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Tito.jpg|Tito.jpg]]" <em>(Josip Broz Tito (van Engelse Wiki))</em></li> <li>29 jun 2004 09:38 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Middelpunt-cirkel.png|Middelpunt-cirkel.png]]" <em>(middelpunt van een cirkel - gemaakt door Wilinckx met behulp van Dia, &#91;&#91;The Gimp]] en optipng. Indien er copyright kan vallen op zulke eenvoudige afbeeldingen plaats ik deze afbeelding hierbij onder publiek domein)</em></li> <li>29 jun 2004 08:50 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Diameter-cirkel.png|Diameter-cirkel.png]]" <em>(diameter van een cirkel - gemaakt door Wilinckx met behulp van Dia, &#91;&#91;The Gimp]] en optipng. Indien er copyright kan vallen op zo een eenvoudige afbeelding plaats ik deze afbeelding hierbij in het publiek domein)</em></li> <li>29 jun 2004 08:42 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Straal-cirkel.png|Straal-cirkel.png]]" <em>(Straal van een cirkel - gemaakt door Wilinckx met behulp van Dia, &#91;&#91;The Gimp]] en optipng. Indien er copyright kan vallen op zulk een eenvoudige afbeelding plaats ik deze afbeelding hierbij in het publiek domein)</em></li> <li>29 jun 2004 08:30 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Hommelnest_binnenkant.jpg|Hommelnest_binnenkant.jpg]]" <em>(overgenomen van de internetsite van de projectgroep Ethologie en Socio-Oecologie van de Universiteit van Utrecht)</em></li> <li>29 jun 2004 08:04 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Gadams.jpg|Gadams.jpg]]" <em>(en:wikipedia)</em></li> <li>29 jun 2004 07:14 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Weidehommel.jpg|Weidehommel.jpg]]" <em>(uit Deltas insectengids)</em></li> <li>29 jun 2004 06:56 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:UbboEmmius.png|UbboEmmius.png]]" <em>(Ubbo Emmius van de: Aldaar angegeven dat het van een bron afkomstig die het in het publieke domein heeft geplaatst. &#123;&#123;msg:PD}} &#91;&#91;de:Bild:UbboEmmius]])</em></li> <li>28 jun 2004 23:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Turner.grandcanal.750pix.jpg|Turner.grandcanal.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Turner, &amp;#8220;The Grand Canal, Venice&amp;#8221;, painted 1835. Size: 36 by 48 inches (91 by 122 cm). The Metropolitan Museum of Art, New York, USA. &lt;br&gt; Source: WebMuseum, Paris http&#58;//www.ibiblio.org&lt;br&gt; Picture prepared for Wikipedia by Adrian Pingstone in May 2003. &#91;&#91;en:Image:turner.grandcanal.750pix.jpg]])</em></li> <li>28 jun 2004 23:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Turner_temeraire.jpg|Turner_temeraire.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: public domain, quelle: http&#58;//cgfa.sunsite.dk/turner/p-turner11.htm &#91;&#91;de:Bild:Turner temeraire.jpg]])</em></li> <li>28 jun 2004 23:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Turner_fischer_auf_see.jpg|Turner_fischer_auf_see.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: public domain, quelle: http&#58;//cgfa.sunsite.dk/turner/p-turner20.htm &#91;&#91;de:Bild:Turner fischer auf see.jpg]])</em></li> <li>28 jun 2004 22:22 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:SacreCoeur.jpg|SacreCoeur.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Montmartre&#39;s Basilica of Sacré Coeur in Paris, France This photo was taken by Chris McCabe on 18 June 2002 at 11:00 &#123;&#123;unverified}} &#91;&#91;en:Image:SacreCoeur.jpg]])</em></li> <li>28 jun 2004 20:17 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:UmbertoII.jpg|UmbertoII.jpg]]" <em>(Umberto II van Italië (van Engelse Wiki))</em></li> <li>28 jun 2004 19:26 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Lunaire-annua-fr.jpg|Lunaire-annua-fr.jpg]]" <em>(van franse wiki)</em></li> <li>28 jun 2004 18:35 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Wapenschiild_Allier.gif|Wapenschiild_Allier.gif]]"</li> <li>28 jun 2004 18:34 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Kaart_Frankrijk_Departement_03.png|Kaart_Frankrijk_Departement_03.png]]"</li> <li>28 jun 2004 18:18 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Radio.jpg|Radio.jpg]]" <em>(Radio - van de gelijknamige en-wikipediapagina)</em></li> <li>28 jun 2004 18:00 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Guadalcanal1.jpg|Guadalcanal1.jpg]]" <em>(Guadalcanal-foto van de Engelstalige wiki)</em></li> <li>28 jun 2004 17:15 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Kaart_Frankrijk_Departement_02.png|Kaart_Frankrijk_Departement_02.png]]"</li> <li>28 jun 2004 17:14 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Wapenschild_Aisne.gif|Wapenschild_Aisne.gif]]"</li> <li>28 jun 2004 15:38 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Sine_Cosine_Graph.png|Sine_Cosine_Graph.png]]" <em>(bewerkt: engelstatalige titel er afgeknipt omdat het engels is en een titel niet bij een afbeelding hoort - afbeelding is oorspronkelijk gemaakt door &#91;&#91;:en:User:BlackGriffen]] en valt onder de GFDL)</em></li> <li>28 jun 2004 15:37 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:WilhelmZoons.jpg|WilhelmZoons.jpg]]" <em>( Wilhelm II met zijn zoons (public domain van http&#58;//www.gwpda.org/photos/greatwar.htm))</em></li> <li>28 jun 2004 15:35 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:4schieen.jpg|4schieen.jpg]]" <em>(eigen maaksel)</em></li> <li>28 jun 2004 15:09 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:WilhelmII4.jpg|WilhelmII4.jpg]]" <em>(Keizer Wilhelm II in het uniform van een Turkse veldmaarschalk (public domain van http&#58;//www.gwpda.org/photos/greatwar.htm))</em></li> <li>28 jun 2004 14:56 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:WilhelmII3.jpg|WilhelmII3.jpg]]" <em>(Keizer Wilhelm II (public domain van http&#58;//www.gwpda.org/photos/greatwar.htm))</em></li> <li>28 jun 2004 14:54 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:WilhelmIIx.jpg|WilhelmIIx.jpg]]" <em>(Keizer Wilhelm II (van Engelse Wiki))</em></li> <li>28 jun 2004 14:47 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Auguste_Viktoria.jpg|Auguste_Viktoria.jpg]]" <em>(Keizerin Auguste Victoria van Duitsland (van Duitse Wiki))</em></li> <li>28 jun 2004 14:07 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:WilhelmII1890.jpg|WilhelmII1890.jpg]]" <em>(Keizer Wilhelm II rond 1890 (van Engelse Wiki))</em></li> <li>28 jun 2004 13:19 [[Gebruiker:Bartux|Bartux]] heeft ge-upload: "[[:Afbeelding:AgiosNikolaos.jpg|AgiosNikolaos.jpg]]" <em>(Agios Nikolaos (Kreta) - GFDL - Oktober 2002 - Reinhard Kraasch - afkomstig van de: wikipedia)</em></li> <li>28 jun 2004 08:44 [[Gebruiker:Bontenbal|Bontenbal]] heeft ge-upload: "[[:Afbeelding:DuraoBarroso.jpg|DuraoBarroso.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>28 jun 2004 06:13 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Dollard.jpg|Dollard.jpg]]" <em>(Zelfde foto nu met tekst, fout uit de vorige weggewerkt)</em></li> <li>28 jun 2004 06:02 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Dollard.jpg|Dollard.jpg]]" <em>(Zelfde foto nu met geografische namen)</em></li> <li>27 jun 2004 21:43 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Busbaan_Almere.jpg|Busbaan_Almere.jpg]]" <em>(Busbaan bij NS-station Almere Muziekwijk, eigen foto, &#123;&#123;PD}})</em></li> <li>27 jun 2004 20:27 [[Gebruiker:James|James]] heeft ge-upload: "[[:Afbeelding:Novell_logo.gif|Novell_logo.gif]]" <em>(Novell logo, bron: www.novell.com)</em></li> <li>27 jun 2004 20:12 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:Kljbaseline.jpg|Kljbaseline.jpg]]" <em>(van www.klj.be)</em></li> <li>27 jun 2004 20:05 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Woodstork17.jpg|Woodstork17.jpg]]" <em>(en:wikipedia)</em></li> <li>27 jun 2004 19:57 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Dollard.jpg|Dollard.jpg]]" <em>(Sattelietfoto van de Dollard, gedownload van http&#58;//satfoto.geoserve.nl/false-nl/index.html en volgens deze pagina vrij van rechten zolang als bron NLR en ESA worden vermeld. Hierbij gedaan. Deze tekst is voor mij doorslaggevend bij het interpreteren van copyright teken links onderaan naast de vermelding NLR/ESA op de foto )</em></li> <li>27 jun 2004 19:55 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Harpy_Eagle2.JPG|Harpy_Eagle2.JPG]]" <em>(en:wikipedia)</em></li> <li>27 jun 2004 19:51 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:WillemIIWürttemberg.jpg|WillemIIWürttemberg.jpg]]" <em>(Willem II van Württemberg (van Duitse Wiki))</em></li> <li>27 jun 2004 19:34 [[Gebruiker:Esperanto|Esperanto]] heeft ge-upload: "[[:Afbeelding:Esperanto-melono.png|Esperanto-melono.png]]" <em>(Gekopiëerd uit de Duitse Wikipedia)</em></li> <li>27 jun 2004 19:28 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Amalia_01.jpg|Amalia_01.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;Amália Rodrigues]] --&#91;&#91;User:Januario&#124;Januario]] 16:55, Jun 11, 2004 (UTC) &#91;&#91;en:Image:Amalia 01.jpg]])</em></li> <li>27 jun 2004 19:25 [[Gebruiker:Napoleon Vier|Napoleon Vier]] heeft ge-upload: "[[:Afbeelding:Lipsius1.jpg|Lipsius1.jpg]]" <em>(eigen werk)</em></li> <li>27 jun 2004 19:19 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Dollfuß_radio.jpg|Dollfuß_radio.jpg]]" <em>(Engelbert Dollfuß (van Engelse Wiki))</em></li> <li>27 jun 2004 18:12 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chau_gong.jpg|Chau_gong.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Chau Gong This is an original photograph by &#91;&#91;user:andrewa&#124;Andrew Alder]], taken on 4 September 2003. Permission is granted to copy, distribute and/or modify under the GFDL, version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. &#91;&#91;en:Image:Chau gong.jpg]])</em></li> <li>27 jun 2004 18:08 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Evgkite.jpg|Evgkite.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Snail Kite from sfwmd.gov &#91;&#91;en:Image:evgkite.jpg]])</em></li> <li>27 jun 2004 18:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Glossyibis06.jpg|Glossyibis06.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Glossy Ibis from sfwmd.gov &#91;&#91;en:Image:Glossyibis06.jpg]])</em></li> <li>27 jun 2004 17:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:BurrowingOwl23.jpg|BurrowingOwl23.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Burrowing Owl from USGS Source: U.S. Geological Survey,Columbia Environmental Research Center &#91;&#91;en:Image:BurrowingOwl23.jpg]])</em></li> <li>27 jun 2004 17:28 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Americanwhitepelican75sm.JPG|Americanwhitepelican75sm.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: american white pelican public domain from USFWA &#91;&#91;en:Image:Americanwhitepelican75sm.JPG]])</em></li> <li>27 jun 2004 17:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Great_Horned_Owl.USFWS.jpg|Great_Horned_Owl.USFWS.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a &#91;&#91;public domain]] image from the US Fish and Wildlife Service. This image was found &#91;http&#58;//images.fws.gov/default.cfm?fuseaction=records.display&amp;CFID=577127&amp;CFTOKEN=16100189&amp;id=476DD170%2D3308%2D4205%2DAD013D7F74463E98) here] &#123;&#123;PD}} &#91;&#91;en:Image:Great Horned Owl.USFWS.jpg]])</em></li> <li>27 jun 2004 17:12 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Barnie.JPG|Barnie.JPG]]" <em>(en:wikipedia)</em></li> <li>27 jun 2004 17:08 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:ShortearedOwl23.jpg|ShortearedOwl23.jpg]]" <em>(en:wikipedia)</em></li> <li>27 jun 2004 16:44 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Americankestrel65.jpg|Americankestrel65.jpg]]" <em>(en:wikipedia)</em></li> <li>27 jun 2004 15:58 [[Gebruiker:Barthoeksma|Barthoeksma]] heeft ge-upload: "[[:Afbeelding:VREDE_NU|VREDE_NU]]" <em>(IK BEN EEN VAN DE BEATLES DUS DOWNLOAD DE BEWERKTE SGT.PEPPERS LONELY HEARTSCLUB MAARE)</em></li> <li>27 jun 2004 15:50 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:VlagApeldoorn.png|VlagApeldoorn.png]]" <em>(Vlag de gemeente Apeldoorn. Eigen werk.)</em></li> <li>27 jun 2004 12:45 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Herstellingsteken.PNG|Herstellingsteken.PNG]]" <em>(Herstellingsteken eigen productie, GFDL)</em></li> <li>27 jun 2004 12:02 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Rtailedtropicbird8.jpg|Rtailedtropicbird8.jpg]]" <em>(en:wikipedia)</em></li> <li>27 jun 2004 12:02 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Kwintencirkel.png|Kwintencirkel.png]]" <em>(Kwintencirkel van wiki-en )</em></li> <li>27 jun 2004 12:00 [[Gebruiker:RonaldW|RonaldW]] heeft ge-upload: "[[:Afbeelding:MauriceGarin1897.png|MauriceGarin1897.png]]" <em>(komt van franse wikipedia, omschrijving daar is: public domain (1897))</em></li> <li>27 jun 2004 11:59 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Redfacedcormorant18.jpg|Redfacedcormorant18.jpg]]" <em>(en:wikipedia)</em></li> <li>27 jun 2004 11:56 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Redfootbooby06.jpg|Redfootbooby06.jpg]]" <em>(en:wikipedia)</em></li> <li>27 jun 2004 11:54 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Darter-341.jpg|Darter-341.jpg]]" <em>(en:wikipedia)</em></li> <li>27 jun 2004 11:51 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Lesserfrigbird.jpg|Lesserfrigbird.jpg]]" <em>(en:wikipedia)</em></li> <li>27 jun 2004 10:33 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:ReunionLocatie.png|ReunionLocatie.png]]" <em>(3 maal is scheepsrecht...)</em></li> <li>27 jun 2004 10:31 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:ReunionLocatie.png|ReunionLocatie.png]]" <em>(2e poging)</em></li> <li>27 jun 2004 10:29 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:ReunionLocatie.png|ReunionLocatie.png]]" <em>(Locatie Reunion (bewerkte locatie van madagascar, GFDL))</em></li> <li>27 jun 2004 10:01 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Kropsla_bloei_.jpg|Kropsla_bloei_.jpg]]" <em>(zelfgemaakte foto van botersla; eind juni)</em></li> <li>27 jun 2004 09:50 [[Gebruiker:Henricus|Henricus]] heeft ge-upload: "[[:Afbeelding:NoordHollandLocatie.png|NoordHollandLocatie.png]]" <em>(Locatie Noord-Holland van wiki-en (-&gt; Vlieland bij Friesland))</em></li> <li>27 jun 2004 08:19 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Regenboog2.jpg|Regenboog2.jpg]]" <em>(regenboog juni 2004 eigen foto)</em></li> <li>26 jun 2004 23:07 [[Gebruiker:Pven|Pven]] heeft ge-upload: "[[:Afbeelding:Pyrite.mass.750pix.jpg|Pyrite.mass.750pix.jpg]]" <em>(A mass of pyrite crystals; Photographed by Adrian Pingstone in September 2002 and released to the public domain.)</em></li> <li>26 jun 2004 20:19 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:EuphrasiaStricta-bloem-kl.jpg|EuphrasiaStricta-bloem-kl.jpg]]" <em>(duinen bij &#91;&#91;Wassenaar]], juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>26 jun 2004 20:11 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Fermate.png|Fermate.png]]" <em>(fermate teken (eigen productie: PD))</em></li> <li>26 jun 2004 19:34 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Overbind.png|Overbind.png]]" <em>(overbinding (eigen productie: PD))</em></li> <li>26 jun 2004 18:12 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:PolygonumBistorta-overz-kl.jpg|PolygonumBistorta-overz-kl.jpg]]" <em>(&#91;&#91;den Haag]], Florence Nightingalepark, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>26 jun 2004 18:11 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:PolygonumBistorta-closeup-kl.jpg|PolygonumBistorta-closeup-kl.jpg]]" <em>(&#91;&#91;den Haag]], Florence Nightingalepark, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>26 jun 2004 18:11 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:PolygonumBistorta-bloem-kl.jpg|PolygonumBistorta-bloem-kl.jpg]]" <em>(&#91;&#91;den Haag]], Florence Nightingalepark, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>26 jun 2004 18:10 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:PolygonumBistorta-bloem-kl.jpg|PolygonumBistorta-bloem-kl.jpg]]" <em>(&#91;&#91;den Haag]], Florence Nightingalepark, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>26 jun 2004 18:07 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:PolygonumBistorta-plant-kl.jpg|PolygonumBistorta-plant-kl.jpg]]" <em>(&#91;&#91;den Haag]], Florence Nightingalepark, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>26 jun 2004 18:06 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Kaart_Frankrijk_Departement_01.png|Kaart_Frankrijk_Departement_01.png]]"</li> <li>26 jun 2004 15:32 [[Gebruiker:Conget|Conget]] heeft ge-upload: "[[:Afbeelding:Mahjong.gif|Mahjong.gif]]" <em>(Dit is een plaatje van Mahjong. Iedereen kan dat zelf scannen.)</em></li> <li>26 jun 2004 15:19 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:Rabobank_groot.jpg|Rabobank_groot.jpg]]" <em>(Vestiging Rabobank (grote versie). Eigen foto, GNU FDL)</em></li> <li>26 jun 2004 15:18 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:Rabobank_klein.jpg|Rabobank_klein.jpg]]" <em>(Vestiging Rabobank (kleine versie). Eigen foto, GNU FDL)</em></li> <li>26 jun 2004 14:46 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Kaart_Frankrijk_Departement_68.png|Kaart_Frankrijk_Departement_68.png]]"</li> <li>26 jun 2004 14:45 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Kaart_Frankrijk_Departement_68.png.png|Kaart_Frankrijk_Departement_68.png.png]]"</li> <li>26 jun 2004 14:34 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:BowieaVolubilis.jpg|BowieaVolubilis.jpg]]" <em>(Bowiea volubilis (foto &#91;&#91;Gebruiker:Känsterle&#124;Känsterle]], public domain))</em></li> <li>26 jun 2004 14:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Weensk.jpg|Weensk.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 jun 2004 14:13 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Huislook.jpg|Huislook.jpg]]" <em>(Huislook (foto &#91;&#91;Gebruiker:Känsterle&#124;Känsterle]], public domain))</em></li> <li>26 jun 2004 13:25 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Wapenschild_Haut-Rhin.gif|Wapenschild_Haut-Rhin.gif]]"</li> <li>26 jun 2004 12:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Flintbeach.jpg|Flintbeach.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Pebble beach of flint nodules, Rügen, Germany in 2004 &#91;&#91;en:Image:flintbeach.jpg]])</em></li> <li>26 jun 2004 12:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Feuersteinaxt.jpg|Feuersteinaxt.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: Aus Feuerstein hergestellte steinzeitliche Axt. Die Länge der Axt beträgt 31 cm, an der Schneide ist die Axt ca. 8 cm breit. *Quelle: Selbst fotografiert *Fotograf oder Zeichner: Dr. Henning Krämer, Geesthacht *Andere Versionen: *Lizenzstatus: GNU FDL &#91;&#91;de:Bild:Feuersteinaxt.jpg]])</em></li> <li>26 jun 2004 12:23 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Blackmar.jpg|Blackmar.jpg]]" <em>(Oorspronkelijk had dit de naam black.jpg en was geupload door &#91;&#91;Gebruiker:jaapvanderkooij]], opnieuw geupload vanwege andere foto met dezelfde naam)</em></li> <li>26 jun 2004 12:19 [[Gebruiker:Black Darkness|Black Darkness]] heeft ge-upload: "[[:Afbeelding:Black.jpg|Black.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>26 jun 2004 10:14 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Tarvdk.jpg|Tarvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 jun 2004 10:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Stafk.jpg|Stafk.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 jun 2004 09:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Spavdk.jpg|Spavdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 jun 2004 09:29 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Sokolk.jpg|Sokolk.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 jun 2004 09:08 [[Gebruiker:Falcongj|Falcongj]] heeft ge-upload: "[[:Afbeelding:Emdenwappen.png|Emdenwappen.png]]" <em>(Wapen Emden (afkomstig uit Duitse Wikipedia))</em></li> <li>26 jun 2004 09:07 [[Gebruiker:Falcongj|Falcongj]] heeft ge-upload: "[[:Afbeelding:Emden.png|Emden.png]]" <em>(Locatie Emden (afkomstig van Duitse Wikipedia))</em></li> <li>26 jun 2004 09:02 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Slavivdk.jpg|Slavivdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 jun 2004 08:15 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Begraafplaats_Oud_Eik_en_Duinen,_Den_Haag,_april_2004.JPG|Begraafplaats_Oud_Eik_en_Duinen,_Den_Haag,_april_2004.JPG]]" <em>(Begraafplaats Oud Eik en Duinen, Den Haag, april 2004, eigen foto ter beschikking gesteld onder GFDL)</em></li> <li>26 jun 2004 08:09 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Sicik.jpg|Sicik.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 jun 2004 07:48 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Zilvermeeuw_Scheveningen_mei_2004.JPG|Zilvermeeuw_Scheveningen_mei_2004.JPG]]" <em>(Zilvermeeuw op de pier van Scheveningen, mei 2004, eigen foto ter beschikking gesteld onder GNU/FDL)</em></li> <li>26 jun 2004 06:36 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Turkish_ebru_sample_1.jpg|Turkish_ebru_sample_1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-tr. De beschrijving daar was: Turkish ebru sample 1 &#91;&#91;tr:Image:Turkish ebru sample 1.jpg]])</em></li> <li>26 jun 2004 06:25 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Gemarmerd_boekomslag.JPG|Gemarmerd_boekomslag.JPG]]" <em>(Gemarmerd boekomslag in een druk van Deutschen Verlags-Unstalt uit Stuttgard, G. Hallberger, waarschijnlijk rond 1900, verzameld werk van Goethe)</em></li> <li>26 jun 2004 05:54 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Palette_knife.jpg|Palette_knife.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A common palette knife used for painting. Image taken by me (--&#91;&#91;User:IYY&#124;IYY]] 21:59, 25 May 2004 (UTC)). &#91;&#91;en:Image:Palette knife.jpg]])</em></li> <li>25 jun 2004 21:54 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Viaduc_de_Millau_construction_nord.jpg|Viaduc_de_Millau_construction_nord.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Le &#91;&#91;viaduc de Millau]] en construction, partie nord, début 2004. &#123;&#123;GPL}} &#91;&#91;fr:Image:Viaduc de Millau construction nord.jpg]])</em></li> <li>25 jun 2004 21:54 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Viaduc_de_Millau_construction_sud.jpg|Viaduc_de_Millau_construction_sud.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Le &#91;&#91;viaduc de Millau]] en construction, partie sud, début 2004. &#123;&#123;GPL}} &#91;&#91;fr:Image:Viaduc de Millau construction sud.jpg]])</em></li> <li>25 jun 2004 21:36 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:Buitenspel.png|Buitenspel.png]]" <em>(Buitenspelsituatie. Eigen werk, achtergrond voetbalveld van plaatje in en.wikipedia)</em></li> <li>25 jun 2004 17:50 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Wapenschild_Bas-Rhin.gif|Wapenschild_Bas-Rhin.gif]]"</li> <li>25 jun 2004 17:07 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Boomhommel_closeup.jpg|Boomhommel_closeup.jpg]]" <em>(zelfgemaakte foto van Boomhommel; eind juni)</em></li> <li>25 jun 2004 17:06 [[Gebruiker:DaMatriX|DaMatriX]] heeft ge-upload: "[[:Afbeelding:Dinofelis_drawing.jpg|Dinofelis_drawing.jpg]]" <em>(http&#58;//www.wtv-zone.com/BigCats/cathistory/page2.html. No copyright found on this website. Not sure on the situation.)</em></li> <li>25 jun 2004 15:25 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FrederikIboek.jpg|FrederikIboek.jpg]]" <em>(Frederik I krijgt de Mark Brandenburg als leen en wordt verheven tot keurvorst (scan uit een middeleeuws boek, dus geen copyright))</em></li> <li>25 jun 2004 14:27 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:BarmhartigeSamaritaan.jpg|BarmhartigeSamaritaan.jpg]]" <em>(De Barmhartige Samaritaan (public domain van http&#58;//breadsite.org))</em></li> <li>25 jun 2004 13:03 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:GeorgeVNicolaasII.jpg|GeorgeVNicolaasII.jpg]]" <em>(George V met Nicolaas II in Berlijn 1913 (public domain van public domain van http&#58;//www.gwpda.org/photos/greatwar.htm))</em></li> <li>25 jun 2004 12:58 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:GeorgeIIGriekenland.jpg|GeorgeIIGriekenland.jpg]]" <em>(George II van Griekenland (public domain van http&#58;//www.gwpda.org/photos/greatwar.htm - er stond daar slechts &quot;Kroonprins George&quot; maar ten tijde van WO1, waar die site over gaat, was George II inderdaad nog kroonprins))</em></li> <li>25 jun 2004 12:54 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FranzvonPapen.jpg|FranzvonPapen.jpg]]" <em>(Franz von Papen (public domain van http&#58;//www.gwpda.org/photos/greatwar.htm))</em></li> <li>25 jun 2004 12:34 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:StefanIHongarije.jpg|StefanIHongarije.jpg]]" <em>(Stefan I van Hongarije (afbeelding van een icoon, te oud om copyright te hebben))</em></li> <li>25 jun 2004 12:12 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Detail_Karel_Appel_Nostalgie_de_la_trompette_douce_1998.jpg|Detail_Karel_Appel_Nostalgie_de_la_trompette_douce_1998.jpg]]" <em>(Detail van een werk op papier van Karel Appel uit 1998, Overgenomen met een beroep op het Citaatrecht. Derhalve alleen bestemd voor het artikel over &#91;&#91;Karel Appel]])</em></li> <li>25 jun 2004 12:10 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Schovdk.jpg|Schovdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>25 jun 2004 12:07 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Detail_Karel_Appel_Compositie_1960.jpg|Detail_Karel_Appel_Compositie_1960.jpg]]" <em>(Detail van een schilderij van Karel Appel, Compositie, uit 1960, opgenomen met een beroep op het Citaatrecht en derhalve alleen bestemd voor het artikel over &#91;&#91;Karel Appel]])</em></li> <li>25 jun 2004 12:05 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Detail_Karel_Appel_Vragende_Kinderen_Tate_gallery_1949.jpg|Detail_Karel_Appel_Vragende_Kinderen_Tate_gallery_1949.jpg]]" <em>(Detail van een werk van &#91;&#91;Karel Appel]], vragende kinderen, Tate Gallery, opgenomen met een beroep op het citaatrecht, derhalve alleen bedoeld voor het artikel over Karel Appel)</em></li> <li>25 jun 2004 11:59 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Detail_Karel_Appel_Vrijheidsschreeuw_1948.jpg|Detail_Karel_Appel_Vrijheidsschreeuw_1948.jpg]]" <em>(Detail van het schilderij vrijheidsschreeuw van &#91;&#91;Karel Appel]], opgenomen met een beroep op het citaatrecht. Alleen bestemd voor het artikel over Karel Appel.)</em></li> <li>25 jun 2004 11:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scank.jpg|Scank.jpg]]" <em>(Fritz8 - print)</em></li> <li>25 jun 2004 11:07 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Retvdk.jpg|Retvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>25 jun 2004 09:53 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Russk.jpg|Russk.jpg]]" <em>(Fritz8 - print)</em></li> <li>25 jun 2004 09:27 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Romavdk.jpg|Romavdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>25 jun 2004 07:54 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Tuinzaal_stedelijk_museum.jpg|Tuinzaal_stedelijk_museum.jpg]]" <em>(Tuinzaal van het Stedelijk Museum in Amsterdam, rond 1960, uit de brochure Het Stedelijk Museum. Architectuur in dienst van de kunst, Vanaf website monumenten Amsterdam, http&#58;//www.bma.amsterdam.nl/docs/stedelijkmuseum.pdf)</em></li> <li>25 jun 2004 06:45 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Raphaelle_peale_na_het_bad.jpg|Raphaelle_peale_na_het_bad.jpg]]" <em>(&#91;&#91;Raphaelle Peala]], Na het bad, Trompe l&#39;euil schilderij, uit 1823, vanaf CGFA, http&#58;//cgfa.sunsite.dk/p/p-2.htm#rapeale, overnemen met bronvermelding is toegestaan.)</em></li> <li>24 jun 2004 23:48 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:BrazilieVlag.png|BrazilieVlag.png]]" <em>(Vlag Brazilie van wiki-en )</em></li> <li>24 jun 2004 20:21 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Zero.jpg|Zero.jpg]]" <em>(Zero-van de Engelstalige wiki)</em></li> <li>24 jun 2004 20:17 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:EmmaHawai.jpg|EmmaHawai.jpg]]" <em>(Koningin Emma van Hawaï (van Engelse Wiki))</em></li> <li>24 jun 2004 19:48 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Alexanderliholiho.jpg|Alexanderliholiho.jpg]]" <em>(Kamehameha IV van Hawaï (van Engelse Wiki))</em></li> <li>24 jun 2004 19:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Nudemaja.JPG|Nudemaja.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;the naked maja&#39; painted by francisco goya &#91;&#91;en:Image:nudemaja.JPG]])</em></li> <li>24 jun 2004 19:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Clotmaja.JPG|Clotmaja.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;the clad maja&#39; painted by francisco goya (madrid) &#91;&#91;en:Image:clotmaja.JPG]])</em></li> <li>24 jun 2004 19:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Goyapint.jpg|Goyapint.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Selbstporträt von Francisco de Goya. Das Bild ist aufgrund seines Alters Public Domain. &#91;&#91;de:Bild:Goyapint.jpg]])</em></li> <li>24 jun 2004 18:47 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Goya.schietpartij.jpg|Goya.schietpartij.jpg]]" <em>(Goya, schietpartij, vanaf webmuseum Open Bron. )</em></li> <li>24 jun 2004 18:33 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:AlexanderFarnese.jpg|AlexanderFarnese.jpg]]" <em>(Alexander Farnese (oud schilderij, daarom geen copyright))</em></li> <li>24 jun 2004 18:07 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Kaart_Frankrijk_Departement_67.png|Kaart_Frankrijk_Departement_67.png]]"</li> <li>24 jun 2004 18:00 [[Gebruiker:Robk|Robk]] heeft ge-upload: "[[:Afbeelding:Willem_V.png|Willem_V.png]]" <em>(Stadhouder Willem V)</em></li> <li>24 jun 2004 17:43 [[Gebruiker:Jofeys|Jofeys]] heeft ge-upload: "[[:Afbeelding:Kaart_Frankrijk_Departement_67.png.png|Kaart_Frankrijk_Departement_67.png.png]]" <em>(franse wiki)</em></li> <li>24 jun 2004 15:20 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:LouisAdolpheThiers.jpg|LouisAdolpheThiers.jpg]]" <em>(Thiers van wiki-fr (PD wegens datum))</em></li> <li>24 jun 2004 15:18 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:BalthasarGerards.jpg|BalthasarGerards.jpg]]" <em>(Balthasar Gerards (te oud om nog copyright te hebben))</em></li> <li>24 jun 2004 15:17 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:AanslagWillemI.jpg|AanslagWillemI.jpg]]" <em>(De moord op Willem de Zwijger (te oud om nog copyright te hebben))</em></li> <li>24 jun 2004 13:56 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Zwaartelijn.png|Zwaartelijn.png]]" <em>(zwaartelijn van een driehoek - afbeelding gemaakt door Wilinckx en (indien het mogelijk is dat er copyrights vallen op zoiets eenvoudig) gepubliceerd onder de GFDL)</em></li> <li>24 jun 2004 13:54 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Wilhelm_Tell_Denkmal_Altdorf_um_1900.jpeg|Wilhelm_Tell_Denkmal_Altdorf_um_1900.jpeg]]" <em>(Monument voor Willem Tell (van Duitse Wiki))</em></li> <li>24 jun 2004 11:32 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Sagan.jpg|Sagan.jpg]]" <em>(van engelse wiki)</em></li> <li>24 jun 2004 11:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pircvdk.jpg|Pircvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>24 jun 2004 11:09 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Haagwinde_closeup.jpg|Haagwinde_closeup.jpg]]" <em>(zelfgemaakte foto van bloem van Haagwinde; eind juni)</em></li> <li>24 jun 2004 11:08 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Haagwinde.jpg|Haagwinde.jpg]]" <em>(zelfgemaakte fotovan Haagwinde; eind juni)</em></li> <li>24 jun 2004 11:06 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Philk.jpg|Philk.jpg]]" <em>(Fritz8 - print)</em></li> <li>24 jun 2004 11:05 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Philk.jpg|Philk.jpg]]" <em>(Fritz8 - print)</em></li> <li>24 jun 2004 10:54 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Loper3k.jpg|Loper3k.jpg]]" <em>(Fritz8 - print)</em></li> <li>24 jun 2004 10:41 [[Gebruiker:Rita12|Rita12]] heeft ge-upload: "[[:Afbeelding:Europese_Unie.jpg|Europese_Unie.jpg]]" <em>(Kroatië (status: kandidaat; onderhandeling start in voorjaar 2005) )</em></li> <li>24 jun 2004 10:39 [[Gebruiker:Rita12|Rita12]] heeft ge-upload: "[[:Afbeelding:400px-Europese_Unie.jpg|400px-Europese_Unie.jpg]]" <em>(Kroatië - status: kandidaat; onderhandeling start in voorjaar 2005))</em></li> <li>24 jun 2004 09:35 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Oudik.jpg|Oudik.jpg]]" <em>(Fritz8 - print)</em></li> <li>24 jun 2004 08:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Nimvdk.jpg|Nimvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>24 jun 2004 08:34 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Konvdk.jpg|Konvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>24 jun 2004 08:21 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Miesw.jpg|Miesw.jpg]]" <em>(Fritz8 - print)</em></li> <li>24 jun 2004 08:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Miess.jpg|Miess.jpg]]" <em>(Fritz8 - print)</em></li> <li>24 jun 2004 08:15 [[Gebruiker:Jcwf|Jcwf]] heeft ge-upload: "[[:Afbeelding:Monumentsom.jpg|Monumentsom.jpg]]" <em>(eigen foto opnieuw omdat monument.jpg overschreven was)</em></li> <li>24 jun 2004 07:27 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Elgreco.christ.500pix.jpg|Elgreco.christ.500pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: El Greco, &amp;#8220;Baptism of Christ&amp;#8221;, painted 1608-1614. Size: 130 by 83 inches (330 by 211 cm). Hospital de San Juan Bautista de Afuera, Toledo, Spain. &lt;br&gt; Source: Artchive http&#58;//artchive.com/ftp_site.htm &lt;br&gt; Picture prepared for Wikipedia by Adrian Pingstone in May 2003. &#91;&#91;en:Image:elgreco.christ.500pix.jpg]])</em></li> <li>24 jun 2004 07:27 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Elgreco.jpg|Elgreco.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-el. De beschrijving daar was: El greco &#91;&#91;el:Image:Elgreco.jpg]])</em></li> <li>24 jun 2004 06:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Kazimirmalevich.jpg|Kazimirmalevich.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Kazimir Malevich (portrait) &#91;&#91;en:Image:Kazimirmalevich.jpg]])</em></li> <li>24 jun 2004 06:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Malevich-selfportrait-small.jpg|Malevich-selfportrait-small.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Kazimir Malevich: Self portrait (thumbnail, detail) &#91;&#91;en:Image:Malevich-selfportrait-small.jpg]])</em></li> <li>24 jun 2004 06:48 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stamboon_bloei_uitsnede.jpg|Stamboon_bloei_uitsnede.jpg]]" <em>(zelfgemaakte foto van bloeiende stamboon)</em></li> <li>24 jun 2004 06:40 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:River_Scene_by_Jan_van_Goyen.jpeg|River_Scene_by_Jan_van_Goyen.jpeg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &quot;River Scene&quot; by Jan van Goyen &#123;&#123;msg:PD}} &#91;&#91;en:Image:River Scene by Jan van Goyen.jpeg]])</em></li> <li>24 jun 2004 06:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Halsfou.JPG|Halsfou.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;the fool&#39; painted by frans hals &#91;&#91;en:Image:halsfou.JPG]])</em></li> <li>24 jun 2004 06:33 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:MarcelDuchamp.jpg|MarcelDuchamp.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: &#39;&#39;&#39;Titre:&#39;&#39;&#39; Photo de Marcel Duchamp &#39;&#39;&#39;Source:&#39;&#39;&#39; INCONNU (photo de 1914) &#39;&#39;&#39;Licence:&#39;&#39;&#39; INCONNU &#91;&#91;fr:Image: MarcelDuchamp.jpg]])</em></li> <li>24 jun 2004 06:32 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Kropsla_herfst_.jpg|Kropsla_herfst_.jpg]]" <em>(zelfgemaakte foto van botersla in de herfst)</em></li> <li>24 jun 2004 06:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Orxata.gif|Orxata.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Tiger Nuts and its Vegetal Milk &#91;&#91;en:Image:orxata.gif]])</em></li> <li>24 jun 2004 06:23 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Tomaat_bloem_.jpg|Tomaat_bloem_.jpg]]" <em>(zelfgemaakte foto van bloeiende tomaat)</em></li> <li>24 jun 2004 00:29 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:RobertBunsen.jpg|RobertBunsen.jpg]]" <em>(Bunsen van wiki-en; vanwege ouderdom PD)</em></li> <li>24 jun 2004 00:23 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Kekule.jpg|Kekule.jpg]]" <em>(Kekule van wiki-en vanwege datum PD)</em></li> <li>23 jun 2004 23:40 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Martelaars.gif|Martelaars.gif]]" <em>(Christenen verwijderen martelaars uit het amfitheater (Canadian Illustrated News, Vol. 9, No. 11, Page 169. Reproduced from the National Library of Canada&#39;s website Images in the News: http&#58;//www.collectionscanada.ca/index-e.html - vrij te gebruiken mits met deze bronvermelding))</em></li> <li>23 jun 2004 21:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Braille3.jpg|Braille3.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Enhanced colour image of asteroid Braille, imaged by Deep Space 1. Produced by Ted Stryk, NASA, 2000. &#91;&#91;en:Image:Braille3.jpg]])</em></li> <li>23 jun 2004 21:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Borrelly-01.jpg|Borrelly-01.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Picture of comet Borrelly taken by &#39;Deep Space 1&#39; (credit NASA/JPL) &#91;&#91;en:Image:Borrelly-01.jpg]])</em></li> <li>23 jun 2004 20:10 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Freddie.jpg|Freddie.jpg]]" <em>(en:wikipedia)</em></li> <li>23 jun 2004 20:01 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Vulture.jpg|Vulture.jpg]]" <em>(en:wikipedia)</em></li> <li>23 jun 2004 19:46 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumPratense-plant2-hr.jpg|GeraniumPratense-plant2-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>23 jun 2004 19:45 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumPratense-plant1-hr.jpg|GeraniumPratense-plant1-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>23 jun 2004 19:45 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumPratense-closeup-hr.jpg|GeraniumPratense-closeup-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>23 jun 2004 19:44 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumPratense-bloem-hr.jpg|GeraniumPratense-bloem-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>23 jun 2004 19:44 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumPratense-overz-hr.jpg|GeraniumPratense-overz-hr.jpg]]" <em>(&#91;&#91;Den Haag]], Florence nightingalepark, juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>23 jun 2004 19:04 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:P1010016.jpg|P1010016.jpg]]" <em>(en:wikipedia)</em></li> <li>23 jun 2004 17:04 [[Gebruiker:Esperanto|Esperanto]] heeft ge-upload: "[[:Afbeelding:Kleurencirkel_RGB.png|Kleurencirkel_RGB.png]]" <em>(Zelf gemaakt op basis van reeds aanwezige Afbeelding:Kleurencirkel.png)</em></li> <li>23 jun 2004 14:44 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:South_ossetia_flag.png|South_ossetia_flag.png]]" <em>(en:wikipedia)</em></li> <li>23 jun 2004 14:42 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:SouthOcoatofarms.jpg|SouthOcoatofarms.jpg]]" <em>(en:wikipedia)</em></li> <li>23 jun 2004 13:32 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kongbk.jpg|Kongbk.jpg]]" <em>(Fritz8 - print)</em></li> <li>23 jun 2004 12:52 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(Aquitanië vlag van Engelse wiki)</em></li> <li>23 jun 2004 12:51 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Konfik.jpg|Konfik.jpg]]" <em>(Fritz8 - print)</em></li> <li>23 jun 2004 12:28 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Konindk.jpg|Konindk.jpg]]" <em>(Fritz8 - print)</em></li> <li>23 jun 2004 12:19 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Konindk.jpg|Konindk.jpg]]" <em>(Fritz8 - print)</em></li> <li>23 jun 2004 09:06 [[Gebruiker:E-go-go|E-go-go]] heeft ge-upload: "[[:Afbeelding:Relieken_canisius.jpg|Relieken_canisius.jpg]]" <em>(Eigen foto, &quot;om niet&quot; afgestaan tbv. Wikipedia)</em></li> <li>23 jun 2004 08:54 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Italk.jpg|Italk.jpg]]" <em>(Fritz8 - print)</em></li> <li>23 jun 2004 08:26 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Posvdk.jpg|Posvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>23 jun 2004 08:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Snelvdk.jpg|Snelvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>23 jun 2004 08:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Afruilk.jpg|Afruilk.jpg]]" <em>(Fritz8 - print)</em></li> <li>23 jun 2004 07:17 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Tuinhommel_Koningin_op_braam_closeup.jpg|Tuinhommel_Koningin_op_braam_closeup.jpg]]" <em>(zelfgemaakte foto van een koningin van de Tuinhommel op braam)</em></li> <li>23 jun 2004 07:12 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Mussels.jpg|Mussels.jpg]]" <em>(en:wikipedia)</em></li> <li>23 jun 2004 07:06 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Aardhommel_op_distel_closeup.jpg|Aardhommel_op_distel_closeup.jpg]]" <em>(zelfgemmakte foto van aardhommel op distel; eind juni)</em></li> <li>23 jun 2004 07:00 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Steenhommel_op_distel_closeup.jpg|Steenhommel_op_distel_closeup.jpg]]" <em>(zelfgemaakte foto van een steenhommel op distel; eind juni)</em></li> <li>23 jun 2004 06:17 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:JeanArp.jpg|JeanArp.jpg]]" <em>(Overgenomen van Engelse wikipedia, &#91;&#91;en:Image:JeanArp.jpg]])</em></li> <li>23 jun 2004 05:58 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Vormen_getekend_naar_Jean_Arp.jpg|Vormen_getekend_naar_Jean_Arp.jpg]]" <em>(Vormen, zelf getekend naar een werk van Jean Arp, Eigen tekening naar het werk: omgekeerde blauwe schoen met twee hielen onder een zwarte boog.)</em></li> <li>22 jun 2004 21:24 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:GVU_AGG300.jpg|GVU_AGG300.jpg]]" <em>(Een Van Hool AGG300-bus (25 meter lang!) van GVU, eigen foto, &#123;&#123;PD}})</em></li> <li>22 jun 2004 21:16 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:SUN_interieur.jpg|SUN_interieur.jpg]]" <em>(Interieur van een SUN-tramstel, eigen foto, &#123;&#123;PD}})</em></li> <li>22 jun 2004 21:12 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Bus_BBA_Connex.jpg|Bus_BBA_Connex.jpg]]" <em>(Bus van BBA Connex op het busstation in Utrecht, eigen foto, &#123;&#123;PD}})</em></li> <li>22 jun 2004 21:07 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Q-liner.jpg|Q-liner.jpg]]" <em>(Q-liner op het busstation in Utrecht, eigen foto, &#123;&#123;PD}})</em></li> <li>22 jun 2004 17:16 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:PolygonatumOdoratum-overz-kl.jpg|PolygonatumOdoratum-overz-kl.jpg]]" <em>(duinen bij &#91;&#91;Scheveningen]], 29 mei 2004. &#123;&#123;eigenwerk}})</em></li> <li>22 jun 2004 17:15 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:PolygonatumOdoratum-closeup-kl.jpg|PolygonatumOdoratum-closeup-kl.jpg]]" <em>(duinen bij &#91;&#91;Scheveningen]], 29 mei 2004. &#123;&#123;eigenwerk}})</em></li> <li>22 jun 2004 17:14 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:PolygonatumOdoratum-bloem-kl.jpg|PolygonatumOdoratum-bloem-kl.jpg]]" <em>(duinen bij &#91;&#91;Scheveningen]], 29 mei 2004. &#123;&#123;eigenwerk}})</em></li> <li>22 jun 2004 17:14 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:PolygonatumOdoratum-plant-kl.jpg|PolygonatumOdoratum-plant-kl.jpg]]" <em>(duinen bij &#91;&#91;Scheveningen]], 29 mei 2004. &#123;&#123;eigenwerk}})</em></li> <li>22 jun 2004 15:40 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:BeideSicilien.png|BeideSicilien.png]]" <em>(Kaart van de Beide Siciliën (bewerking van &#91;&#91;Afbeelding:Sicilia-kaart.png]]))</em></li> <li>22 jun 2004 15:34 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:EchiumVulgare-stengel-hr.jpg|EchiumVulgare-stengel-hr.jpg]]" <em>(duinen bij &#91;&#91;Scheveningen]], juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>22 jun 2004 15:34 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:EchiumVulgare-plant2-hr.jpg|EchiumVulgare-plant2-hr.jpg]]" <em>(duinen bij &#91;&#91;Scheveningen]], juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>22 jun 2004 15:33 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:EchiumVulgare-plant1-hr.jpg|EchiumVulgare-plant1-hr.jpg]]" <em>(duinen bij &#91;&#91;Scheveningen]], juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>22 jun 2004 15:32 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:EchiumVulgare-overz-hr.jpg|EchiumVulgare-overz-hr.jpg]]" <em>(duinen bij &#91;&#91;Scheveningen]], juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>22 jun 2004 15:31 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:EchiumVulgare-CloseUp-hr.jpg|EchiumVulgare-CloseUp-hr.jpg]]" <em>(duinen bij &#91;&#91;Scheveningen]], juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>22 jun 2004 15:31 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:EchiumVulgare-bloem2-hr.jpg|EchiumVulgare-bloem2-hr.jpg]]" <em>(duinen bij &#91;&#91;Scheveningen]], juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>22 jun 2004 15:30 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:EchiumVulgare-bloem1-hr.jpg|EchiumVulgare-bloem1-hr.jpg]]" <em>(Duinen bij &#91;&#91;Scheveningen]], juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>22 jun 2004 12:44 [[Gebruiker:Waerth|Waerth]] heeft ge-upload: "[[:Afbeelding:Ho_Chi_Minh_Young.jpg|Ho_Chi_Minh_Young.jpg]]" <em>(van fr wikipedia)</em></li> <li>22 jun 2004 12:43 [[Gebruiker:Waerth|Waerth]] heeft ge-upload: "[[:Afbeelding:Ho_Chi_Minh_Young.jpg|Ho_Chi_Minh_Young.jpg]]" <em>(van fr wikipedia)</em></li> <li>22 jun 2004 12:39 [[Gebruiker:Waerth|Waerth]] heeft ge-upload: "[[:Afbeelding:Ho_Chi_Minh.jpg|Ho_Chi_Minh.jpg]]" <em>(van de wikipedia: 14:19, 31. Jan 2004 . . Herr Klugbeisser (2577 Byte) (Ho Chi Minh) )</em></li> <li>22 jun 2004 12:33 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Eindvdk.jpg|Eindvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 jun 2004 12:21 [[Gebruiker:Waerth|Waerth]] heeft ge-upload: "[[:Afbeelding:Hanoi_operahouse.jpg|Hanoi_operahouse.jpg]]" <em>(Van de engelse wikipedia, daar opgeload door: &#91;&#91;user:Fuzheado]]. )</em></li> <li>22 jun 2004 11:37 [[Gebruiker:Waerth|Waerth]] heeft ge-upload: "[[:Afbeelding:Saigon_center.jpg|Saigon_center.jpg]]" <em>(Van de engelse wikipedia, daar opgeload door: &#91;&#91;user:Fuzheado]]. )</em></li> <li>22 jun 2004 11:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Hollk.jpg|Hollk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 jun 2004 10:41 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Grunfk.jpg|Grunfk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 jun 2004 10:06 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(vlag van Aquitanië overgenomen van Engelse wiki)</em></li> <li>22 jun 2004 09:58 [[Gebruiker:Wcmvdbosch|Wcmvdbosch]] heeft ge-upload: "[[:Afbeelding:Pcb_through_hole_bottom.jpg|Pcb_through_hole_bottom.jpg]]" <em>(Printplaat through-hole)</em></li> <li>22 jun 2004 09:45 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gewdgk.jpg|Gewdgk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 jun 2004 09:42 [[Gebruiker:Jan Lapère|Jan Lapère]] heeft ge-upload: "[[:Afbeelding:Mileticenvreeman.jpg|Mileticenvreeman.jpg]]" <em>(Eigen foto Jan Lapère: Miletic en Vreeman tijdens de onthulling van &#91;&#91;De Houtwerker]])</em></li> <li>22 jun 2004 09:39 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(vlag van Aquitanië overgenomen van Engelse wiki)</em></li> <li>22 jun 2004 09:34 [[Gebruiker:Jan Lapère|Jan Lapère]] heeft ge-upload: "[[:Afbeelding:Miletic_en_vreeman.jpg|Miletic_en_vreeman.jpg]]" <em>(Miletic en Vreeman bij de onthulling van De Houtwerker (Eigen foto Jan Lapère))</em></li> <li>22 jun 2004 09:30 [[Gebruiker:Jan Lapère|Jan Lapère]] heeft ge-upload: "[[:Afbeelding:Houtwerker.jpg|Houtwerker.jpg]]" <em>(Onthulling Beeld De Houtwerker. Eigen foto Jan Lapère)</em></li> <li>22 jun 2004 09:19 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(vlag van Aquitanië overgenomen van Engelse wiki)</em></li> <li>22 jun 2004 09:14 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(vlag van Aquitanië overgenomen van Engelse wiki)</em></li> <li>22 jun 2004 08:22 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Fransvdk.jpg|Fransvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 jun 2004 07:57 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Engelsk.jpg|Engelsk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 jun 2004 07:43 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Andijvie_bloei.jpg|Andijvie_bloei.jpg]]" <em>(zelfgemaakte foto van bloeiende andijvie half juni)</em></li> <li>22 jun 2004 07:36 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Aardappel_bloeiend_Fresco.jpg|Aardappel_bloeiend_Fresco.jpg]]" <em>(zelfgemmakte foto van bloeiende aardappel ras Fresco half juni)</em></li> <li>22 jun 2004 07:28 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Lrokade.jpg|Lrokade.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 jun 2004 07:27 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Krokade.jpg|Krokade.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 jun 2004 07:19 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Parelk.jpg|Parelk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 jun 2004 06:55 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Wortel_bloeiend_A'damse_bak.jpg|Wortel_bloeiend_A'damse_bak.jpg]]" <em>(zelfgemaakte foto van bloeiende wortel (peen) half juni)</em></li> <li>22 jun 2004 05:59 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Darfur3.jpg|Darfur3.jpg]]" <em>(eigen foto)</em></li> <li>22 jun 2004 05:58 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Darfur2.jpg|Darfur2.jpg]]" <em>(eigen foto)</em></li> <li>22 jun 2004 05:56 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Darfur1.jpg|Darfur1.jpg]]" <em>(USAID public domain)</em></li> <li>21 jun 2004 21:32 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:AntwerpenGemeenten.png|AntwerpenGemeenten.png]]" <em>(nummertjes aangepast)</em></li> <li>21 jun 2004 20:57 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:ModiglianiPompadour.jpg|ModiglianiPompadour.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. &#91;&#91;en:Image:ModiglianiPompadour.jpg]])</em></li> <li>21 jun 2004 20:57 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Modigliani.jpg|Modigliani.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: photo in the public domain &#91;&#91;en:Image:Modigliani.jpg]])</em></li> <li>21 jun 2004 20:45 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Modigliani_nude_sdraiato.jpg|Modigliani_nude_sdraiato.jpg]]" <em>(Modigliani, Liggend Naakt, 1917, Guggenheim Museum, vanaf webmuseum, open bron, http&#58;//www.ibiblio.org/wm/paint/auth/modigliani/)</em></li> <li>21 jun 2004 19:23 [[Gebruiker:Bartux|Bartux]] heeft ge-upload: "[[:Afbeelding:Meteora_Rousanou_small.jpg|Meteora_Rousanou_small.jpg]]" <em>(Afkomstig van &#91;http&#58;//wikitravel.org/en/article/Image:Meteora_Rousanou_small.jpg wikitravel], orig. text: picture taken by Akubra)</em></li> <li>21 jun 2004 17:14 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Jamesbruce.jpg|Jamesbruce.jpg]]" <em>(&#91;&#91;James Bruce]]. Naar aangenomen publiek domein wegens ouderdom.)</em></li> <li>21 jun 2004 16:49 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalystegiaSoldanella-blad-kl.jpg|CalystegiaSoldanella-blad-kl.jpg]]" <em>(duinen noord-beveland, 19 juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>21 jun 2004 16:46 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalystegiaSoldanella-bloem2-kl.jpg|CalystegiaSoldanella-bloem2-kl.jpg]]" <em>(duinen noord-beveland, 19 juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>21 jun 2004 16:43 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalystegiaSoldanella-bloem1-kl.jpg|CalystegiaSoldanella-bloem1-kl.jpg]]" <em>(duinen noord-beveland, 19 juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>21 jun 2004 16:43 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalystegiaSoldanella-overz-kl.jpg|CalystegiaSoldanella-overz-kl.jpg]]" <em>(duinen noord-beveland, 19 juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>21 jun 2004 16:36 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalystegiaSoldanella-plant-kl.jpg|CalystegiaSoldanella-plant-kl.jpg]]" <em>(duinen noord-beveland, 19 juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>21 jun 2004 15:32 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Brucetravels.jpg|Brucetravels.jpg]]" <em>(Titelpagina van het boek &quot;Travels to Discover the Source of the Nile&quot; door &#91;&#91;James Bruce]], 1790. Publiek domein wegens leeftijd. &#123;&#123;PD}})</em></li> <li>21 jun 2004 14:03 [[Gebruiker:ArnoVerweij|ArnoVerweij]] heeft ge-upload: "[[:Afbeelding:EdmundHusserl2.jpg|EdmundHusserl2.jpg]]" <em>(&#91;&#91;it:Edmund Husserl]])</em></li> <li>21 jun 2004 13:46 [[Gebruiker:ArnoVerweij|ArnoVerweij]] heeft ge-upload: "[[:Afbeelding:EdmundHusserl.jpg|EdmundHusserl.jpg]]" <em>(&#91;&#91;en:Edmund Husserl]])</em></li> <li>21 jun 2004 13:36 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Andijvie_december.jpg|Andijvie_december.jpg]]" <em>(zelfgemaakte foto van andijvie in december)</em></li> <li>21 jun 2004 13:00 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Ieper1.jpg|Ieper1.jpg]]" <em>(foto van Ieper - ouder dan 70 jaar)</em></li> <li>21 jun 2004 12:13 [[Gebruiker:Moribunt|Moribunt]] heeft ge-upload: "[[:Afbeelding:Alan_greenspan.jpg|Alan_greenspan.jpg]]" <em>(http&#58;//www.imf.org/external/photo/showall.asp?d=9%2F27%2F2002&amp;g=42 These photographs are in the public domain. They are free to use for publication purposes.)</em></li> <li>21 jun 2004 11:36 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Ros_Beiaard_lied2.jpg|Ros_Beiaard_lied2.jpg]]" <em>(eigen afbeelding)</em></li> <li>21 jun 2004 11:30 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Ros_Beiaard_lied.jpg|Ros_Beiaard_lied.jpg]]" <em>(eigen afbeelding)</em></li> <li>21 jun 2004 11:29 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Ros_Beiaard.jpg|Ros_Beiaard.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>21 jun 2004 11:25 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Ros_Beiaard.jpg|Ros_Beiaard.jpg]]" <em>(eigen afbeelding)</em></li> <li>21 jun 2004 11:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Damevdk.jpg|Damevdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>21 jun 2004 10:55 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Corvdk.jpg|Corvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>21 jun 2004 09:18 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Bertha.jpg|Bertha.jpg]]" <em>(foto ouder dan 70 jaar)</em></li> <li>21 jun 2004 09:03 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Aardhommel_met_stuifmeelkorfje1.jpg|Aardhommel_met_stuifmeelkorfje1.jpg]]" <em>(zelfgemaakte foto van Aardhommel met stuifmeelkorfje; half juni)</em></li> <li>21 jun 2004 09:00 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Aljvdk.jpg|Aljvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>21 jun 2004 09:00 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Aardhommel.jpg|Aardhommel.jpg]]" <em>(zelfgemaakte foto van vliegende aardhommel half juni)</em></li> <li>21 jun 2004 08:52 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Mais_stempels_closeup.jpg|Mais_stempels_closeup.jpg]]" <em>(zelfgemaakte foto van stempels van suikermais)</em></li> <li>21 jun 2004 08:47 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Muy_vegetatie.jpg|Muy_vegetatie.jpg]]" <em>(zelfgemaakte foto van vegetatie De Nederlanden; eind mei)</em></li> <li>21 jun 2004 08:40 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Rietorchis_closeup.jpg|Rietorchis_closeup.jpg]]" <em>(zelfgemaakte foto van Rietorchis derde week juni)</em></li> <li>21 jun 2004 08:13 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Catak.jpg|Catak.jpg]]" <em>(Fritz8 - print)</em></li> <li>21 jun 2004 07:41 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Loncin.jpg|Loncin.jpg]]" <em>(foto ouder dan 70 jaar)</em></li> <li>21 jun 2004 07:38 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Ieper.jpg|Ieper.jpg]]" <em>(Ieper tijdens WO I - foto ouder dan 70 jaar)</em></li> <li>21 jun 2004 07:24 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Fortluik.jpg|Fortluik.jpg]]" <em>(fort - foto ouder dan 70 jaar)</em></li> <li>21 jun 2004 05:57 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Reuzenbereklauw.JPG|Reuzenbereklauw.JPG]]" <em>(Eigen foto)</em></li> <li>21 jun 2004 05:16 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Adjaria_flag_small.jpg|Adjaria_flag_small.jpg]]" <em>(de: wikipedia)</em></li> <li>21 jun 2004 01:07 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Fabian_Gottlieb_von_Bellingshausen.jpg|Fabian_Gottlieb_von_Bellingshausen.jpg]]" <em>(bellingshausen)</em></li> <li>20 jun 2004 20:32 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Darfur_map.png|Darfur_map.png]]" <em>(En: wikipedia)</em></li> <li>20 jun 2004 19:09 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Mafalda.jpg|Mafalda.jpg]]" <em>(Prinses Mafalda van Italië (van Engelse wiki))</em></li> <li>20 jun 2004 18:30 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Princip_arrested.jpg|Princip_arrested.jpg]]" <em>(Gavrilo Princip (van Engelse Wiki))</em></li> <li>20 jun 2004 18:30 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Gavrilloprincip.jpg|Gavrilloprincip.jpg]]" <em>(Gavrilo Princip (van Engelse Wiki))</em></li> <li>20 jun 2004 18:05 [[Gebruiker:IMFJ|IMFJ]] heeft ge-upload: "[[:Afbeelding:Artifort_F444_Pierre_Paulin.jpg|Artifort_F444_Pierre_Paulin.jpg]]" <em>(Eigen stoel; eigen foto; IMFJ - 2004)</em></li> <li>20 jun 2004 17:45 [[Gebruiker:John Huisbrink|John Huisbrink]] heeft ge-upload: "[[:Afbeelding:Schildoh.png|Schildoh.png]]" <em>(Eerdere versie hersteld)</em></li> <li>20 jun 2004 16:23 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:VicEmIIIfam.jpg|VicEmIIIfam.jpg]]" <em>(De koninklijke familie van Italië (met Victor Emanuel III) - public domain van http&#58;//www.gwpda.org/photos/greatwar.htm)</em></li> <li>20 jun 2004 16:19 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:MarieEdinburgh.jpg|MarieEdinburgh.jpg]]" <em>(Koningin Marie van Roemenië (public domain van http&#58;//www.gwpda.org/photos/greatwar.htm))</em></li> <li>20 jun 2004 16:03 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Screenshot-LBreakout2.jpg|Screenshot-LBreakout2.jpg]]" <em>(Screenshot van het breakout spel LBreakout2. Deze software valt onder de GPL.)</em></li> <li>20 jun 2004 14:44 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:OostenrijkLocatie.png|OostenrijkLocatie.png]]" <em>(locatie oostenrijk van wiki-en (GFDL))</em></li> <li>20 jun 2004 13:06 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bordjvdk.jpg|Bordjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>20 jun 2004 12:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Carovdk.jpg|Carovdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>20 jun 2004 11:28 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Benok.jpg|Benok.jpg]]" <em>(Fritz8 - print)</em></li> <li>20 jun 2004 11:15 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:LinusPauling.jpg|LinusPauling.jpg]]" <em>(en:wikipedia)</em></li> <li>20 jun 2004 10:11 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Rietveld.jpg|Rietveld.jpg]]" <em>(prive-foto uit 1962, genomen in de Raadskelder te &#39;s-Hertogenbosch)</em></li> <li>20 jun 2004 09:32 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Barents-ijsbeer.jpg|Barents-ijsbeer.jpg]]" <em>(Vlek verwijderd)</em></li> <li>20 jun 2004 09:28 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Evgeny.jpg|Evgeny.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 jun 2004 17:27 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Germany_flag_1949_west.png|Germany_flag_1949_west.png]]" <em>(vlag duitsland 8)</em></li> <li>19 jun 2004 17:27 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Germany_flag_1949_east.png|Germany_flag_1949_east.png]]" <em>(vlag duitsland 7)</em></li> <li>19 jun 2004 17:27 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Germany_flag_1933_2.png|Germany_flag_1933_2.png]]" <em>(vlag duitsland 6)</em></li> <li>19 jun 2004 17:27 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Germany_flag_1933_1.png|Germany_flag_1933_1.png]]" <em>(vlag duitsland 5)</em></li> <li>19 jun 2004 17:27 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Germany_flag_1919.png|Germany_flag_1919.png]]" <em>(vlag duitsland 4)</em></li> <li>19 jun 2004 17:26 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Germany_flag_1871.png|Germany_flag_1871.png]]" <em>(vlag duitsland 3)</em></li> <li>19 jun 2004 17:26 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Germany_flag_1815.png|Germany_flag_1815.png]]" <em>(vlag duitsland 2)</em></li> <li>19 jun 2004 17:26 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Germany_flag_large.png|Germany_flag_large.png]]" <em>(vlag duitsland 1)</em></li> <li>19 jun 2004 17:23 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Zwanebloem.JPG|Zwanebloem.JPG]]" <em>(Eigen foto)</em></li> <li>19 jun 2004 15:42 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:MolenKatwoude3.JPG|MolenKatwoude3.JPG]]" <em>(Eigen foto)</em></li> <li>19 jun 2004 15:39 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:MolenKatwoude2.JPG|MolenKatwoude2.JPG]]" <em>(Eigen foto)</em></li> <li>19 jun 2004 15:36 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:MolenKatwoude.JPG|MolenKatwoude.JPG]]" <em>(Eigen foto)</em></li> <li>19 jun 2004 12:55 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Marcato.png|Marcato.png]]" <em>(Marcatoteken (eigen productie, vrijgegeven onder GFDL))</em></li> <li>19 jun 2004 12:41 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Belvdk.jpg|Belvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 jun 2004 12:33 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:2parkshuttle_schiphol3.jpg|2parkshuttle_schiphol3.jpg]]" <em>(ParkingHopper op langparkeerplaats P3. Foto overgenomen van www.frog.nl. Daar staat: &quot; All pictures are free of copyright if the source (Frog Navigation Systems, www.frog.nl) is quoted. &quot;)</em></li> <li>19 jun 2004 12:29 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:2parkshuttle_monaco3.jpg|2parkshuttle_monaco3.jpg]]" <em>(De nieuwe ParkShuttle bij een perspresentatie in Monaco. Foto overgenomen van www.frog.nl. Daar staat: &quot; All pictures are free of copyright if the source (Frog Navigation Systems, www.frog.nl) is quoted.&quot; )</em></li> <li>19 jun 2004 12:24 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Beierk.jpg|Beierk.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 jun 2004 12:17 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:2parkshuttle_rivium1.jpg|2parkshuttle_rivium1.jpg]]" <em>(Oude Parkshuttle. Foto overgenomen van www.frog.nl. Daar staat &quot; All pictures are free of copyright if the source (Frog Navigation Systems, www.frog.nl) is quoted.&quot;)</em></li> <li>19 jun 2004 12:08 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:3phileas2.jpg|3phileas2.jpg]]" <em>(De dubbelgelede Phileas. Foto overgenomen van www.frog.nl. Daar staat: &quot; All pictures are free of copyright if the source (Frog Navigation Systems, www.frog.nl) is quoted.&quot;)</em></li> <li>19 jun 2004 12:06 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Mordent.png|Mordent.png]]" <em>(mordent eigen productie, vrijgegeven onder GFDL)</em></li> <li>19 jun 2004 11:54 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Pralltriller.PNG|Pralltriller.PNG]]" <em>(Pralltriller - eigen fabrikaat, vrijgegeven onder GFDL)</em></li> <li>19 jun 2004 11:51 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Basj.jpg|Basj.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 jun 2004 11:51 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Basj.jpg|Basj.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 jun 2004 11:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bask.jpg|Bask.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 jun 2004 10:53 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Alvdk.jpg|Alvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 jun 2004 10:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Adjk.jpg|Adjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 jun 2004 09:57 [[Gebruiker:Pven|Pven]] heeft ge-upload: "[[:Afbeelding:Simon_Marius.jpg|Simon_Marius.jpg]]" <em>(In the public domain by age - This image has been released into the public domain by the copyright holder, or its copyright has expired. This applies worldwide. (En-wikipedia))</em></li> <li>19 jun 2004 08:24 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Victoriaisl.png|Victoriaisl.png]]" <em>(victoria eiland kaart)</em></li> <li>19 jun 2004 08:14 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Arcticisl.png|Arcticisl.png]]" <em>(kaart arctische eilanden)</em></li> <li>19 jun 2004 06:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:US_Navy_Washington_Monument_030926-F-2828D-390.jpg|US_Navy_Washington_Monument_030926-F-2828D-390.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: 030926-F-2828D-390 Washington D.C. (Sept. 26, 2003) – An aerial view as seen from the south side of the Washington Memorial, directly adjacent to the White House. U.S. Air Force photo by Tech. Sgt. Andy Dunaway (Released) &#91;&#91;en:Image:US Navy Washington Monument 030926-F-2828D-390.jpg]])</em></li> <li>19 jun 2004 05:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Css_hunley_cutaway.jpg|Css_hunley_cutaway.jpg]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:css hunley cutaway.jpg]])</em></li> <li>19 jun 2004 05:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Css_hunley_on_pier.jpg|Css_hunley_on_pier.jpg]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:css hunley on pier.jpg]])</em></li> <li>18 jun 2004 20:50 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:NicolaasMont2.jpg|NicolaasMont2.jpg]]" <em>(Nicolaas I van Montenegro (public domain van http&#58;//www.gwpda.org/photos/))</em></li> <li>18 jun 2004 20:50 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:NicolaasMont.jpg|NicolaasMont.jpg]]" <em>(Nicolaas I van Montenegro (public domain van http&#58;//www.gwpda.org/photos/))</em></li> <li>18 jun 2004 20:48 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Libyen-oase2.jpg|Libyen-oase2.jpg]]" <em>(Van en: wikipedia, 23:04, 7 Nov 2002 . . Elian (32511 bytes) (oasis in libya, donation) )</em></li> <li>18 jun 2004 20:15 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MedicagoSativa-CloseUp-hr.jpg|MedicagoSativa-CloseUp-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>18 jun 2004 20:14 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MedicagoSativa-bloem1-hr.jpg|MedicagoSativa-bloem1-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>18 jun 2004 20:13 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MedicagoSativa-plant-hr.jpg|MedicagoSativa-plant-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, juni 2004, &#123;&#123;eigenwerk}})</em></li> <li>18 jun 2004 19:30 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumPhaeum-CloseUp-kl.jpg|GeraniumPhaeum-CloseUp-kl.jpg]]" <em>(&#91;&#91;Den Haag]], mei 2004, Florence Nightingalepark, &#123;&#123;eigenwerk}})</em></li> <li>18 jun 2004 19:28 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumPhaeum-plant-kl.jpg|GeraniumPhaeum-plant-kl.jpg]]" <em>(&#91;&#91;Den Haag]], mei 2004, Florence Nightingalepark, &#123;&#123;eigenwerk}})</em></li> <li>18 jun 2004 19:26 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumPhaeum-bloem-kl.jpg|GeraniumPhaeum-bloem-kl.jpg]]" <em>(&#91;&#91;Den Haag]], mei 2004, Florence Nightingalepark, &#123;&#123;eigenwerk}})</em></li> <li>18 jun 2004 19:16 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LotusCorniculatus-bloem-kl.jpg|LotusCorniculatus-bloem-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, &#123;&#123;eigenwerk}})</em></li> <li>18 jun 2004 19:16 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LotusCorniculatus-overz-kl.jpg|LotusCorniculatus-overz-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, &#123;&#123;eigenwerk}})</em></li> <li>18 jun 2004 17:46 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Constantine_II_2.jpg|Constantine_II_2.jpg]]" <em>(en:wikipedia)</em></li> <li>18 jun 2004 17:43 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Karamanlis.jpg|Karamanlis.jpg]]" <em>(en:wikipedia)</em></li> <li>18 jun 2004 17:39 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Papadopoulos.jpg|Papadopoulos.jpg]]" <em>(en:wikipedia)</em></li> <li>18 jun 2004 12:37 [[Gebruiker:Marcus2|Marcus2]] heeft ge-upload: "[[:Afbeelding:Lodewijk_xvi.jpg|Lodewijk_xvi.jpg]]" <em>(new Lodewijk XVI image)</em></li> <li>18 jun 2004 11:18 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Louis14.jpg|Louis14.jpg]]" <em>(Lodewijk 14)</em></li> <li>18 jun 2004 09:12 [[Gebruiker:Bontenbal|Bontenbal]] heeft ge-upload: "[[:Afbeelding:200px-SpaceShipOne-09G.jpg|200px-SpaceShipOne-09G.jpg]]" <em>(Engelse Wikipedia)</em></li> <li>18 jun 2004 09:09 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Obstk.jpg|Obstk.jpg]]" <em>(Fritz8 - print)</em></li> <li>18 jun 2004 07:39 [[Gebruiker:SanderSpek|SanderSpek]] heeft ge-upload: "[[:Afbeelding:Rethink.png|Rethink.png]]" <em>(Logo van ReThink. De auteur (&#91;&#91;Gebruiker:SanderSpek]]) geeft toestemming voor plaatsing onder de Wikipedia-licentie.)</em></li> <li>17 jun 2004 22:44 [[Gebruiker:Andrew Levine|Andrew Levine]] heeft ge-upload: "[[:Afbeelding:Human-nose.jpg|Human-nose.jpg]]" <em>(De neus van een mannelijke 13-jaar-oude Kaukasische mens. Publiek domein, van de Engelse Wikipedia)</em></li> <li>17 jun 2004 21:05 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:AndreasPapandreou.jpg|AndreasPapandreou.jpg]]" <em>(En: wikipedia)</em></li> <li>17 jun 2004 20:49 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Georgepapandreou3.jpg|Georgepapandreou3.jpg]]" <em>(En: wikipedia)</em></li> <li>17 jun 2004 20:17 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chrysler_top2.jpg|Chrysler_top2.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Chrysler Building, NYC, 30. Mai, 2004 (Selbst fotographiert) &#91;&#91;de:Bild:Chrysler top2.jpg]])</em></li> <li>17 jun 2004 19:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chryslerbldg.jpg|Chryslerbldg.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Chrysler Building at dusk, New York (personal snapshot) &#91;&#91;en:Image:Chryslerbldg.jpg]])</em></li> <li>17 jun 2004 19:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Empirestatebldg.jpg|Empirestatebldg.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Empire State Building, New York (personal snapshot) &#91;&#91;en:Image:Empirestatebldg.jpg]])</em></li> <li>17 jun 2004 18:30 [[Gebruiker:CE|CE]] heeft ge-upload: "[[:Afbeelding:SearsTower.jpg|SearsTower.jpg]]" <em>(van engelse wiki, geplaatst door maker)</em></li> <li>17 jun 2004 18:05 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Zwaluw_mei_2004.jpg|Zwaluw_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo, in &#91;&#91;Enschede]], vrijgegeven onder GNU FDL.)</em></li> <li>17 jun 2004 17:44 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Wolken_april_2004.jpg|Wolken_april_2004.jpg]]" <em>(Foto gemaakt door Fruggo, in de buurt van &#91;&#91;Kampen]], vrijgegeven onder GNU FDL)</em></li> <li>17 jun 2004 17:38 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Vlooiende_Mantelbavianen_mei_2004.jpg|Vlooiende_Mantelbavianen_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo in &#91;&#91;Noorder Dierenpark]] Emmen, vrijgegeven onder GNU FDL)</em></li> <li>17 jun 2004 17:31 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Veulen_mei_2004.jpg|Veulen_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo, nabij &#91;&#91;Midwolde]], vrijgegeven onder GNU FDL.)</em></li> <li>17 jun 2004 17:29 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:TurkijeKaart_Izmit.png|TurkijeKaart_Izmit.png]]" <em>(Kaart van Turkije van CIA World Factbook, enkel iets verkleind, en Izmit/Cocaeli met een rode pijl aangewezen)</em></li> <li>17 jun 2004 17:28 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Roze_Pelikaan_mei_2004.jpg|Roze_Pelikaan_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo in &#91;&#91;Noorder Dierenpark]] Emmen, vrijgegeven onder GNU FDL)</em></li> <li>17 jun 2004 17:22 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Roodwangsierschildpad_mei_2004.jpg|Roodwangsierschildpad_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo in Noorder Dierenpark Emmen, vrijgegeven onder GNU FDL)</em></li> <li>17 jun 2004 17:17 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Reiger_mei_2004.jpg|Reiger_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo, vrijgegeven onder GNU-FDL)</em></li> <li>17 jun 2004 16:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Forbys_Taipei_101.jpg|Forbys_Taipei_101.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Das höchste Gebäude der Welt (Stand 2004), der Taipei 101 (Fotograf: Peter Schlüter, &#91;&#91;GNU-FDL]]) &#91;&#91;de:Bild:Forbys Taipei 101.jpg]])</em></li> <li>17 jun 2004 16:52 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Wokenkrabber.jpg|Wokenkrabber.jpg]]" <em>(Wolkenkrabber - eigen foto)</em></li> <li>17 jun 2004 16:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:KLCC_PetronasTowers.JPG|KLCC_PetronasTowers.JPG]]"</li> <li>17 jun 2004 15:47 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Frederik_de_Grote.PNG|Frederik_de_Grote.PNG]]" <em>(Frederik de Grote)</em></li> <li>17 jun 2004 14:29 [[Gebruiker:Marcus2|Marcus2]] heeft ge-upload: "[[:Afbeelding:W_a_mozart.jpg|W_a_mozart.jpg]]" <em>(new W. A. Mozart image)</em></li> <li>17 jun 2004 13:02 [[Gebruiker:Chef|Chef]] heeft ge-upload: "[[:Afbeelding:Wapencothen.jpg|Wapencothen.jpg]]" <em>(Het wapen van het dorp Cothen)</em></li> <li>17 jun 2004 12:51 [[Gebruiker:Chef|Chef]] heeft ge-upload: "[[:Afbeelding:Cothen.JPG|Cothen.JPG]]" <em>(Een oude schets van het dorp Cothen)</em></li> <li>17 jun 2004 12:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Sasikk.jpg|Sasikk.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 jun 2004 11:39 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Voorbeeld.jpg|Voorbeeld.jpg]]" <em>(voorbeeldje voor in de kroeg (screenshot van &#91;&#91;Victor Emanuel II van Italië]])</em></li> <li>17 jun 2004 09:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Blokk2.jpg|Blokk2.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 jun 2004 09:13 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Blokk2.jpg|Blokk2.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 jun 2004 08:31 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Blokjk.jpg|Blokjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 jun 2004 20:11 [[Gebruiker:Paul Brink|Paul Brink]] heeft ge-upload: "[[:Afbeelding:Fiskardo2.jpg|Fiskardo2.jpg]]" <em>(Oude en nieuwe vuurtoren van Fiskardo, copyright (c) Paul Brink 2004)</em></li> <li>16 jun 2004 19:55 [[Gebruiker:Paul Brink|Paul Brink]] heeft ge-upload: "[[:Afbeelding:Fiskardo1.jpg|Fiskardo1.jpg]]" <em>(Fiskardo, copyright (c) Paul Brink 2004)</em></li> <li>16 jun 2004 16:28 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Pix.jpg|Pix.jpg]]" <em>(En: wikipedia)</em></li> <li>16 jun 2004 14:19 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:AlexanderIJoego.jpg|AlexanderIJoego.jpg]]" <em>(Alexander I van Joegoslavië (van Duitse Wiki - wel even geconverteerd))</em></li> <li>16 jun 2004 13:46 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan10.jpg|Scan10.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 jun 2004 13:42 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan10.jpg|Scan10.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 jun 2004 13:01 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan20.jpg|Scan20.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 jun 2004 12:57 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan50.jpg|Scan50.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 jun 2004 12:51 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan50.jpg|Scan50.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 jun 2004 12:48 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:PeterIJoego.jpg|PeterIJoego.jpg]]" <em>(Peter I van Servië/Joegoslavië (public domain van http&#58;//www.lib.utexas.edu/photodraw/portraits/index.htm))</em></li> <li>16 jun 2004 12:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan50.jpg|Scan50.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 jun 2004 11:51 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Vle2.jpg|Vle2.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 jun 2004 11:47 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Vle1.jpg|Vle1.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 jun 2004 11:16 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Scroll.jpg|Scroll.jpg]]" <em>(Boekrol Esther 18de eeuw)</em></li> <li>16 jun 2004 10:08 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:An_orange_lily.jpg|An_orange_lily.jpg]]" <em>(En: wikipedia)</em></li> <li>16 jun 2004 08:58 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Voetgangsersoverweg_met_betonplaten.jpg|Voetgangsersoverweg_met_betonplaten.jpg]]" <em>(Voetgangers overweg met betonplaten, eigen foto, ter beschikking gesteld onder GNU/FDL)</em></li> <li>16 jun 2004 07:41 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Radijs.jpg|Radijs.jpg]]" <em>(zelfgemaakte foto van radijs)</em></li> <li>16 jun 2004 07:36 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Sla-kiemend.jpg|Sla-kiemend.jpg]]" <em>(zelfgemaakte foto van kiemende sla; donkere zaden zijn van ijssla, lichte zaden van kropsla)</em></li> <li>16 jun 2004 07:23 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Witlof_wortels_.jpg|Witlof_wortels_.jpg]]" <em>(zelfgemaakte foto van witlofwortels)</em></li> <li>16 jun 2004 07:12 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Tomaat_wortels.jpg|Tomaat_wortels.jpg]]" <em>(zelfgemaakte foto van wortelstelsel tomaat)</em></li> <li>16 jun 2004 07:10 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Prei_wortels.jpg|Prei_wortels.jpg]]" <em>(zelfgemaakte foto van wortelstelsel van prei)</em></li> <li>16 jun 2004 06:41 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Japanse_wijnbes_wortelopslag.jpg|Japanse_wijnbes_wortelopslag.jpg]]" <em>(zelfgemaakte foto van wortelopslag bij wijnbes)</em></li> <li>16 jun 2004 06:38 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Hazelnoot_Halle'sche_Riesen_vruchten.jpg|Hazelnoot_Halle'sche_Riesen_vruchten.jpg]]" <em>(zelfgemaakte foto van hazelnoot)</em></li> <li>16 jun 2004 06:24 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Maisstengel_opgericht.jpg|Maisstengel_opgericht.jpg]]" <em>(zelfgemaakte foto van een gelegerde maisstengel)</em></li> <li>16 jun 2004 05:29 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Den_Haag_Spui_Beeld_Karel_Appel.jpg|Den_Haag_Spui_Beeld_Karel_Appel.jpg]]" <em>(Den Haag, beeld van Karel Appel, Spui, eigen foto, ter beschikking gesteld onder GNU/FDL)</em></li> <li>16 jun 2004 05:25 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Kluisbestanden.zip|Kluisbestanden.zip]]" <em>(Update met e-mail van Käntersle)</em></li> <li>15 jun 2004 23:55 [[Gebruiker:Rubinio|Rubinio]] heeft ge-upload: "[[:Afbeelding:Wapenapeldoorn.JPG|Wapenapeldoorn.JPG]]" <em>(komt van de site van Apeldoorn www.apeldoorn.nl Een mooie pagina hier incl wapen is in het belang van de gemeente lijkt me...)</em></li> <li>15 jun 2004 22:51 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Rome476.jpeg|Rome476.jpeg]]" <em>(Romeinse Rijk 476 AD )</em></li> <li>15 jun 2004 21:43 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Wisseling_van_de_wacht.jpg|Wisseling_van_de_wacht.jpg]]" <em>(eigen foto, publiek domein)</em></li> <li>15 jun 2004 21:27 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Rome406.jpeg|Rome406.jpeg]]" <em>(Romeinse rijk 406 AD ©Hannes Karnoefel)</em></li> <li>15 jun 2004 21:08 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:B-757_Frachter,_DHL.jpg|B-757_Frachter,_DHL.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: B-757, Frachter, DHL, mein Bild, GNU-Lizenz &#91;&#91;de:Bild:B-757 Frachter, DHL.jpg]] &#123;&#123;GFDL}})</em></li> <li>15 jun 2004 21:07 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:DHL-Fahrzeug.jpg|DHL-Fahrzeug.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: DHL-Fahrzeug selbstfotografiert GNU-FDL &#91;&#91;de:Bild:DHL-Fahrzeug.jpg]] &#123;&#123;GFDL}})</em></li> <li>15 jun 2004 20:58 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Karl_Marx_Geburtshaus_Trier.jpg|Karl_Marx_Geburtshaus_Trier.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: **Karl Marx Geburtshaus in Trier *Quelle: **Fotografiert am 16. August 2003 *Fotograf oder Zeichner: **&#91;&#91;Benutzer:Stefan Kühn&#124;Stefan Kühn]] *Andere Versionen: **&#91;&#91;Media:Karl_Marx_Geburtshaus_Trier_kl.jpg&#124;kleinere Version]] (&#91;&#91;:Bild:Karl_Marx_Geburtshaus_Trier_kl.jpg&#124;Info]]) *Copyright Status: **&#91;&#91;GNU Freie Dokumentationslizenz]] &#91;&#91;de:Bild:Karl Marx Geburtshaus Trier.jpg]] &#123;&#123;GFDL}})</em></li> <li>15 jun 2004 20:46 [[Gebruiker:Pven|Pven]] heeft ge-upload: "[[:Afbeelding:InvoedPaard.PNG|InvoedPaard.PNG]]" <em>(Invloed van een paard op zijn omgevingsvelden, eigen werk)</em></li> <li>15 jun 2004 19:55 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Harrods.jpg|Harrods.jpg]]" <em>(Harrods - eigen foto)</em></li> <li>15 jun 2004 19:22 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Trafsqu.jpg|Trafsqu.jpg]]" <em>(Trafalgar Square - eigen foto)</em></li> <li>15 jun 2004 19:05 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Horseguards.jpg|Horseguards.jpg]]" <em>(horseguards - eigen foto)</em></li> <li>15 jun 2004 18:02 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Europa60AD.jpeg|Europa60AD.jpeg]]" <em>(Romeinse rijk 60-400 ad)</em></li> <li>15 jun 2004 17:59 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Italy_Regions_Umbria_220px.png|Italy_Regions_Umbria_220px.png]]" <em>(Van en: wikipedia, Credit: Ahoerstemeier (outline), Sascha Noyes (other stuff), 2004 License: GFDL)</em></li> <li>15 jun 2004 16:40 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Porta_Nigra_Innenansicht.jpg|Porta_Nigra_Innenansicht.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: **Porta Nigra in Trier, Blick in den Innenhof von der 1. Etage aus *Quelle: **Fotografiert am 17. Mai 2003 *Fotograf oder Zeichner: **&#91;&#91;Benutzer:Stefan Kühn&#124;Stefan Kühn]] *Copyright Status: **&#91;&#91;GNU Freie Dokumentationslizenz]] &#91;&#91;de:Bild:Porta Nigra Innenansicht.jpg]] &#123;&#123;GFDL}})</em></li> <li>15 jun 2004 16:40 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Porta_Nigra_Stadtseite.jpg|Porta_Nigra_Stadtseite.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: **Blick auf die Porta Nigra in Trier von der Stadtseite *Quelle: **Fotografiert am 4. Mai 2003 *Fotograf oder Zeichner: **&#91;&#91;Benutzer:Stefan Kühn&#124;Stefan Kühn]] *Copyright Status: **&#91;&#91;GNU Freie Dokumentationslizenz]] &#91;&#91;de:Bild:Porta Nigra Stadtseite.jpg]] &#123;&#123;GFDL}})</em></li> <li>15 jun 2004 16:37 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Porta_Nigra_Landseite.jpg|Porta_Nigra_Landseite.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: **Blick auf die Porta Nigra in Trier *Quelle: **Fotografiert am 4. Mai 2003 *Fotograf oder Zeichner: **&#91;&#91;Benutzer:Stefan Kühn&#124;Stefan Kühn]] *Copyright Status: **&#91;&#91;GNU Freie Dokumentationslizenz]] &#91;&#91;de:Bild:Porta Nigra Landseite.jpg]] &#123;&#123;GFDL}})</em></li> <li>15 jun 2004 16:28 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Schwebebahn_ueber_Strasse.jpg|Schwebebahn_ueber_Strasse.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: Die Wuppertaler Schwebebahn &quot;schwebt&quot; über eine Kreuzung *Quelle: fotografiert am 31. Mai 2004 *Fotograf oder Zeichner: &#91;&#91;Benutzer:Oktaeder&#124;Oktaeder]] *Andere Versionen: *Lizenzstatus: Public Domain &#91;&#91;de:Bild:Schwebebahn ueber Strasse.jpg]] &#123;&#123;PD}})</em></li> <li>15 jun 2004 15:27 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:250px-LordMayorOxford20040228CopyrightKaihsuTai.png|250px-LordMayorOxford20040228CopyrightKaihsuTai.png]]" <em>(van de engelse wikipedia)</em></li> <li>15 jun 2004 12:48 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Mall_Londen.jpg|Mall_Londen.jpg]]" <em>(Van Engelse wikipedia, geen beschrijving)</em></li> <li>15 jun 2004 12:07 [[Gebruiker:Oski|Oski]] heeft ge-upload: "[[:Afbeelding:PACE-flag.png|PACE-flag.png]]" <em>(uit de Engelse Wikipedia, http&#58;//en.wikipedia.org/wiki/Image:PACE-flag.png)</em></li> <li>15 jun 2004 11:53 [[Gebruiker:Oski|Oski]] heeft ge-upload: "[[:Afbeelding:Image_PACE-flag.png|Image_PACE-flag.png]]" <em>(uit de Engelse Wikipedia, http&#58;//en.wikipedia.org/wiki/Image:PACE-flag.png)</em></li> <li>15 jun 2004 11:09 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Chernin.jpg|Chernin.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>15 jun 2004 11:09 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Natgal.jpg|Natgal.jpg]]" <em>(van de Engelstalige wiki-foto op gelijknamige pagina)</em></li> <li>15 jun 2004 11:05 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Europa60AD.jpeg|Europa60AD.jpeg]]" <em>(Romeinse Rijk 60-400 AD ©Hannes Karnoefel)</em></li> <li>15 jun 2004 10:29 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Europa60AD.jpeg|Europa60AD.jpeg]]" <em>(Romeinse Rijk omstreeks 60 AD. Gemaakt door Hannes Karnoefel)</em></li> <li>15 jun 2004 09:14 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Cheminjk.jpg|Cheminjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 jun 2004 07:54 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Combi03.jpg|Combi03.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 jun 2004 07:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Combi02.jpg|Combi02.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 jun 2004 07:17 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Combi01.jpg|Combi01.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 jun 2004 06:04 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CynoglossumOfficinale-bloem-kl.jpg|CynoglossumOfficinale-bloem-kl.jpg]]" <em>(Scheveningse duinen, 29 mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>15 jun 2004 06:01 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CynoglossumOfficinale-plant-kl.jpg|CynoglossumOfficinale-plant-kl.jpg]]" <em>(Scheveningse duinen, 29 mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>14 jun 2004 21:19 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Apresunreve.mid|Apresunreve.mid]]" <em>(Gabriel Fauré (1845-1924): Après un Rêve, op. 7. Van &#91;http&#58;//www.ibiblio.org/mutopia/cgibin/piece-info.cgi?id=368 Mutopia], publiek domein)</em></li> <li>14 jun 2004 21:06 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Chopin-ballade-4.mid|Chopin-ballade-4.mid]]" <em>(Frederic Chopin: Ballade #4. Afkomstig van: http&#58;//www.ibiblio.org/mutopia/cgibin/make-table.cgi?Composer=ChopinFF, publiek domein)</em></li> <li>14 jun 2004 21:02 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Carcassi-op60-03.mid|Carcassi-op60-03.mid]]" <em>(Matteo Carcassi, opus 60: 25 etudes, nummer 3. Afkomstig van &#91;http&#58;//www.ibiblio.org/mutopia/cgibin/make-table.cgi?Composer=CarcassiM Mutopia]. Publiek domein.)</em></li> <li>14 jun 2004 20:46 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Benda_SonateG3.mid|Benda_SonateG3.mid]]" <em>(Jiri Antonin Benda: Sonate in G-Dur, 3e deel. Bron: &#91;http&#58;//www.ibiblio.org/mutopia/cgibin/make-table.cgi?Composer=BendaJA Mutopia]. Publiek domein)</em></li> <li>14 jun 2004 20:34 [[Gebruiker:Evelien|Evelien]] heeft ge-upload: "[[:Afbeelding:EvelienAtWork.JPG|EvelienAtWork.JPG]]" <em>(Deze foto van mezelf is genomen door mijn goede vriend Willem)</em></li> <li>14 jun 2004 20:30 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Cpe-bach-rondo.mid|Cpe-bach-rondo.mid]]" <em>(Midifile van een rondo van C.P.E. Bach, afkomstig van &#91;http&#58;//www.ibiblio.org/mutopia/cgibin/make-table.cgi?Composer=BachCPE Mutopia]. Publiek domein.)</em></li> <li>14 jun 2004 18:57 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Rodin.jpg|Rodin.jpg]]" <em>(eigen foto)</em></li> <li>14 jun 2004 18:42 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Richard.jpg|Richard.jpg]]" <em>(eigen foto)</em></li> <li>14 jun 2004 18:37 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Ccaa-navarre.png|Ccaa-navarre.png]]" <em>(Van en: wiki 05:08, 19 Aug 2003 . . Montrealais (10594 bytes) (Locator map of Navarre, by [[Gebruiker:Quistnix|Quistnix]]) )</em></li> <li>14 jun 2004 16:38 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Polder_Stein.JPG|Polder_Stein.JPG]]" <em>(Polder Stein vanaf de Tiendweg, eigen foto)</em></li> <li>14 jun 2004 15:35 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Whitehall.jpg|Whitehall.jpg]]" <em>(van Engelse pagina, Whitehall, Londen, permission is granted to copy)</em></li> <li>14 jun 2004 14:24 [[Gebruiker:Bontenbal|Bontenbal]] heeft ge-upload: "[[:Afbeelding:Zetelverdeling.png|Zetelverdeling.png]]" <em>(zelf gemaakt)</em></li> <li>14 jun 2004 14:05 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Centrale.jpg|Centrale.jpg]]" <em>(centrale in Engeland - eigen foto)</em></li> <li>14 jun 2004 13:30 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Poppies.jpg|Poppies.jpg]]" <em>(Slaapbol - eigen foto)</em></li> <li>14 jun 2004 12:40 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:LouisPasteur.jpg|LouisPasteur.jpg]]" <em>(van wiki-en (From http&#58;//wwwihm.nlm.nih.gov): .gov dus GFDL)</em></li> <li>14 jun 2004 12:19 [[Gebruiker:Deadstar|Deadstar]] heeft ge-upload: "[[:Afbeelding:Johnadamsvp.flipped.jpg|Johnadamsvp.flipped.jpg]]" <em>(John Adams predidential portrait van en:. Ouderdom)</em></li> <li>14 jun 2004 09:56 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Vlagbelgiegroot.png|Vlagbelgiegroot.png]]" <em>(vlag belgie (juiste verhoudingen))</em></li> <li>14 jun 2004 09:54 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Kew1.jpg|Kew1.jpg]]" <em>(eigen foto)</em></li> <li>14 jun 2004 09:45 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Kew.jpg|Kew.jpg]]" <em>(kew gardens - eigen foto)</em></li> <li>14 jun 2004 09:38 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Palmhuis.jpg|Palmhuis.jpg]]" <em>(palmhuis kew gardens - eigen foto)</em></li> <li>14 jun 2004 09:30 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Andorra_flag_large.png|Andorra_flag_large.png]]" <em>(andorravlag)</em></li> <li>14 jun 2004 09:20 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:StPauls.jpg|StPauls.jpg]]" <em>(Eigen foto)</em></li> <li>14 jun 2004 09:18 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Aljek.jpg|Aljek.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 jun 2004 08:04 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Vlier_stengel_knoop.jpg|Vlier_stengel_knoop.jpg]]" <em>(zelfgemaakte foto van stengelklieren bij vlier half juni)</em></li> <li>14 jun 2004 06:43 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Vlier_stengel_lenticellen.jpg|Vlier_stengel_lenticellen.jpg]]" <em>(zelfgemaakte foto van lenticellen op vlier half juni)</em></li> <li>14 jun 2004 04:11 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Boun_oum.jpg|Boun_oum.jpg]]" <em>(En: wikipedia)</em></li> <li>13 jun 2004 23:24 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:LaEspero.mp3|LaEspero.mp3]]" <em>(LaEspero.mp3 van wiki-en verondersteld GFDL (geen externe links?))</em></li> <li>13 jun 2004 23:21 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:LaEspero.mid|LaEspero.mid]]" <em>(van wiki-en, verondersteld GFDL)</em></li> <li>13 jun 2004 22:36 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Theophil.jpg|Theophil.jpg]]" <em>(Van de engelse wikipedia)</em></li> <li>13 jun 2004 22:34 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:HenriBergson.jpg|HenriBergson.jpg]]" <em>(van wiki-en, verondersteld GFDL)</em></li> <li>13 jun 2004 21:52 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Philip_macedon_coin.jpg|Philip_macedon_coin.jpg]]" <em>(En: wikipedia)</em></li> <li>13 jun 2004 21:04 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Sagan-bibliotheek.jpeg|Sagan-bibliotheek.jpeg]]" <em>(Van de engelese wikipedia)</em></li> <li>13 jun 2004 20:49 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Mouseion.jpeg|Mouseion.jpeg]]" <em>(van de engelse wikipedia zie aldaar)</em></li> <li>13 jun 2004 20:32 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Frans1BeideS.jpg|Frans1BeideS.jpg]]" <em>(&#91;&#91;Frans I der Beide Siciliën]] door &#91;&#91;Giuseppe Cammarano]] - Cammarano is in 1850 overleden en dus langer dan 70 jaar dood; daarom geen copyright.)</em></li> <li>13 jun 2004 20:11 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:AlbrechtAchilles.jpg|AlbrechtAchilles.jpg]]" <em>(Albrecht Achilles (afbeelding uit 1484, dus geen copyright))</em></li> <li>13 jun 2004 19:20 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Kaart_Griekenland_Pelion.png|Kaart_Griekenland_Pelion.png]]" <em>(Oorspronkelijk uit CIA Factbook; vertaald in Nederlands door Danielm; omgezet in PNG door BenTels, enkel Pelion met rood gemarkeerd door mij)</em></li> <li>13 jun 2004 19:08 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Botticelli_73.jpg|Botticelli_73.jpg]]" <em>(venus van bottichelli)</em></li> <li>13 jun 2004 19:08 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Abt.jpg|Abt.jpg]]" <em>(venus mural in pompeii)</em></li> <li>13 jun 2004 18:09 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Kaart_Griekenland_Kassandra.png|Kaart_Griekenland_Kassandra.png]]" <em>(Oorspronkelijk uit CIA Factbook; vertaald in Nederlan PNG door BenTels, enkel Kassandra met rood gemarkeerd door mijds door Danielm; omgezet in)</em></li> <li>13 jun 2004 18:09 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Kaart_Griekenland_Sithonia.png|Kaart_Griekenland_Sithonia.png]]" <em>(Oorspronkelijk uit CIA Factbook; vertaald in Nederlands door Dani PNG door BenTels, enkel Sithonia met rood gemarkeerd door mijelm; omgezet in)</em></li> <li>13 jun 2004 18:08 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Kaart_Griekenland_Athos.png|Kaart_Griekenland_Athos.png]]" <em>(Oorspronkelijk uit CIA Factbook; vertaald in Nederlands door Daniel PNG door BenTels, enkel Athos met rood gemarkeerd door mijm; omgezet in)</em></li> <li>13 jun 2004 18:06 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Coaafghanistan.jpg|Coaafghanistan.jpg]]" <em>(afghanistan wapenschild groot)</em></li> <li>13 jun 2004 18:01 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Afghanistan_flag_large.png|Afghanistan_flag_large.png]]" <em>(vlag afghanistan 2)</em></li> <li>13 jun 2004 18:01 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:DRAfghanistanEarlyFlag.png|DRAfghanistanEarlyFlag.png]]" <em>(vlag afghanistan 1)</em></li> <li>13 jun 2004 17:41 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Robespierre.PNG|Robespierre.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>13 jun 2004 16:46 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Prairiehondjes2_mei_2004.jpg|Prairiehondjes2_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo, vrijgegeven onder GNU-FDL)</em></li> <li>13 jun 2004 16:46 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Prairiehondjes_mei_2004.jpg|Prairiehondjes_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo, vrijgegeven onder GNU-FDL)</em></li> <li>13 jun 2004 16:38 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Paard_mei_2004.jpg|Paard_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo, vrijgegeven onder GNU-FDL)</em></li> <li>13 jun 2004 15:47 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:KeizerlijkBezoek.gif|KeizerlijkBezoek.gif]]" <em>(Staatsbezoek van de tsaar aan de koning van Württemberg - &quot;Canadian Illustrated News, Vol. IV, No. 8, Page 124. Reproduced from the National Library of Canada&#39;s website Images in the News: Canadian Illustrated News.&quot; - http&#58;//www.collectionscanada.ca/index-e.html - vrij te gebruiken mits met voornoemde bronvermelding)</em></li> <li>13 jun 2004 13:49 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Karmijn.png|Karmijn.png]]" <em>(Karmijn, zelf gemaakt en ter beschikking gesteld onder GNU FDL)</em></li> <li>13 jun 2004 13:39 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cochineal.jpg|Cochineal.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Cochineal insects on a cactus plant &#91;&#91;en:Image:Cochineal.jpg]])</em></li> <li>13 jun 2004 13:36 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:KarelW.jpg|KarelW.jpg]]" <em>(Karel I van Württemberg - uitsnede uit afbeelding &quot;The Crowned Heads of Germany&quot; (Canadian Illustrated News, Vol. III, No. 13, Page 205. Reproduced from the National Library of Canada&#39;s website Images in the News: Canadian Illustrated News - http&#58;//www.collectionscanada.ca/index-e.html) )</em></li> <li>13 jun 2004 13:13 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Triode.jpg|Triode.jpg]]" <em>(Van Wikipedia.en&lt;BR&gt;Daar geupload door Stevan White met beschrijving &#39;&#39;(Diagram of Vacuum-Tube Triode)&#39;&#39;&lt;br&gt;Aangenomen licentie: &#123;&#123;GFDL}})</em></li> <li>13 jun 2004 13:12 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Diode.jpg|Diode.jpg]]" <em>(Van Wikipedia.en&lt;br&gt;Daar geupload door Stevan White met beschrijving &#39;&#39;(Diagram of Vacuum-Tube Diode)&#39;&#39;&lt;br&gt;Aangenomen licentie: &#123;&#123;GFDL}})</em></li> <li>13 jun 2004 13:11 [[Gebruiker:JeroenHoek|JeroenHoek]] heeft ge-upload: "[[:Afbeelding:Nederland_vlag_groot.png|Nederland_vlag_groot.png]]" <em>(Vlag van Nederland)</em></li> <li>13 jun 2004 13:00 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Prins_Philip.jpg|Prins_Philip.jpg]]" <em>(van Engelse pagina)</em></li> <li>13 jun 2004 12:41 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:House_Dust_Mite.jpg|House_Dust_Mite.jpg]]" <em>(En: wikipedia)</em></li> <li>13 jun 2004 12:33 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Lon_nol.jpg|Lon_nol.jpg]]" <em>(En: wikipedia)</em></li> <li>13 jun 2004 11:18 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:BlauweKamer3.JPG|BlauweKamer3.JPG]]" <em>(Eigen foto)</em></li> <li>13 jun 2004 11:17 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:BlauweKamer2.JPG|BlauweKamer2.JPG]]" <em>(Eigen foto)</em></li> <li>13 jun 2004 11:15 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:BlauweKamer1.JPG|BlauweKamer1.JPG]]" <em>(Eigen foto)</em></li> <li>13 jun 2004 11:14 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Gabon_flag_large.png|Gabon_flag_large.png]]" <em>(vlag gabon)</em></li> <li>13 jun 2004 11:12 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:PontOpheusden.JPG|PontOpheusden.JPG]]" <em>(Eigen foto)</em></li> <li>13 jun 2004 11:11 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Ethiopia_flag_large.png|Ethiopia_flag_large.png]]" <em>(vlag ethiopië)</em></li> <li>13 jun 2004 11:04 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Locatie_Dominica.png|Locatie_Dominica.png]]" <em>(Dominica kaart)</em></li> <li>13 jun 2004 11:04 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Dominica_Vlag.png|Dominica_Vlag.png]]" <em>(Dominica vlag)</em></li> <li>13 jun 2004 11:03 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Dominica23.png|Dominica23.png]]" <em>(Dominica wapenschild)</em></li> <li>13 jun 2004 10:38 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Europa60AD.jpeg|Europa60AD.jpeg]]" <em>(romeinse rijk 60-400)</em></li> <li>13 jun 2004 10:37 [[Gebruiker:Amantine|Amantine]] heeft ge-upload: "[[:Afbeelding:Cellulose.png|Cellulose.png]]" <em>(zelf gemaakt)</em></li> <li>13 jun 2004 10:33 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Europa60AD.jpeg|Europa60AD.jpeg]]" <em>(Romeinse Rijk 60-400 AD)</em></li> <li>13 jun 2004 09:36 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Offerjk.jpg|Offerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>13 jun 2004 08:32 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Scheven1.jpg|Scheven1.jpg]]" <em>(Gemaakt door [[Gebruiker:Quistnix|Quistnix]] met de &#91;&#91;GIMP]])</em></li> <li>13 jun 2004 08:23 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Eben_Moglen.jpg|Eben_Moglen.jpg]]" <em>(En: wikipedia)</em></li> <li>13 jun 2004 00:28 [[Gebruiker:Maarten van Vliet|Maarten van Vliet]] heeft ge-upload: "[[:Afbeelding:Riccardo_Chailly.jpg|Riccardo_Chailly.jpg]]" <em>(Riccardo Chailly, Italiaans dirigent - Engelse wiki: &#91;http&#58;//en.wikipedia.org/wiki/Image:Riccardo_Chailly.jpg])</em></li> <li>12 jun 2004 21:45 [[Gebruiker:Denkertje|Denkertje]] heeft ge-upload: "[[:Afbeelding:Byzantium_250px.jpg|Byzantium_250px.jpg]]" <em>(Afkomstig van Engelse Wiki)</em></li> <li>12 jun 2004 21:23 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:ViolaCurtisii-plant-kl.jpg|ViolaCurtisii-plant-kl.jpg]]" <em>(duinen wassenaar, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>12 jun 2004 21:22 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:ViolaCurtisii-overz-hr.jpg|ViolaCurtisii-overz-hr.jpg]]" <em>(duinen wassenaar, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>12 jun 2004 16:53 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Margherita.jpg|Margherita.jpg]]" <em>(Margaretha van Savoye (public domain van http&#58;//www.lib.utexas.edu/photodraw/portraits/index.html))</em></li> <li>12 jun 2004 15:26 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Residenzschloss_Ludwigsburg.jpg|Residenzschloss_Ludwigsburg.jpg]]" <em>(Slot Ludwigsburg (van Duitse Wiki))</em></li> <li>12 jun 2004 15:25 [[Gebruiker:Dr.Jelmer|Dr.Jelmer]] heeft ge-upload: "[[:Afbeelding:Mironovmethode.jpg|Mironovmethode.jpg]]" <em>(Afbeelding uit KijK, met daarop de methode van vleeskweken volgend Mironov. )</em></li> <li>12 jun 2004 14:30 [[Gebruiker:Hannes Karnoefel|Hannes Karnoefel]] heeft ge-upload: "[[:Afbeelding:Europa60AD.jpeg|Europa60AD.jpeg]]" <em>(Met de GIMP gemaakt door Hannes Karnoefel)</em></li> <li>12 jun 2004 14:07 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Wilhelma-1900.jpg|Wilhelma-1900.jpg]]" <em>(Wilhelma rond 1900 (van Duitse Wiki))</em></li> <li>12 jun 2004 14:01 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Mongkut.gif|Mongkut.gif]]"</li> <li>12 jun 2004 13:44 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Grabkapelle_fern.jpg|Grabkapelle_fern.jpg]]" <em>(Grabkapelle (mausoleum voor Willem I van Württemberg; vrij te gebruiken voor gratis doeleinden mits met de vermelding &quot;Copyright Stuttgart-Marketing GmbH&quot;))</em></li> <li>12 jun 2004 13:40 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:HansVanDenBroek.jpg|HansVanDenBroek.jpg]]" <em>(Foto Hans van den Broek. (c) European Communities. Reproduction is authorised, provided the source is acknowledged.)</em></li> <li>12 jun 2004 13:17 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Cu2..5.JPG|Cu2..5.JPG]]" <em>(Voor mij cu2 gemaakt door mijzelf)</em></li> <li>12 jun 2004 13:17 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Cu2..4.JPG|Cu2..4.JPG]]" <em>(Voor mij cu2 gemaakt door mijzelf)</em></li> <li>12 jun 2004 13:16 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Cu2..3.JPG|Cu2..3.JPG]]" <em>(Voor mij cu2 gemaakt door mijzelf)</em></li> <li>12 jun 2004 13:16 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Cu2..2.JPG|Cu2..2.JPG]]" <em>(Voor mij cu2 gemaakt door mijzelf)</em></li> <li>12 jun 2004 13:14 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Cu2..1.JPG|Cu2..1.JPG]]" <em>(Voor mij cu2 gemaakt door mijzelf)</em></li> <li>12 jun 2004 13:14 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Cu2..1.JPG|Cu2..1.JPG]]" <em>(Voor mij cu2 gemaakt door mijzelf)</em></li> <li>12 jun 2004 13:12 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:PietDankert.jpg|PietDankert.jpg]]" <em>(Foto Piet Dankert. (c) Europese Gemeenschappen, 2000. Reproductie met bronvermelding toegestaan.)</em></li> <li>12 jun 2004 13:06 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Ascona.lago.jpg|Ascona.lago.jpg]]" <em>(Bron is &#91;&#91;:de:Bild:Ascona.lago.jpg]] en volgens de aantekening vrijgegegeven onder GNU/FDL &#123;&#123;msg:GFDL}} &#91;&#91;de:Bild:Ascona.lago.jpg]])</em></li> <li>12 jun 2004 13:04 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LaurensJanBrinkhorst.jpg|LaurensJanBrinkhorst.jpg]]" <em>(Foto Laurens Jan Brinkhorst. (c) Europese Gemeenschappen, 2000. Reproductie met bronvermelding toegestaan.)</em></li> <li>12 jun 2004 12:25 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Tiel_Waterpoort.jpg|Tiel_Waterpoort.jpg]]" <em>(Tiel - Waterpoort, eigen foto)</em></li> <li>12 jun 2004 11:12 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Randjk.jpg|Randjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>12 jun 2004 08:31 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Heemjk.jpg|Heemjk.jpg]]" <em>(eigen archief)</em></li> <li>12 jun 2004 08:26 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Heemjk.jpg|Heemjk.jpg]]" <em>(erik)</em></li> <li>12 jun 2004 08:22 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Heemjk.jpg|Heemjk.jpg]]" <em>(eigen archief)</em></li> <li>11 jun 2004 21:47 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Stvking.jpg|Stvking.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: steven king (copyright ADGM) &#91;&#91;en:Image:stvking.jpg]])</em></li> <li>11 jun 2004 18:38 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Strom_Thurmond.jpg|Strom_Thurmond.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;&lt;nowiki&gt;http&#58;//www.va.gov/OCA/images/SC_SS_Thurmond2.jpg&lt;/nowiki&gt;&lt;p&gt;&#123;&#123;PD}}&lt;p&gt;&#91;&#91;en:Image:Strom Thurmond.jpg]])</em></li> <li>11 jun 2004 17:09 [[Gebruiker:G.J. Snoek|G.J. Snoek]] heeft ge-upload: "[[:Afbeelding:Zei-spreuk.png|Zei-spreuk.png]]" <em>(scan van boekomslag)</em></li> <li>11 jun 2004 16:50 [[Gebruiker:Maarten van Vliet|Maarten van Vliet]] heeft ge-upload: "[[:Afbeelding:Johannes_Brahms.jpg|Johannes_Brahms.jpg]]" <em>(Van de Engelse wiki, )</em></li> <li>11 jun 2004 15:09 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:Mozillalogo.png|Mozillalogo.png]]" <em>(engelse wikipedia)</em></li> <li>11 jun 2004 14:38 [[Gebruiker:SanderSpek|SanderSpek]] heeft ge-upload: "[[:Afbeelding:Gemckinsey.png|Gemckinsey.png]]" <em>(GE/McKinsey-matrix. Zelf in elkaar geknutselt.)</em></li> <li>11 jun 2004 12:33 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:WapenVanSavoye.jpg|WapenVanSavoye.jpg]]" <em>(Wapen van het Huis van Savoye)</em></li> <li>11 jun 2004 11:43 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Heemjk.jpg|Heemjk.jpg]]" <em>(eigen archief)</em></li> <li>11 jun 2004 11:42 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FrederikIW.jpg|FrederikIW.jpg]]" <em>(Koning Frederik I van Württemberg (schilderij van rond 1806, daarom geen copyright))</em></li> <li>11 jun 2004 11:41 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Heemsoth.jpg|Heemsoth.jpg]]" <em>(eigen archief)</em></li> <li>11 jun 2004 11:25 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:SimeonIIBulgarije.jpg|SimeonIIBulgarije.jpg]]" <em>(Simeon II van Bulgarije (van Engelse Wiki))</em></li> <li>11 jun 2004 11:17 [[Gebruiker:Robk|Robk]] heeft ge-upload: "[[:Afbeelding:Sword_Beach.PNG|Sword_Beach.PNG]]" <em>(Fragment uit kaart van internet)</em></li> <li>11 jun 2004 11:09 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:MaximiliaanMexico3.jpg|MaximiliaanMexico3.jpg]]" <em>(Maximiliaan van Mexico (van Spaanse Wiki, de beschrijving was daar:Ofrecimiento de la corona de México por parte de la delegación mexicana a Maximiliano (dominio público)))</em></li> <li>11 jun 2004 11:08 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:MaximiliaanMexico2.jpg|MaximiliaanMexico2.jpg]]" <em>(Maximiliaan van Mexico (van Spaanse Wiki, de beschrijving was daar: Retrato de Maximiliano por Winterhalter (dominio público)))</em></li> <li>11 jun 2004 11:06 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Salovjk.jpg|Salovjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>11 jun 2004 10:53 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Salov2.jpg|Salov2.jpg]]" <em>(Titkov)</em></li> <li>11 jun 2004 10:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Salov2.jpg|Salov2.jpg]]" <em>(Titkov)</em></li> <li>11 jun 2004 08:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Arojk.jpg|Arojk.jpg]]" <em>(Fritz8 - print)</em></li> <li>11 jun 2004 07:28 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Moerasandijvie.JPG|Moerasandijvie.JPG]]" <em>(Eigen foto)</em></li> <li>10 jun 2004 23:48 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SintHelenaVlag.png|SintHelenaVlag.png]]" <em>(vlag St Helena van wiki-en (orig CIA, GFDL))</em></li> <li>10 jun 2004 23:47 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SintHelenaLocatie.png|SintHelenaLocatie.png]]" <em>(Locatie St Helena va wiki-en (GFDL))</em></li> <li>10 jun 2004 23:14 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Sint_Helena_(eiland)Locatie.png|Sint_Helena_(eiland)Locatie.png]]" <em>(Locatie St Helena va wiki-en (GFDL))</em></li> <li>10 jun 2004 23:07 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Sint_HelanaVlag.png|Sint_HelanaVlag.png]]" <em>(Vlag St Helena vanb wiki-de (CIA, GFDL))</em></li> <li>10 jun 2004 23:06 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Sint_HelenaKaart.png|Sint_HelenaKaart.png]]" <em>(van wiki-de (orig CIA, GFDL))</em></li> <li>10 jun 2004 21:01 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:RayCharles.jpg|RayCharles.jpg]]" <em>(En: wikipedia)</em></li> <li>10 jun 2004 20:20 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneLatofolia-plant-hr.jpg|SileneLatofolia-plant-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, &#123;&#123;sjabloon:eigenwerk}})</em></li> <li>10 jun 2004 20:19 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneLatofolia-kelk-hr.jpg|SileneLatofolia-kelk-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, &#123;&#123;sjabloon:eigenwerk}})</em></li> <li>10 jun 2004 20:19 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneLatofolia-kelk-hr.jpg|SileneLatofolia-kelk-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, &#123;&#123;sjabloon:werk}})</em></li> <li>10 jun 2004 20:18 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneLatofolia-bloem-hr.jpg|SileneLatofolia-bloem-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, &#123;&#123;sjabloon:werk}})</em></li> <li>10 jun 2004 20:11 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:Firefoxtest.png|Firefoxtest.png]]" <em>(engelse wikipedia)</em></li> <li>10 jun 2004 19:12 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Verkiezingen3.JPG|Verkiezingen3.JPG]]" <em>(Eigen foto)</em></li> <li>10 jun 2004 19:12 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Verkiezingen2.JPG|Verkiezingen2.JPG]]" <em>(Eigen foto)</em></li> <li>10 jun 2004 19:12 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Verkiezingen1.JPG|Verkiezingen1.JPG]]" <em>(Eigen foto)</em></li> <li>10 jun 2004 13:58 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneDioica-CloseUp1-hr.jpg|SileneDioica-CloseUp1-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, &#123;&#123;sjabloon:eigenwerk}})</em></li> <li>10 jun 2004 13:53 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneDioica-CloseUp2-hr.jpg|SileneDioica-CloseUp2-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, &#123;&#123;sjabloon:eigenwerk}})</em></li> <li>10 jun 2004 13:53 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneDioica-CloseUp2-hr1.jpg|SileneDioica-CloseUp2-hr1.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, &#123;&#123;sjabloon:eigenwerk}})</em></li> <li>10 jun 2004 13:52 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneDioica-plant-hr.jpg|SileneDioica-plant-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, &#123;&#123;sjabloon:eigenwerk}})</em></li> <li>10 jun 2004 13:51 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneDioica-overz-hr.jpg|SileneDioica-overz-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse poort, &#123;&#123;sjabloon:eigenwerk}})</em></li> <li>10 jun 2004 13:43 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Achterjk.jpg|Achterjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>10 jun 2004 10:24 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Suikermais_kiemplant_tekening.jpg|Suikermais_kiemplant_tekening.jpg]]" <em>(zelfgemaakte foto van kiemplant van suikermais; verbeterde versie)</em></li> <li>10 jun 2004 10:17 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:ReunionKaart.png|ReunionKaart.png]]" <em>(Kaart Reunion van wiki-de (org CIA, GFDL))</em></li> <li>10 jun 2004 06:40 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Lucienne_BoyerAlbum.gif|Lucienne_BoyerAlbum.gif]]" <em>(Lucienne Boyer, vanaf Engelse wikipedia, &#91;&#91;en:Image: Lucienne BoyerAlbum.gif]])</em></li> <li>10 jun 2004 06:38 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lucienne_BoyerAlbum.gif|Lucienne_BoyerAlbum.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Album - Lucienne Boyer &#91;&#91;en:Image: Lucienne BoyerAlbum.gif]])</em></li> <li>10 jun 2004 06:11 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:TammeKastanje1.JPG|TammeKastanje1.JPG]]" <em>(Eigen foto)</em></li> <li>10 jun 2004 06:11 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:TammeKastanje2.JPG|TammeKastanje2.JPG]]" <em>(Eigen foto)</em></li> <li>10 jun 2004 05:15 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Suikermais_kiemplant_tekening.jpg|Suikermais_kiemplant_tekening.jpg]]" <em>(zelfgemaakte foto met bijschriften van kiemplant suikermais half juni)</em></li> <li>9 jun 2004 21:26 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:MonumentMaximiliaan.gif|MonumentMaximiliaan.gif]]" <em>(Monument voor keizer Maximiliaan van Mexico te Triëst (Canadian Illustrated News, Vol. XI, No. 25, Page 388. Reproduced from the National Library of Canada&#39;s website Images in the News: http&#58;//www.collectionscanada.ca/cin/index-e.html&quot; (vrij te gebruiken mits met deze bronvermelding))</em></li> <li>9 jun 2004 20:44 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:VictorEmanuelBerlijn.gif|VictorEmanuelBerlijn.gif]]" <em>(Victor Emanuel II inspecteert de wacht in Berlijn (Canadian Illustrated News, Vol. VIII, No. 20, Page 316. Reproduced from the National Library of Canada&#39;s website Images in the News: http&#58;//www.collectionscanada.ca/cin/index-e.html&quot; (vrij te gebruiken mits met deze bronvermelding))</em></li> <li>9 jun 2004 20:26 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Apenbomen_mei_2004.jpg|Apenbomen_mei_2004.jpg]]" <em>(Foto door Fruggo, vrijgegeven onder GNU-FDL.)</em></li> <li>9 jun 2004 20:19 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:VIctorEmanuelFransJozef.gif|VIctorEmanuelFransJozef.gif]]" <em>(Victor Emanuel II wordt verwelkomd door keizer Frans Jozef op het station van Wenen (&quot;Canadian Illustrated News, Vol. VIII, No. 18, Page 283. Reproduced from the National Library of Canada&#39;s website Images in the News: Canadian Illustrated News.&quot; - http&#58;//www.collectionscanada.ca - vrij te gebruiken mits met deze bronvermelding))</em></li> <li>9 jun 2004 20:01 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Nijlpaard2_mei_2004.jpg|Nijlpaard2_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo in het Noorder Dierenpark Emmen, vrijgegeven onder GNU-FDL.)</em></li> <li>9 jun 2004 20:00 [[Gebruiker:G.J. Snoek|G.J. Snoek]] heeft ge-upload: "[[:Afbeelding:Beugel.png|Beugel.png]]" <em>(eigen foto van een orthese/beugel)</em></li> <li>9 jun 2004 19:59 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Nijlpaard_mei_2004.jpg|Nijlpaard_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo in het Noorder Dierenpark Emmen, vrijgegeven onder GNU-FDL.)</em></li> <li>9 jun 2004 19:58 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Midwolde_kerk_mei_2004.jpg|Midwolde_kerk_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo, vrijgegeven onder GNU-FDL.)</em></li> <li>9 jun 2004 19:50 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Maraboe_mei_2004.jpg|Maraboe_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo in Noorder Dierenpark Emmen, vrijgegeven onder GNU-FDL.)</em></li> <li>9 jun 2004 19:47 [[Gebruiker:Koenb|Koenb]] heeft ge-upload: "[[:Afbeelding:Esdoorn-bladeren.jpg|Esdoorn-bladeren.jpg]]" <em>(Esdoornbladeren in mei; foto genomen door KoenB in 2004 en ter beschikking gesteld onder GPL)</em></li> <li>9 jun 2004 19:45 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Luchtballon_mei_2004.jpg|Luchtballon_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo, vrijgegeven onder GNU-FDL.)</em></li> <li>9 jun 2004 19:38 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Colobusapen_mei_2004.jpg|Colobusapen_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo in Noorder Dierenpark Emmen, vrijgegeven onder GNU-FDL)</em></li> <li>9 jun 2004 19:31 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Apebroodbomen_oftewel_Baobabs_mei_2004.jpg|Apebroodbomen_oftewel_Baobabs_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo, vrijgegeven onder GNU-FDL)</em></li> <li>9 jun 2004 19:31 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:A7_afslag_Leek_mei_2004.jpg|A7_afslag_Leek_mei_2004.jpg]]" <em>(Foto gemaakt door Fruggo, vrijgegeven onder GNU-FDL.)</em></li> <li>9 jun 2004 17:00 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:OpenOffice.org.png|OpenOffice.org.png]]" <em>(engelse wikipedia)</em></li> <li>9 jun 2004 16:17 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:Ss4.jpg|Ss4.jpg]]" <em>(engelse wikipedia)</em></li> <li>9 jun 2004 11:10 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:Header-fedora_logo.png|Header-fedora_logo.png]]" <em>(website fedora)</em></li> <li>9 jun 2004 10:54 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Clementv.gif|Clementv.gif]]" <em>(En: wikipedia)</em></li> <li>9 jun 2004 06:29 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Lausanne.jpg|Lausanne.jpg]]" <em>(Van de:)</em></li> <li>9 jun 2004 05:31 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Ostrich140.jpg|Ostrich140.jpg]]" <em>(En: wikipedia)</em></li> <li>8 jun 2004 22:29 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Schwerin_locatie.png|Schwerin_locatie.png]]" <em>(Van de:)</em></li> <li>8 jun 2004 22:29 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Schwerin_schild.jpg|Schwerin_schild.jpg]]" <em>(Van de:)</em></li> <li>8 jun 2004 21:34 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Walstro.jpg|Walstro.jpg]]" <em>(Liggend walstro bosweg juni 2004 eigen foto)</em></li> <li>8 jun 2004 20:32 [[Gebruiker:Koenb|Koenb]] heeft ge-upload: "[[:Afbeelding:Sifon.png|Sifon.png]]" <em>(Gedeeltelijke doorsnede van een schematisch getekend wastafelsifon; door koenb beschikbaar gesteld onder GPL)</em></li> <li>8 jun 2004 19:48 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:Redhat_logo.png|Redhat_logo.png]]" <em>(engelse wiki)</em></li> <li>8 jun 2004 17:43 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:MDKlinux.jpg|MDKlinux.jpg]]" <em>(website mandrakelinux)</em></li> <li>8 jun 2004 17:38 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:MDKlinux.jpg|MDKlinux.jpg]]" <em>(website mandrakelinux)</em></li> <li>8 jun 2004 17:19 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:Slogan.jpg|Slogan.jpg]]" <em>(website linspire)</em></li> <li>8 jun 2004 16:15 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:OphrysApifera-plant-hr.jpg|OphrysApifera-plant-hr.jpg]]" <em>(Bedrijventerrein Goudsepoort in Gouda, &#123;&#123;sjabloon:eigenwerk}})</em></li> <li>8 jun 2004 16:14 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:OphrysApifera-CloseUp-hr.jpg|OphrysApifera-CloseUp-hr.jpg]]" <em>(Bedrijventerrein Goudsepoort in Gouda, &#123;&#123;sjabloon:eigenwerk}})</em></li> <li>8 jun 2004 16:12 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:OphrysApifera-bloem-hr.jpg|OphrysApifera-bloem-hr.jpg]]" <em>(Bedrijventerrein Goudsepoort in Gouda, &#123;&#123;sjabloon:eigenwerk}})</em></li> <li>8 jun 2004 16:08 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LychnisFlos-cuculi-overz-hr.jpg|LychnisFlos-cuculi-overz-hr.jpg]]" <em>(Bedrijventerrein Goudsepoort in Gouda, &#123;&#123;sjabloon:eigenwerk}})</em></li> <li>8 jun 2004 16:06 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LychnisFlos-cuculi-CloseUp-hr.jpg|LychnisFlos-cuculi-CloseUp-hr.jpg]]" <em>(Bedrijventerrein Goudsepoort in Gouda, &#123;&#123;sjabloon:eigenwerk}})</em></li> <li>8 jun 2004 14:19 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Zonnestelsel_108.540au.png|Zonnestelsel_108.540au.png]]" <em>(Vertaald, gekwantiseert op 64 kleuren)</em></li> <li>8 jun 2004 14:19 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Zonnestelsel_10.347au.png|Zonnestelsel_10.347au.png]]" <em>(Vertaald, gekwantiseert op 64 kleuren)</em></li> <li>8 jun 2004 14:20 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Pixeltent.jpg|Pixeltent.jpg]]" <em>(Tent. Auteur: &#91;http&#58;//www.sxc.hu/browse.phtml?f=profile&amp;l=pixelstar Laura Kennedy]. Vrij van rechten.)</em></li> <li>8 jun 2004 13:59 [[Gebruiker:Stijlloos|Stijlloos]] heeft ge-upload: "[[:Afbeelding:George-orwell.jpg|George-orwell.jpg]]" <em>(van de engelse wiki)</em></li> <li>8 jun 2004 12:52 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Brandnetel_kleine_closeup.jpg|Brandnetel_kleine_closeup.jpg]]" <em>(zelfgemaakt foto van bloeiwijze van de Kleine brandnetel)</em></li> <li>8 jun 2004 12:06 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Brandnetel_klein_plant.jpg|Brandnetel_klein_plant.jpg]]" <em>(zelfgemaakte foto van Kleine brandnetel eind mei in kas)</em></li> <li>8 jun 2004 12:05 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Brandnetel_Grote.jpg|Brandnetel_Grote.jpg]]" <em>(zelfgemaakte foto van brandnetel begin juni)</em></li> <li>8 jun 2004 11:46 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Premajk.jpg|Premajk.jpg]]" <em>(Fritz8 - print)</em></li> <li>8 jun 2004 10:14 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Hefbrug_Zuidkade.jpg|Hefbrug_Zuidkade.jpg]]" <em>(Hefbrug Waddinxveen vanaf de Zuidkade, eigen foto)</em></li> <li>8 jun 2004 10:01 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Dreigende_lucht.jpg|Dreigende_lucht.jpg]]" <em>(buienwolk, eigen foto)</em></li> <li>8 jun 2004 09:56 [[Gebruiker:Bontenbal|Bontenbal]] heeft ge-upload: "[[:Afbeelding:053004_Iyad_Allawi.jpg|053004_Iyad_Allawi.jpg]]" <em>(van Engelse wiki)</em></li> <li>8 jun 2004 09:27 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Veldbeemdgras.jpg|Veldbeemdgras.jpg]]" <em>(zelfgemaakte foto van veldbeemdgras)</em></li> <li>8 jun 2004 08:53 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Mais_halmheffer.jpg|Mais_halmheffer.jpg]]" <em>(zelfgemaakte foto van kiemplant van mais)</em></li> <li>8 jun 2004 08:50 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stolonen_Aardappel.jpg|Stolonen_Aardappel.jpg]]" <em>(zelfgemaakt foto van stolonen bij aardappel)</em></li> <li>8 jun 2004 08:50 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stolonen_Aardappel.jpg|Stolonen_Aardappel.jpg]]" <em>(zelfgemaakt foto van stolenen bij aardappel)</em></li> <li>8 jun 2004 08:46 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stokslaboon.jpg|Stokslaboon.jpg]]" <em>(zelfgemaakte foto van stokslaboon rechtswindend)</em></li> <li>8 jun 2004 08:44 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Hop.jpg|Hop.jpg]]" <em>(zelfgemaakte foto van hoprank linksdraaiend)</em></li> <li>8 jun 2004 08:21 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Demer1.JPG|Demer1.JPG]]" <em>(Demer - eigen foto)</em></li> <li>8 jun 2004 08:18 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stengel_Aardappel_dwarsdoorsnede.jpg|Stengel_Aardappel_dwarsdoorsnede.jpg]]" <em>(zelfgemaakte fot van dwarsdoorgesenden aardappelstengel)</em></li> <li>8 jun 2004 08:16 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Braam_gestekelde_stengel.jpg|Braam_gestekelde_stengel.jpg]]" <em>(zelfgemaakte foto van stengel van braam ras Himalaya)</em></li> <li>8 jun 2004 08:10 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Braam_gestekelde_stengel.jpg|Braam_gestekelde_stengel.jpg]]" <em>(zelfgemaakte foto van stengel van braam ras Himalaya)</em></li> <li>8 jun 2004 08:05 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Zwarte_bonenluis_Tuinboon.jpg|Zwarte_bonenluis_Tuinboon.jpg]]" <em>(zelfgemaakte foto van tuinboon met zwarte bonenluis begin juni)</em></li> <li>8 jun 2004 07:30 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Poortgebouw.JPG|Poortgebouw.JPG]]" <em>(Poortgebouw - eigen foto)</em></li> <li>8 jun 2004 07:15 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Herkenrodeabdij1.jpg|Herkenrodeabdij1.jpg]]" <em>(Herkenrodeabdij - eigen foto)</em></li> <li>8 jun 2004 06:58 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Cirrus.jpg|Cirrus.jpg]]" <em>(Cirrus juni 2004 eigen foto)</em></li> <li>8 jun 2004 06:58 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Herkenrodeabdij.jpg|Herkenrodeabdij.jpg]]" <em>(Abdij van Herkenrode - eigen foto)</em></li> <li>8 jun 2004 06:34 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Protoplanetaire_schijf.jpg|Protoplanetaire_schijf.jpg]]" <em>(Van de:)</em></li> <li>8 jun 2004 05:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Transit_diagram_angles.png|Transit_diagram_angles.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Diagram showing how &#91;&#91;transit of Venus&#124;transits of Venus]] occur and why they don&#39;t occur frequently. Drawn by &#91;&#91;Theresa Knott]]. &#123;&#123;GFDL}} &#91;&#91;en:Image:Transit diagram angles.png]])</em></li> <li>8 jun 2004 05:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:TV2004-Sun1b.gif|TV2004-Sun1b.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;PD-USGov}} Source: http&#58;//sunearth.gsfc.nasa.gov/eclipse/transit/TV2004/TV2004-Sun1b.GIF See: http&#58;//sunearth.gsfc.nasa.gov/eclipse/transit/TV2004.html &#91;&#91;en:Image:TV2004-Sun1b.gif]])</em></li> <li>8 jun 2004 05:21 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:TV2004-Map1b.gif|TV2004-Map1b.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;PD-USGov}} Visibility of the &#91;&#91;June 8]] &#91;&#91;2004]] &#91;&#91;transit of Venus]]. http&#58;//sunearth.gsfc.nasa.gov/eclipse/transit/TV2004.html &#91;&#91;en:Image:TV2004-Map1b.gif]])</em></li> <li>6 jun 2004 16:00 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Benizelos.jpg|Benizelos.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Photo of Eleftherios Benizelos (former PM of Greece) &#91;&#91;en:Image:Benizelos.jpg]])</em></li> <li>6 jun 2004 15:59 [[Gebruiker:Walter Holden-Belmont|Walter Holden-Belmont]] heeft ge-upload: "[[:Afbeelding:Niger_departementen.png|Niger_departementen.png]]" <em>(Kaart departementen van Niger - gemaakt door WHB)</em></li> <li>6 jun 2004 14:17 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Valve.radio.arp.600pix.jpg|Valve.radio.arp.600pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A two-valve home-made radio from 1958. The leads connect to the low-voltage filament battery and the high-voltage anode battery.&lt;br&gt; Taken by Adrian Pingstone in 1958, prepared for Wikipedia in 2003, and released to the public domain. &#91;&#91;en:Image:valve.radio.arp.600pix.jpg]])</em></li> <li>6 jun 2004 14:11 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:EKG2.png|EKG2.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: EKG 2: time-strip &#123;&#123;GFDL}} My heart, my leads applied to my body with my hands, scanned on my scanner and converted to PNG on my computer. So any copyright that there may be in an EKG is mine, and I release it under GFDL. &#91;&#91;en:Image:EKG2.png]] EKG2.png)</em></li> <li>6 jun 2004 14:03 [[Gebruiker:Jan Lapère|Jan Lapère]] heeft ge-upload: "[[:Afbeelding:Teylers.jpg|Teylers.jpg]]" <em>(Ingang Teylers Museum in Haarlem. Foto Jan Lapère)</em></li> <li>6 jun 2004 14:00 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Mme.chiang_e.roosevelt.jpg|Mme.chiang_e.roosevelt.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Eleanor Roosevelt and Mme Chiang Kai,shek, 02/22/1943&lt;br&gt;&lt;br&gt;&#123;&#123;msg:PD}} (Source: &#91;http&#58;//www.fdrlibrary.marist.edu/fdrpho50.html]) &#91;&#91;en:Image:Mme.chiang e.roosevelt.jpg]])</em></li> <li>6 jun 2004 13:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Eleanor_Roosevelt.gif|Eleanor_Roosevelt.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: public domain image from loc.gov &#91;&#91;en:Image:Eleanor Roosevelt.gif]])</em></li> <li>6 jun 2004 13:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:NEO_elbrus_big.jpg|NEO_elbrus_big.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;&#39;Credit(s):&#39;&#39;&#39; &#91;http&#58;//glcf.umiacs.umd.edu/index.shtml University of Maryland Global Land Cover Facility] &#39;&#39;&#39;Source:&#39;&#39;&#39; http&#58;//earthobservatory.nasa.gov/Newsroom/NewImages/images.php3?img_id=15340 &#39;&#39;â€The purpose of NASA&#39;s Earth Observatory is to provide a freely-accessible publication on the Internet where the public can obtain new satellite imagery and scientific information about our home planet. The focus is on Earth&#39;s climate and environmental change. In particular, we hope our site is useful to public media and educators. Any and all materials published on the Earth Observatory are freely available for re-publication or re-use, except where copyright is indicated. We ask that NASA&#39;s Earth Observatory be given credit for its original materials.â€&#39;&#39; &#91;&#91;en:Image:NEO elbrus big.jpg]])</em></li> <li>6 jun 2004 09:04 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Geetjk.jpg|Geetjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 jun 2004 07:35 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Jupiter_gallileische_manen_klein.gif|Jupiter_gallileische_manen_klein.gif]]" <em>(Wonder kwantisatieprogramma gevonden, hogere kwaliteit, betere compressie)</em></li> <li>5 jun 2004 23:46 [[Gebruiker:CE|CE]] heeft ge-upload: "[[:Afbeelding:CaponeMugShot.jpg|CaponeMugShot.jpg]]" <em>(engelse wiki, waarbij staat public domain)</em></li> <li>5 jun 2004 23:45 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Rbhayes.jpe|Rbhayes.jpe]]" <em>(Van het Amerikaanse Library of Congress&lt;br&gt;vie Wikipedia.en&lt;br&gt;Aangenomen licentie: &#123;&#123;PD}})</em></li> <li>5 jun 2004 23:18 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Margaretha_van_Schotland.jpg|Margaretha_van_Schotland.jpg]]" <em>(van engelse pagina )</em></li> <li>5 jun 2004 20:18 [[Gebruiker:Ptennekes|Ptennekes]] heeft ge-upload: "[[:Afbeelding:Ikzeidegek.jpg|Ikzeidegek.jpg]]" <em>(Foto van mezelf)</em></li> <li>5 jun 2004 18:30 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Aral06.jpg|Aral06.jpg]]" <em>(Het (voormalige) Aralmeer: schepen blijven achter op het droge.&lt;p&gt;Bron: &#91;http&#58;//www.uzland.uz/aral/ UzLand]. Overname toegestaan met bronvermelding.)</em></li> <li>5 jun 2004 16:16 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:GeulhemmerMolen2.JPG|GeulhemmerMolen2.JPG]]" <em>(eigen foto)</em></li> <li>5 jun 2004 16:13 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:GeulhemmerMolen.JPG|GeulhemmerMolen.JPG]]" <em>(eigen foto)</em></li> <li>5 jun 2004 16:11 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Rotswoning2.JPG|Rotswoning2.JPG]]" <em>(eigen foto)</em></li> <li>5 jun 2004 16:10 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Franciscus.jpg|Franciscus.jpg]]" <em>(van Franse pagina: (&quot;La vision de saint François d&#39;Assise&quot; (Luis Tristan, musée du Louvre)) domaine public)</em></li> <li>5 jun 2004 16:09 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Rotswoning1.JPG|Rotswoning1.JPG]]" <em>(eigen foto)</em></li> <li>5 jun 2004 15:54 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Hitlermusso.jpg|Hitlermusso.jpg]]" <em>(Hitler en Mussolini (van Engelse Wiki))</em></li> <li>5 jun 2004 15:27 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:HaileSelassie.jpg|HaileSelassie.jpg]]" <em>(Haile Selassie (van Engelse Wiki))</em></li> <li>5 jun 2004 15:10 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Petrarca.jpg|Petrarca.jpg]]" <em>(van italiaanse pagina: Immagine del poeta italiano Francesco Petrarca - in flip orizzontale)</em></li> <li>5 jun 2004 14:47 [[Gebruiker:Tedesco|Tedesco]] heeft ge-upload: "[[:Afbeelding:Ascona.lago.jpg|Ascona.lago.jpg]]" <em>(Ascona - Lago Maggiore)</em></li> <li>5 jun 2004 14:44 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:VictorEmanuelIII.jpg|VictorEmanuelIII.jpg]]" <em>(Victor Emanuel III van Italië (van Engelse Wiki))</em></li> <li>5 jun 2004 11:35 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:VlagAmersfoort.png|VlagAmersfoort.png]]" <em>(Eigen afbeelding (&#91;&#91;Gebuiker:Mtcv]]))</em></li> <li>5 jun 2004 07:36 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Chicxulub_inslag.jpg|Chicxulub_inslag.jpg]]" <em>(Artiestenindruk van de Chixculub-inslag)</em></li> <li>5 jun 2004 03:44 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:NormandyCover.jpg|NormandyCover.jpg]]" <em>( (Troops taking cover on Normandy beach (public domain from &#91;http&#58;//federalvoice.dscc.dla.mil/federalvoice/020605/dday.html])) )</em></li> <li>5 jun 2004 03:37 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:D-day_allied_assault_routes.jpg|D-day_allied_assault_routes.jpg]]" <em>(uit engelse wiki)</em></li> <li>5 jun 2004 03:36 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:D-day_allied_assault_routes.jpg|D-day_allied_assault_routes.jpg]]" <em>(uit engelse wiki)</em></li> <li>4 jun 2004 23:46 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:R_heinlein.jpg|R_heinlein.jpg]]" <em>(van wikipedia-EN)</em></li> <li>4 jun 2004 18:46 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Ruis-bruin-2s.wav|Ruis-bruin-2s.wav]]" <em>(bruine ruis gegenereerd in cooledit)</em></li> <li>4 jun 2004 18:31 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Ruis-rose-2s.wav|Ruis-rose-2s.wav]]" <em>(rose ruis gegenereerd in cooledit)</em></li> <li>4 jun 2004 18:29 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Ruis-wit-2s.wav|Ruis-wit-2s.wav]]" <em>(gegenereerd met cooledit)</em></li> <li>4 jun 2004 18:17 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Simon_Wiesenthal_Center-logo.gif|Simon_Wiesenthal_Center-logo.gif]]" <em>(Ik vraag toestemming)</em></li> <li>4 jun 2004 18:15 [[Gebruiker:CE|CE]] heeft ge-upload: "[[:Afbeelding:Bonte_kraai.jpg|Bonte_kraai.jpg]]" <em>(van duitse wiki)</em></li> <li>4 jun 2004 18:06 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Gebakkenaardappels.jpg|Gebakkenaardappels.jpg]]" <em>(Aardappels bij &#91;&#91;Gebruiker:Känsterle&#124;Känsterle]] in de pan. Vrij te gebruiken ;))</em></li> <li>4 jun 2004 17:42 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:PaleisSchwerin.gif|PaleisSchwerin.gif]]" <em>(Paleis van de groothertog te Schwerin - &quot;Canadian Illustrated News, Vol. IV, No. 1, Page 5. Reproduced from the National Library of Canada&#39;s website Images in the News: Canadian Illustrated News.&quot; (http&#58;//www.collectionscanada.ca) - vrij te gebruiken mits met voornoemde bronvermelding)</em></li> <li>4 jun 2004 16:33 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:NormandyLST.jpg|NormandyLST.jpg]]" <em>(uit engelse wiki)</em></li> <li>4 jun 2004 16:32 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Eisenhower_d-day.jpg|Eisenhower_d-day.jpg]]" <em>(uit engelse wiki)</em></li> <li>4 jun 2004 15:50 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:KarelAlbert.jpg|KarelAlbert.jpg]]" <em>(Karel Albert van Sardinië - schilderij uit de jaren 1830-1840 dus geen copyright meer)</em></li> <li>4 jun 2004 09:19 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Deinonychus.jpeg|Deinonychus.jpeg]]" <em>(correcte afbeelding van dezelfde bron)</em></li> <li>4 jun 2004 09:03 [[Gebruiker:Bontenbal|Bontenbal]] heeft ge-upload: "[[:Afbeelding:Tenet-th.jpg|Tenet-th.jpg]]" <em>(Engelse Wikipedia)</em></li> <li>3 jun 2004 23:12 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Chicxulub_krater.jpg|Chicxulub_krater.jpg]]" <em>(Afbeelding PIA03381 uit NASA/JPL planetary photojournal)</em></li> <li>3 jun 2004 22:50 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Deinonychus.jpeg|Deinonychus.jpeg]]" <em>(Deinonychus. Bron: Mike O&#39;Neill: Reptiles rule! Bureau of Land Management, http&#58;//www.blm.gov/education/00_resources/articles/paleo/reptilesrule.html. &quot;Information presented on this website is public information and may be distributed or copied. Use of appropriate byline/photo/image credit is requested.&quot; &#123;&#123;PD}})</em></li> <li>3 jun 2004 22:12 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Two-Skydiving.jpg|Two-Skydiving.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Picture of a friend of mine skydiving (wearing pink), strapped to her instructor (wearing black). Released under the GFDL with her permission. &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:Two-Skydiving.jpg]])</em></li> <li>3 jun 2004 22:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:NASA-apollo-15-splashdown.jpg|NASA-apollo-15-splashdown.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Apollo 15 spashdown; from NASA http&#58;//grin.hq.nasa.gov/ABSTRACTS/GPN-2000-001121.html &#123;&#123;msg:PD}} &#91;&#91;en:Image:NASA-apollo-15-splashdown.jpg]])</em></li> <li>3 jun 2004 22:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Gleitschirm.jpg|Gleitschirm.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Tandemsprung an einem Gleitschirm, Flugplatz Windelsbleiche, Bielefeld Quelle: Eigene Aufnahme von &#91;&#91;Benutzer:Fab]], Canon Digicam, 2 MP&lt;br&gt; Aufnahmedatum: 23.08.2003 &#91;&#91;de:Bild:Gleitschirm.jpg]])</em></li> <li>3 jun 2004 21:47 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Bungeejump_vlak_voor_losmaken_Scheveningen_31_mei_2004.JPG|Bungeejump_vlak_voor_losmaken_Scheveningen_31_mei_2004.JPG]]" <em>(Bungeejumper vlak voor het losmaken, eigen foto)</em></li> <li>3 jun 2004 21:37 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Bungeejump_met_gestrekt_koord_Scheveningen_31_mei_2004.JPG|Bungeejump_met_gestrekt_koord_Scheveningen_31_mei_2004.JPG]]" <em>(Bungee jump aan eind van de eerste val, met gestrekt koord, eigen foto)</em></li> <li>3 jun 2004 21:35 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Bungeejump_begin_Scheveningen_31_mei_2004.JPG|Bungeejump_begin_Scheveningen_31_mei_2004.JPG]]" <em>(Begin van een bungee jump, eigen foto)</em></li> <li>3 jun 2004 21:33 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Bungee_spring_toren_Pier_van_Scheveningen_31_mei_2004.JPG|Bungee_spring_toren_Pier_van_Scheveningen_31_mei_2004.JPG]]" <em>(Bungee spring toren Pier van Scheveningen 31 mei 2004, eigen foto)</em></li> <li>3 jun 2004 19:57 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Example2.png|Example2.png]]" <em>(eigen illustratie, enkel voor een overlegpagina)</em></li> <li>3 jun 2004 16:38 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Louis_XVI.PNG|Louis_XVI.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaand schilderij)</em></li> <li>3 jun 2004 14:22 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Belem_in_Brazil.png|Belem_in_Brazil.png]]" <em>(Ligging van Belém)</em></li> <li>3 jun 2004 14:21 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Afrika.jpg|Kaart_Afrika.jpg]]" <em>(Ondertekening wat gekrompen)</em></li> <li>3 jun 2004 12:04 [[Gebruiker:Reinouts|Reinouts]] heeft ge-upload: "[[:Afbeelding:Kb-buitenhofdebat-close.jpeg|Kb-buitenhofdebat-close.jpeg]]" <em>(Kathalijne Buitenweg tijdens Buitenhof-debat. Webmaster groenlinks.nl heeft toestemming gegeven voor hergebruik mits voorzien van bronvermelding.)</em></li> <li>3 jun 2004 11:55 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:LekaAlbanie.jpg|LekaAlbanie.jpg]]" <em>(Krooprins Leka van Albanië (van Engelse Wiki))</em></li> <li>3 jun 2004 11:38 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Cuiaba_in_Brazil.png|Cuiaba_in_Brazil.png]]" <em>(Ligging van Cuiabá)</em></li> <li>3 jun 2004 09:46 [[Gebruiker:Bontenbal|Bontenbal]] heeft ge-upload: "[[:Afbeelding:Al-Yawar.jpg|Al-Yawar.jpg]]" <em>(foto van Engelse Wikip.)</em></li> <li>2 jun 2004 22:29 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Alitalia.a321-112.i-bixd.250pix.jpg|Alitalia.a321-112.i-bixd.250pix.jpg]]" <em>(Grotere versie)</em></li> <li>2 jun 2004 20:32 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Victoria_Eugenie.jpg|Victoria_Eugenie.jpg]]" <em>(Victoria Eugenie van Battenberg (van Engelse Wiki))</em></li> <li>2 jun 2004 19:58 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:AlfonsXIII.jpg|AlfonsXIII.jpg]]" <em>(Alfonso XIII van Spanje (van Engelse Wiki))</em></li> <li>2 jun 2004 16:36 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MalvaSylvestris-plant-hr.jpg|MalvaSylvestris-plant-hr.jpg]]" <em>(foto denhaag, leyweg, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>2 jun 2004 16:35 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MalvaSylvestris-CloseUp-hr.jpg|MalvaSylvestris-CloseUp-hr.jpg]]" <em>(foto denhaag, leyweg, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>2 jun 2004 16:35 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MalvaSylvestris-blad-hr.jpg|MalvaSylvestris-blad-hr.jpg]]" <em>(foto denhaag, leyweg, mei 2004, &#123;&#123;eigenwerk}})</em></li> <li>2 jun 2004 15:57 [[Gebruiker:Walter Holden-Belmont|Walter Holden-Belmont]] heeft ge-upload: "[[:Afbeelding:Tsjaad_departementen.png|Tsjaad_departementen.png]]" <em>(kaart van de nieuwe departementen van Tsjaad)</em></li> <li>2 jun 2004 13:11 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Maringa_in_Brazil.png|Maringa_in_Brazil.png]]" <em>(Ligging van Maringá)</em></li> <li>2 jun 2004 11:32 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:F22_Raptor_large.jpg|F22_Raptor_large.jpg]]" <em>(&#91;&#91;Image:F22 Raptor large.jpg]] Large version of F/A-22 Raptor, from af.mil)</em></li> <li>2 jun 2004 08:06 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Tulp_drietallig.jpg|Tulp_drietallig.jpg]]" <em>(zelfgemaakte foto van tulp)</em></li> <li>2 jun 2004 08:01 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bloemdiagram_tulp1.jpg|Bloemdiagram_tulp1.jpg]]" <em>(zelfgemaakte tekening; bloemdiagram van tulp)</em></li> <li>1 jun 2004 23:08 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Rickenbacker.jpg|Rickenbacker.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Eddie RIckenbacker, from http&#58;//raven.cc.ukans.edu/~kansite/ww_one/photos/greatwar.htm &#91;&#91;en:Image:rickenbacker.jpg]])</em></li> <li>1 jun 2004 23:04 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Schewardnadse.jpg|Schewardnadse.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Eduard Schewardnadse (mit Jacques Chirac, Bildausschnitt) &#61;= Quelle == Französisches Außenministerium, Abteilung Fotografien ministère des Affaires étrangères/Service photographique &#91;http&#58;//www.france.diplomatie.fr/photos/diplo/Asie/AsiN25.html#photo] &#61;= Lizenz == &#39;&#39;Les &quot;Instantanés diplomatiques&quot; sont libres de droits et peuvent être reproduits avec mention obligatoire &quot;ministère des Affaires étrangères/Service photographique&quot;. Pour tout usage exclusivement professionnel, des duplicatas sont disponibles sur demande auprès du service photographique du ministère des Affaires étrangères.&#39;&#39; (&#39;&#39;Die &quot;Schnapsschüsse diplomatischer Begegnungen&quot; sind copyrightfrei, sie dürfen mit dem Vermerk &quot;Französisches Außenministerium, Abteilung Fotografien&quot; reproduziert werden. Für rein kommerzielle Verwendungszwecke sind auf Anfrage bei der Abteilung Fotografien im französischen Außenministerium Kopien erhältlich.&#39;&#39;) &#61;= Beschreibung == &#39;&#39;Visite officielle de M. Édouard Chevardnadze, président de la République de Géorgie : Accueil par M. Jacques Chirac, président de la République française. 3 février 1997.&#39;&#39; &#91;&#91;de:Bild:Schewardnadse.jpg]])</em></li> <li>1 jun 2004 23:04 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Shewa.jpg|Shewa.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: shewarnnandze from http&#58;//www.batuminews.com/ge/index.php?ID=476 &#91;&#91;en:Image:Shewa.jpg]])</em></li> <li>1 jun 2004 22:56 [[Gebruiker:Gamekeeper|Gamekeeper]] heeft ge-upload: "[[:Afbeelding:Acetoneperoxide.gif|Acetoneperoxide.gif]]" <em>(vrij te gebruiken bestand )</em></li> <li>1 jun 2004 22:54 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Edsger_Dijkstra_large.jpg|Edsger_Dijkstra_large.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Larger version of the image of &#91;&#91;Edsger Dijkstra]]. Image courtesy of &#91;&#91;Brian Randell]], &#91;&#91;User:Nixdorf/Randell and McClure&#124;used by permission]]. &#91;&#91;en:Image:Edsger Dijkstra large.jpg]])</em></li> <li>1 jun 2004 22:10 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Afrika.jpg|Kaart_Afrika.jpg]]" <em>(Versie 4)</em></li> <li>1 jun 2004 21:34 [[Gebruiker:Ronald|Ronald]] heeft ge-upload: "[[:Afbeelding:Amsterdam-vogelvlucht-1544_kln.jpg|Amsterdam-vogelvlucht-1544_kln.jpg]]"</li> <li>1 jun 2004 21:31 [[Gebruiker:Ronald|Ronald]] heeft ge-upload: "[[:Afbeelding:Amsterdam-vogelvlucht-1544_grt.jpg|Amsterdam-vogelvlucht-1544_grt.jpg]]" <em>(maker is in de 16e eeuw overleden)</em></li> <li>1 jun 2004 20:41 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Eik.jpg|Eik.jpg]]" <em>(vrijstaande eik eigen foto)</em></li> <li>1 jun 2004 20:36 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Reigersbek-RIMG0035-kl.jpg|Reigersbek-RIMG0035-kl.jpg]]" <em>(test)</em></li> <li>1 jun 2004 20:36 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Paardebloemstreepzaad_blad.jpg|Paardebloemstreepzaad_blad.jpg]]" <em>(blad van Crepis vesicaria)</em></li> <li>1 jun 2004 20:34 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Paardebloemstreepzaad.jpg|Paardebloemstreepzaad.jpg]]" <em>(paardebloemstreepzaad juni eigen foto)</em></li> <li>1 jun 2004 20:24 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Rhodes0211.jpg|Rhodes0211.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;Colossus of Rhodes]] from &#39;&#39;The Book of Knowledge&#39;&#39;, The Grolier Society, 1911 &#91;&#91;en:Image:rhodes0211.jpg]] dus &#123;&#123;PD}} vanwege ouderdom)</em></li> <li>1 jun 2004 17:40 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Cumulus.jpg|Cumulus.jpg]]" <em>(cumuluswolken 1 juni eigen foto)</em></li> <li>1 jun 2004 17:03 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:KarelPortugalk.jpg|KarelPortugalk.jpg]]" <em>(Karel van Portugal - afbeelding ouder dan 70 jaar dus geen copyright - postcardman.net)</em></li> <li>1 jun 2004 16:59 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:KarelPortugal.jpg|KarelPortugal.jpg]]" <em>(Karel van Portugal - afbeelding ouder dan 70 jaar dus geen copyright - postcardman.net)</em></li> <li>1 jun 2004 16:59 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:KarelPortugal.jpg|KarelPortugal.jpg]]" <em>(Karel van Portugal - afbeelding ouder dan 70 jaar dus geen copyright)</em></li> <li>1 jun 2004 15:21 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:EmanuelIIPortugal.jpg|EmanuelIIPortugal.jpg]]" <em>(Emanuel II van Portugal (van Duitse Wiki))</em></li> <li>1 jun 2004 11:34 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Vaganjk.jpg|Vaganjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>1 jun 2004 07:34 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Tapetum_van_jonge_meeldraad.jpg|Tapetum_van_jonge_meeldraad.jpg]]" <em>(afbeelding overgenomen van Humboldt State University en aangevuld met Nederlandse benamingen)</em></li> <li>31 mei 2004 20:18 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:MaxJozef.jpg|MaxJozef.jpg]]" <em>(Maximiliaan I van Beieren (van Duitse Wiki))</em></li> <li>31 mei 2004 20:14 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Thomas_Jefferson.PNG|Thomas_Jefferson.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaand schilderij)</em></li> <li>31 mei 2004 18:40 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:IJssel_bij_Kampen_april04.jpg|IJssel_bij_Kampen_april04.jpg]]" <em>(Foto door Fruggo, mei 2004, vrijgegeven onder GNU-FDL)</em></li> <li>31 mei 2004 18:37 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Groningen_Diep_april04.jpg|Groningen_Diep_april04.jpg]]" <em>(Foto door Fruggo, april 2004, vrijgegeven onder GNU-FDL)</em></li> <li>31 mei 2004 18:26 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Groningen_Prinsentuin_april04.jpg|Groningen_Prinsentuin_april04.jpg]]" <em>(Foto door Fruggo, april 2004, vrijgegeven onder GNU-FDL)</em></li> <li>31 mei 2004 16:04 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Belo_Horizonte_in_Brazil.png|Belo_Horizonte_in_Brazil.png]]" <em>(Ligging van Belo Horizonte)</em></li> <li>31 mei 2004 12:52 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Boa_Vista_in_Brazil.png|Boa_Vista_in_Brazil.png]]" <em>(Ligging van Boa Vista)</em></li> <li>31 mei 2004 12:30 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Wapen2MexicaanseKeizerrijk.jpg|Wapen2MexicaanseKeizerrijk.jpg]]" <em>(Wapen van het Tweede Mexicaanse Keizerrijk (van Engelse Wiki))</em></li> <li>31 mei 2004 12:29 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:MaximiliaanMexico.JPG|MaximiliaanMexico.JPG]]" <em>(Keizer Maximiliaan van Mexico (van Engelse Wiki))</em></li> <li>31 mei 2004 10:37 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:JapanseOester.JPG|JapanseOester.JPG]]" <em>(Eigen foto)</em></li> <li>31 mei 2004 10:11 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Hogebeintum3.JPG|Hogebeintum3.JPG]]" <em>(Eigen foto)</em></li> <li>31 mei 2004 10:09 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Hogebeintum2.JPG|Hogebeintum2.JPG]]" <em>(Eigen foto)</em></li> <li>31 mei 2004 10:04 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Hogebeintum1.JPG|Hogebeintum1.JPG]]" <em>(Eigen foto)</em></li> <li>31 mei 2004 09:52 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Romanjvdk.jpg|Romanjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>31 mei 2004 09:45 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Romanjk.jpg|Romanjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>31 mei 2004 09:39 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Romanjk.jpg|Romanjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>31 mei 2004 09:22 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:LakenvelderKoeien.JPG|LakenvelderKoeien.JPG]]" <em>(Eigen foto)</em></li> <li>31 mei 2004 09:20 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Aracaju_in_Brazil.png|Aracaju_in_Brazil.png]]" <em>(Ligging van Aracaju)</em></li> <li>31 mei 2004 09:07 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Romanjk.jpg|Romanjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>31 mei 2004 08:56 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Groningen_Der_Aa-kerk_april04.jpg|Groningen_Der_Aa-kerk_april04.jpg]]" <em>(Foto door Fruggo, april 2004, vrijgegeven onder GNU-FDL)</em></li> <li>31 mei 2004 08:53 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Zonnestelsel.jpg|Zonnestelsel.jpg]]" <em>(Afbeelding PIA03153 uit NASA/JPL Planetary Photojournal)</em></li> <li>31 mei 2004 08:50 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Pelotas_in_Brazil.png|Pelotas_in_Brazil.png]]" <em>(Ligging van Pelotas)</em></li> <li>31 mei 2004 08:37 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Campo_Grande_in_Brazil.png|Campo_Grande_in_Brazil.png]]" <em>(Ligging van Campo Grande)</em></li> <li>31 mei 2004 07:36 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Arnhem_Nederrijn_Eusebiuskerk_april04.jpg|Arnhem_Nederrijn_Eusebiuskerk_april04.jpg]]" <em>(Foto door Fruggo, april 2004, vrijgegeven onder GNU/FDL)</em></li> <li>31 mei 2004 07:04 [[Gebruiker:Pierelint|Pierelint]] heeft ge-upload: "[[:Afbeelding:Cambium2.jpg|Cambium2.jpg]]" <em>(eigen werk)</em></li> <li>31 mei 2004 00:18 [[Gebruiker:Erik Zachte|Erik Zachte]] heeft ge-upload: "[[:Afbeelding:Composers.png|Composers.png]]" <em>(eigen EasyTimeline product (preview in engels, wordt straks online gerenderd))</em></li> <li>30 mei 2004 22:02 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Fb1kader.png|Fb1kader.png]]" <em>(Plaatje dat ik zelf maakte voor in de kroeg enkel)</em></li> <li>30 mei 2004 21:48 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Kaart_Griekenland_Chalkidiki.png|Kaart_Griekenland_Chalkidiki.png]]" <em>(Oorspronkelijk uit CIA Factbook; vertaald in Nederlands door Danielm; omgezet in PNG door BenTels, enkel Chalkidiki met rood gemarkeerd door mij)</em></li> <li>30 mei 2004 21:37 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Fast_Flying_Ferries.jpg|Fast_Flying_Ferries.jpg]]" <em>(iets lichter)</em></li> <li>30 mei 2004 21:20 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Fast_Flying_Ferries.jpg|Fast_Flying_Ferries.jpg]]" <em>(Draagvleugelboot te Amsterdam op weg naar Velsen, eigen foto, &#123;&#123;msg:PD}})</em></li> <li>30 mei 2004 21:18 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Planeetgroottes.jpg|Planeetgroottes.jpg]]" <em>(Vertaling afbeelding op website JPL)</em></li> <li>30 mei 2004 20:14 [[Gebruiker:Pierelint|Pierelint]] heeft ge-upload: "[[:Afbeelding:Cambium1.jpg|Cambium1.jpg]]" <em>(eigen werk)</em></li> <li>30 mei 2004 19:11 [[Gebruiker:Gamekeeper|Gamekeeper]] heeft ge-upload: "[[:Afbeelding:Goa.pls|Goa.pls]]" <em>(Goede GOA playlist)</em></li> <li>30 mei 2004 19:07 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:20040530_Wikipedia_ontmoeting.jpg|20040530_Wikipedia_ontmoeting.jpg]]" <em>(Wikipedianen ontmoeten elkaar in Utrecht, vlnr. DanielM, Erik Zachte, Ellywa en Andre Engels, foto door serveerster)</em></li> <li>30 mei 2004 18:52 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Kuiken.jpg|Kuiken.jpg]]" <em>(kuiken Leghorn 2 weken oud eigen foto)</em></li> <li>30 mei 2004 18:07 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:ZogCiano.jpeg|ZogCiano.jpeg]]" <em>(Koning Zog met Graaf Ciano (van Engelse Wiki))</em></li> <li>30 mei 2004 17:58 [[Gebruiker:Stijlloos|Stijlloos]] heeft ge-upload: "[[:Afbeelding:Quickscript_alfabet.png|Quickscript_alfabet.png]]" <em>(het volledige quickscript alfabet (eigen makelaardij))</em></li> <li>30 mei 2004 17:39 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:ZogMunt.jpg|ZogMunt.jpg]]" <em>(Munt met koning Zog van Albanië (van Engelse Wiki))</em></li> <li>30 mei 2004 17:15 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:KoningZog.jpg|KoningZog.jpg]]" <em>(Koning Zog van Albanië (van Engelse Wiki))</em></li> <li>30 mei 2004 16:38 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Florianopolis_in_Brazil.png|Florianopolis_in_Brazil.png]]" <em>(Ligging van Florianopolis)</em></li> <li>30 mei 2004 15:24 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Klaproos_stempels.jpg|Klaproos_stempels.jpg]]" <em>(zelfgemaakte foto van klaproos eind mei)</em></li> <li>30 mei 2004 15:24 [[Gebruiker:Stijlloos|Stijlloos]] heeft ge-upload: "[[:Afbeelding:Quickscript.png|Quickscript.png]]" <em>(Dit is een stukje van de titelpagina van de handleiding van de steno-vorm Quickscript. Het komt uit de download uit de yahoo group die in het publiek domein is geplaatst.)</em></li> <li>30 mei 2004 15:16 [[Gebruiker:Pierelint|Pierelint]] heeft ge-upload: "[[:Afbeelding:Schemaschild.png|Schemaschild.png]]" <em>(zelf gemaakt)</em></li> <li>30 mei 2004 13:06 [[Gebruiker:Pierelint|Pierelint]] heeft ge-upload: "[[:Afbeelding:Regelschemath.png|Regelschemath.png]]" <em>(zelf gemaakt)</em></li> <li>30 mei 2004 12:27 [[Gebruiker:Pierelint|Pierelint]] heeft ge-upload: "[[:Afbeelding:Regelschemath.png|Regelschemath.png]]" <em>(zelf gemaakt)</em></li> <li>30 mei 2004 12:25 [[Gebruiker:Pierelint|Pierelint]] heeft ge-upload: "[[:Afbeelding:Feedback.png|Feedback.png]]" <em>(zelf gemaakt)</em></li> <li>30 mei 2004 11:42 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Seirjk.jpg|Seirjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>30 mei 2004 10:25 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Caceres_in_Brazil.png|Caceres_in_Brazil.png]]" <em>(Ligging van Cáceres)</em></li> <li>30 mei 2004 03:21 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:LeopoldIIIFrederikFrans.jpg|LeopoldIIIFrederikFrans.jpg]]" <em>(Leopold III Frederik Frans van Anhalt-Dessau (schilderij uit 18e eeuw, dus geen copyright - http&#58;//www.andat.de/anhalt/anhalt_vat.htm))</em></li> <li>30 mei 2004 02:58 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:MichaelRoemenie.jpg|MichaelRoemenie.jpg]]" <em>(koning Michael van Roemenië, Vaticaan 1999 (van Roemeense Wiki))</em></li> <li>30 mei 2004 00:39 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Tsjechie.jpg|Tsjechie.jpg]]" <em>(Zelfde plaatje, vertaald door BenTels)</em></li> <li>30 mei 2004 00:15 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:George_Washington.PNG|George_Washington.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaand schilderij)</em></li> <li>29 mei 2004 20:02 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Betonning_groen.jpg|Betonning_groen.jpg]]" <em>(Groene betonning aan de IJssel bij Hattem, eigen foto, &#123;&#123;PD}})</em></li> <li>29 mei 2004 19:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Hamburger.jpg|Hamburger.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Hamburger Photograph available under GFDL license. I took this picture myself with a digital camera Olympus C-960. The picture was digitally edited. You do not need my permission to reuse it, but you may not claim that you took the photo yourself. &#91;&#91;en:Image:Hamburger.jpg]])</em></li> <li>29 mei 2004 19:51 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Hattem_Dijkpoort.jpg|Hattem_Dijkpoort.jpg]]" <em>(Dijkpoort in Hattem, eigen foto, &#123;&#123;PD}})</em></li> <li>29 mei 2004 19:50 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Hattem_kerk.jpg|Hattem_kerk.jpg]]" <em>(Kerk in Hattem, eigen foto, &#123;&#123;PD}})</em></li> <li>29 mei 2004 19:27 [[Gebruiker:DMakkin|DMakkin]] heeft ge-upload: "[[:Afbeelding:Aknikman.JPG|Aknikman.JPG]]" <em>(Aad Knikman (foto vrij van rechten))</em></li> <li>29 mei 2004 16:36 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:MaximiliaanIIBeieren.jpg|MaximiliaanIIBeieren.jpg]]" <em>(Maximiliaan II van Beieren (van Duitse Wiki))</em></li> <li>29 mei 2004 16:31 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:LuitpoldvanBeieren.jpg|LuitpoldvanBeieren.jpg]]" <em>(Prins-regent Luitpold van Beieren (van Duitse Wiki))</em></li> <li>29 mei 2004 15:58 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:8859-1_versus_utf-8.png|8859-1_versus_utf-8.png]]" <em>(Verminkte urls op UTF-8)</em></li> <li>29 mei 2004 13:40 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Nederjk.jpg|Nederjk.jpg]]" <em>(postzegel )</em></li> <li>29 mei 2004 13:19 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Parajk.jpg|Parajk.jpg]]" <em>(postzegel)</em></li> <li>29 mei 2004 12:51 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:OttoIBeieren.jpg|OttoIBeieren.jpg]]" <em>(Otto I van Beieren (van Duitse Wiki))</em></li> <li>29 mei 2004 12:47 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:LodewijkIIBeieren.jpg|LodewijkIIBeieren.jpg]]" <em>(Lodewijk II van Beieren (van Duitse Wiki))</em></li> <li>29 mei 2004 12:35 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:LodewijkIIIBeieren.jpg|LodewijkIIIBeieren.jpg]]" <em>(Lodewijk III van Beieren (van Duitse Wiki))</em></li> <li>29 mei 2004 12:33 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Hoodpagina_wikipedia_29mei_nieuwe_stijl.png|Hoodpagina_wikipedia_29mei_nieuwe_stijl.png]]" <em>(Hoofdpagina nieuwe stijl)</em></li> <li>29 mei 2004 12:32 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Hoofdpagina_wikipedia_29mei2004_oude_stijl.png|Hoofdpagina_wikipedia_29mei2004_oude_stijl.png]]" <em>(Hoofdpagina oude stijl)</em></li> <li>29 mei 2004 12:28 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Dzindjk.jpg|Dzindjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 mei 2004 12:13 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Dzindjk.jpg|Dzindjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 mei 2004 12:09 [[Gebruiker:Johanboie|Johanboie]] heeft ge-upload: "[[:Afbeelding:HOOFDPIJ.SYM|HOOFDPIJ.SYM]]" <em>(Hoofdpijn oorzaken en therapie, eigen file)</em></li> <li>29 mei 2004 11:27 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:LogoLB.png|LogoLB.png]]" <em>(aangepast tbv MonoBook)</em></li> <li>29 mei 2004 09:48 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Pronkboon_pluimpje_closeup1.jpg|Pronkboon_pluimpje_closeup1.jpg]]" <em>(zelfgemaakte foto; pronboonzaad met pluimpje (opengesneden))</em></li> <li>29 mei 2004 09:47 [[Gebruiker:DMakkin|DMakkin]] heeft ge-upload: "[[:Afbeelding:Aknikman.JPG|Aknikman.JPG]]" <em>(Foto Aad Knikman - Vrij van rechten)</em></li> <li>29 mei 2004 09:47 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumRobertianum-CloseUp-hr.jpg|GeraniumRobertianum-CloseUp-hr.jpg]]" <em>(Staelduinse bos, mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>29 mei 2004 09:45 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumRobertianum-bloem-hr.jpg|GeraniumRobertianum-bloem-hr.jpg]]" <em>(Staelduinse bos, mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>29 mei 2004 09:45 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumRobertianum-blad-hr.jpg|GeraniumRobertianum-blad-hr.jpg]]" <em>(Staelduinse bos, mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>29 mei 2004 09:44 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumRobertianum-plant-hr.jpg|GeraniumRobertianum-plant-hr.jpg]]" <em>(Staelduinse bos, mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>29 mei 2004 09:39 [[Gebruiker:DMakkin|DMakkin]] heeft ge-upload: "[[:Afbeelding:Aad.JPG|Aad.JPG]]" <em>(foto Aad Knikman, rechtenvrij)</em></li> <li>29 mei 2004 09:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:GG_-_Edmond_Halley.JPG|GG_-_Edmond_Halley.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: GG - Edmond Halley Photographie déclarée comme libre d&#39;utilisation - trouvée par &#91;&#91;Utilisateur:Semnoz]] &#91;&#91;fr:Image:GG - Edmond Halley.JPG]])</em></li> <li>29 mei 2004 08:47 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Poe.jpg|Poe.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Edgar Allan Poe, aus der eng. wikipedia PD von http&#58;//www.sru.edu/depts/cisba/compsci/dailey/217students/sgm8660/Final/ &#91;&#91;de:Bild:poe.jpg]])</em></li> <li>29 mei 2004 08:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dermatitis.jpg|Dermatitis.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Photograph of typical, mild dermatitis &#91;&#91;en:Image:Dermatitis.jpg]])</em></li> <li>29 mei 2004 08:08 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Rozenjk.jpg|Rozenjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 mei 2004 07:28 [[Gebruiker:Edwtie|Edwtie]] heeft ge-upload: "[[:Afbeelding:Xs_logo_20mm.png|Xs_logo_20mm.png]]" <em>(Dit merk van Xs4all valt buiten GPL, maar om dit logo van dit Xs4all te zien.)</em></li> <li>29 mei 2004 00:00 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Armada.jpg|Armada.jpg]]" <em>(Van Engelse wikipedia: This image has been released into the public domain by the copyright holder, or its copyright has expired. This applies worldwide. )</em></li> <li>28 mei 2004 21:20 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:RanunculusSceleratus-plant-hr.jpg|RanunculusSceleratus-plant-hr.jpg]]" <em>(weiland bij &#91;&#91;Gouda]], 11 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>28 mei 2004 21:19 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:RanunculusSceleratus-bloem-hr.jpg|RanunculusSceleratus-bloem-hr.jpg]]" <em>(weiland bij &#91;&#91;Gouda]], 11 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>28 mei 2004 20:04 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Wapenwallis.png|Wapenwallis.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Kantonswappen des Kantons Wallis, sebstgezeichnet &#91;&#91;de:Bild:Ch wappen vs.png]])</em></li> <li>28 mei 2004 19:33 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:GeorgeStephenson.PNG|GeorgeStephenson.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaand schilderij)</em></li> <li>28 mei 2004 18:47 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Paardekastanje2.jpg|Paardekastanje2.jpg]]" <em>(Paardekastanje vrijstaand eigen foto)</em></li> <li>28 mei 2004 18:46 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Paardekastanje1.jpg|Paardekastanje1.jpg]]" <em>(Paardekastanje bloem en blad eigen foto)</em></li> <li>28 mei 2004 18:22 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Hulst.jpg|Hulst.jpg]]" <em>(hulst bloem mei eigen foto)</em></li> <li>28 mei 2004 18:02 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Linde.jpg|Linde.jpg]]" <em>(kleinbladige linde eigen foto)</em></li> <li>28 mei 2004 17:05 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Easyjet.ezyi.b737.750pix.jpg|Easyjet.ezyi.b737.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: easyJet Boeing 737 (G-EZYI) taking off from Bristol Airport (England).&lt;br&gt; Photographed by Adrian Pingstone in September 2003 and released to the public domain. &#123;&#123;msg:PD}} &#91;&#91;en:Image:easyjet.ezyi.b737.750pix.jpg]])</em></li> <li>28 mei 2004 16:44 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:FarceMajeure.jpg|FarceMajeure.jpg]]" <em>(eigen afbeelding (geen eigen muziek))</em></li> <li>28 mei 2004 15:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:E_coli.JPG|E_coli.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;&#91;&#91;E. coli]]&#39;&#39; bacteria &#91;&#91;en:Image:e coli.JPG]])</em></li> <li>28 mei 2004 15:39 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:EscherichiaColi_NIAID.jpg|EscherichiaColi_NIAID.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Escherichia coli: Scanning electron micrograph of Escherichia coli, grown in culture and adhered to a cover slip. Credit: Rocky Mountain Laboratories, NIAID, NIH Source: &#91;http&#58;//www2.niaid.nih.gov/biodefense/public/images.htm NIAID]: &#39;&#39;These high-resolution (300 dpi) images may be downloaded directly from this site. All the images, except specified ones from the World Health Organization (WHO), are in the public domain. For the public domain images, there is no copyright, no permission required, and no charge for their use.&#39;&#39; &#91;&#91;en:Image:EscherichiaColi NIAID.jpg]])</em></li> <li>28 mei 2004 13:54 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Uruguaiana_in_Brazil.png|Uruguaiana_in_Brazil.png]]" <em>(Ligging van Uruguaiana)</em></li> <li>28 mei 2004 12:16 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Sao_Borja_in_Brazil.png|Sao_Borja_in_Brazil.png]]" <em>(Ligging van São Borja)</em></li> <li>28 mei 2004 07:36 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:ErechtheumKaryatiden.jpg|ErechtheumKaryatiden.jpg]]" <em>(Kariatiden van het Erechtheum, Athene. (Eigen foto, 1965).)</em></li> <li>28 mei 2004 05:58 [[Gebruiker:Pven|Pven]] heeft ge-upload: "[[:Afbeelding:Parkroutes.JPG|Parkroutes.JPG]]" <em>(De routes van ontdekkingsreiziger &#91;&#91;Mungo Park]]. Kaart: CIA World Factbook, vertaling: &#91;&#91;Gebruiker:Danielm&#124;Danielm]] (zie &#91;&#91;Afbeelding:Kaart Afrika.jpg]]), toevoeging routes: &#91;&#91;Gebruiker:Andre Engels&#124;Andre Engels]]. Bij dezen publiek domein. &#123;&#123;msg:PD}})</em></li> <li>27 mei 2004 23:38 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Tsjaadmeer-1973-1997.jpg|Tsjaadmeer-1973-1997.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:PD}} Adapted from NASA images at http&#58;//earthobservatory.nasa.gov/Newsroom/NewImages/images.php3?img_id=4714 &#91;&#91;en:Image:ShrinkingLakeChad-1973-1997-EO.JPG]])</em></li> <li>27 mei 2004 21:11 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MedicagoArabica-plant-hr.jpg|MedicagoArabica-plant-hr.jpg]]" <em>(schouwen-duiverland, 7 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>27 mei 2004 21:10 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MedicagoArabica-overz-hr.jpg|MedicagoArabica-overz-hr.jpg]]" <em>(schouwen-duiverland, 7 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>27 mei 2004 21:09 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MedicagoArabica-blad-hr.jpg|MedicagoArabica-blad-hr.jpg]]" <em>(schouwen-duiverland, 7 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>27 mei 2004 21:07 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MedicagoArabica-overz-hr.jpg|MedicagoArabica-overz-hr.jpg]]" <em>(schouwen-duiverland, 7 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>27 mei 2004 21:06 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MedicagoArabica-blad-hr.jpg|MedicagoArabica-blad-hr.jpg]]" <em>(schouwen-duiverland, 7 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>27 mei 2004 19:25 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Napoleon3.PNG|Napoleon3.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>27 mei 2004 19:07 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Parkroutes.PNG|Parkroutes.PNG]]" <em>(De routes van ontdekkingsreiziger &#91;&#91;Mungo Park]]. Kaart: CIA World Factbook, vertaling: &#91;&#91;Gebruiker:Danielm&#124;Danielm]] (zie &#91;&#91;Afbeelding:Kaart Afrika.jpg]]), toevoeging routes: &#91;&#91;Gebruiker:Andre Engels&#124;Andre Engels]]. Bij dezen publiek domein. &#123;&#123;msg:PD}})</em></li> <li>27 mei 2004 17:47 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stempelvormen.jpg|Stempelvormen.jpg]]" <em>(naar Raedfort 1978)</em></li> <li>27 mei 2004 17:36 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:IrisGermanica-bloem-hr.jpg|IrisGermanica-bloem-hr.jpg]]" <em>(Laan van eik en duinen, braakliggend land, den haag, 27 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>27 mei 2004 17:35 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:IrisGermanica-CloseUp-hr.jpg|IrisGermanica-CloseUp-hr.jpg]]" <em>(Laan van eik en duinen, braakliggend land, den haag, 27 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>27 mei 2004 17:33 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:IrisGermanica-plant-hr.jpg|IrisGermanica-plant-hr.jpg]]" <em>(Laan van eik en duinen, braakliggend land, den haag, 27 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>27 mei 2004 17:28 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:IrisGermanica-plant-kl.jpg|IrisGermanica-plant-kl.jpg]]" <em>(Laan van eik en duinen, braakliggend land, den haag, 27 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>27 mei 2004 17:27 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:IrisGermanica-CloseUp-kl.jpg|IrisGermanica-CloseUp-kl.jpg]]" <em>(Laan van eik en duinen, braakliggend land, den haag, 27 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>27 mei 2004 17:27 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:IrisGermanica-bloem-kl.jpg|IrisGermanica-bloem-kl.jpg]]" <em>(Laan van eik en duinen, braakliggend land, den haag, 27 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>27 mei 2004 16:00 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Mungopark.png|Mungopark.png]]" <em>(Mungo Park. Uit: Stanley and the White Heroes in Africa, boek uit 1890, eigen scan)</em></li> <li>27 mei 2004 13:18 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Dwergmeeuw.jpg|Dwergmeeuw.jpg]]" <em>(zelfgemaakte foto van dwergmeeuw eind mei bij Texel)</em></li> <li>27 mei 2004 12:46 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Grote_Mantelmeeuw2.jpg|Grote_Mantelmeeuw2.jpg]]" <em>(zelfgemaakte foto eind mei van meeuw haven van Texel)</em></li> <li>27 mei 2004 12:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Karpjk.jpg|Karpjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 mei 2004 09:34 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Lutjk.jpg|Lutjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 mei 2004 07:25 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Amaterasu_door_Utagawa_Kunisada.jpg|Amaterasu_door_Utagawa_Kunisada.jpg]]" <em>(Amaterasu door Utagawa Kunisada (1786-1865). Veel gereproduceerde houtsnede)</em></li> <li>27 mei 2004 06:46 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Slufter_en_muy.png|Slufter_en_muy.png]]" <em>(tekening overgenomen uit folder &#39;De Slufter en De Muy&#39; van Staatsbosbeheer)</em></li> <li>27 mei 2004 06:15 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Izanami_en_izanagi.jpg|Izanami_en_izanagi.jpg]]" <em>(Izanami en Izanagi scheppen de onderwereld, vaak gereproduceerde Japanse zijdeschildering uit ongeveer 1855)</em></li> <li>27 mei 2004 05:53 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Caudex2.JPG|Caudex2.JPG]]" <em>(Eigen foto)</em></li> <li>27 mei 2004 05:50 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Caudex1.JPG|Caudex1.JPG]]" <em>(Eigen foto)</em></li> <li>27 mei 2004 05:12 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:IxusV2.JPG|IxusV2.JPG]]" <em>(Eigen foto)</em></li> <li>27 mei 2004 05:10 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Powershot.JPG|Powershot.JPG]]" <em>(Eigen foto)</em></li> <li>26 mei 2004 22:02 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Leinsterhouse.jpg|Leinsterhouse.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: image of Leinster House. No copyright, my photograph &#91;&#91;en:Image:Leinsterhouse.jpg]])</em></li> <li>26 mei 2004 22:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Firstdail.jpg|Firstdail.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: 1919 famous historic image regularly used on posters, leaflets, handouts to tourists etc EXTREMELY unlikely to be copyright (if it is, the entire country of Ireland has broken it continually for eighty years!) &#91;&#91;en:Image:firstdail.jpg]])</em></li> <li>26 mei 2004 21:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:ElectricalGenerators.jpeg|ElectricalGenerators.jpeg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;Alternator]]s made in &#91;&#91;Budapest]], &#91;&#91;Hungary]], in the power generating hall of a &#91;&#91;hydroelectric]] station in &#91;&#91;Iolotan]] on the &#91;&#91;Murghab River]] Photograph by &#91;&#91;Sergei Mikhailovich Prokudin-Gorskii]], between 1905 and 1915. From U.S. Library of Congress website &#91;http&#58;//memory.loc.gov/pnp/ppmsc/04400/04414v.jpg] &#123;&#123;msg:PD}} &#91;&#91;en:Image:ElectricalGenerators.jpeg]])</em></li> <li>26 mei 2004 21:44 [[Gebruiker:Pierelint|Pierelint]] heeft ge-upload: "[[:Afbeelding:Scannen.png|Scannen.png]]" <em>(zelf gemaakt)</em></li> <li>26 mei 2004 21:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dusty.jpg|Dusty.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:fairuse)) http&#58;//www.thisisbradford.co.uk/bradford__district/leisure/books/jpg/dusty.jpg &#91;&#91;en:Image:dusty.jpg]])</em></li> <li>26 mei 2004 21:31 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Dean_kamen.jpg|Dean_kamen.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;&#39;Description:&#39;&#39;&#39; Photograph of Dean Kamen on Segway Scooter speaking at the 4th Annual Assistive Technology Forum, Hampshire College, Amherst, MA, USA. &#39;&#39;&#39;Source:&#39;&#39;&#39; Photograph taken by Jared C. Benedict on 03 May 2002. &#39;&#39;&#39;Copyright:&#39;&#39;&#39; &amp;copy; Jared C. Benedict. Released under the GFDL by photographer Jared C. Benedict (myself). &#91;&#91;en:Image:Dean kamen.jpg]])</em></li> <li>26 mei 2004 21:16 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Meck_vopo.jpg|Meck_vopo.jpg]]" <em>(van de engelse wiki daar ge-upload door &#91;&#91;:de:Benutzer:Baldhur]] die mij op zijn overlegpagina vertelde dat hij zelf de afbeelding gemaakt heeft en under GNU/FDL vrijgegegen heeft.. &#123;&#123;msg:GFDL}})</em></li> <li>26 mei 2004 20:54 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Ac.boris3.jpg|Ac.boris3.jpg]]" <em>(Tsaar Boris III van Bulgarije met Adolf Hitler (van Engelse Wiki))</em></li> <li>26 mei 2004 20:54 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Ac.boris3.jpg|Ac.boris3.jpg]]" <em>(Tsaar Boris III van Bulgarije (van Engelse Wiki))</em></li> <li>26 mei 2004 20:08 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Ac.ferdinand.jpg|Ac.ferdinand.jpg]]" <em>(Tsaar Ferdinand van Bulgarije (van Engelse Wiki))</em></li> <li>26 mei 2004 18:34 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Dantealighieri.PNG|Dantealighieri.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>26 mei 2004 10:10 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Ipomoea_indica.jpg|Ipomoea_indica.jpg]]" <em>(afbeelding afkomstig van Engelse Wikipedia)</em></li> <li>26 mei 2004 10:08 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Sadlerjk.jpg|Sadlerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 mei 2004 10:07 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Sadlerjk.jpg|Sadlerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 mei 2004 09:14 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Sadlerjk.jpg|Sadlerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 mei 2004 07:46 [[Gebruiker:Walter|Walter]] heeft ge-upload: "[[:Afbeelding:Egypt_Hieroglyphe4.jpg|Egypt_Hieroglyphe4.jpg]]" <em>(&#91;&#91;fr:Image:Egypt Hieroglyphe4.jpg]] Afbeelding van hiërogliefen, afkomstig van gebruiker &#91;&#91;w:fr:Utilisateur:Aoineko]] en geplaatst onder de &#91;&#91;GNU Vrije Documentatie Licentie]] door deze.)</em></li> <li>26 mei 2004 07:34 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Cristaat4.JPG|Cristaat4.JPG]]" <em>(Eigen foto)</em></li> <li>26 mei 2004 07:31 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Cristaat3.JPG|Cristaat3.JPG]]" <em>(Eigen foto)</em></li> <li>26 mei 2004 07:28 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Cristaat2.JPG|Cristaat2.JPG]]" <em>(Eigen foto)</em></li> <li>26 mei 2004 07:25 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Narcis_zaadhokken.jpg|Narcis_zaadhokken.jpg]]" <em>(zelfgemaakte foto; dwarsdoorsnede vruchtbeginsel Narcis)</em></li> <li>26 mei 2004 07:22 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Cristaat1.JPG|Cristaat1.JPG]]" <em>(Eigen foto)</em></li> <li>26 mei 2004 07:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gulkovdk.jpg|Gulkovdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 mei 2004 07:12 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gulko.jpg|Gulko.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>26 mei 2004 07:08 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Melocactus.JPG|Melocactus.JPG]]" <em>(Eigen foto)</em></li> <li>25 mei 2004 22:11 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Ernstmach.jpg|Ernstmach.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: 19th century (or early 20th century) photograph. public domain. &#123;&#123;msg:PD}} &#91;&#91;en:Image:Ernstmach.jpg]])</em></li> <li>25 mei 2004 21:03 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Charlottebronte.PNG|Charlottebronte.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaand schilderij)</em></li> <li>25 mei 2004 20:20 [[Gebruiker:Panthouse|Panthouse]] heeft ge-upload: "[[:Afbeelding:HFB-cassetterecorder.JPG|HFB-cassetterecorder.JPG]]" <em>(Zelfgemaakte foto van een cassetterecorder uit eind jaren zeventig.)</em></li> <li>25 mei 2004 19:33 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Durrës.jpg|Durrës.jpg]]" <em>(General info: Durrës, Albania Size: 55.65 KB, Dimension: 640x480 pixels, Source: Marc Morell used, with permission, License: GFDL, &#91;&#91;en:Image:Durrës.jpg]])</em></li> <li>25 mei 2004 19:29 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:DurrÙs.jpg|DurrÙs.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;&#39;General info&#39;&#39;&#39;: &#91;&#91;Durrës]], &#91;&#91;Albania]]&lt;br&gt; &#39;&#39;&#39;Size&#39;&#39;&#39;: 55.65 KB&lt;br&gt; &#39;&#39;&#39;Dimension&#39;&#39;&#39;: 640x480 pixels&lt;br&gt; &#39;&#39;&#39;Source&#39;&#39;&#39;: &#91;http&#58;//2ie.mpl.ird.fr/mm/albania Marc Morell] used with &#91;&#91;User:Dori/Marc Morell permission&#124;permission]]&lt;br&gt; &#39;&#39;&#39;License&#39;&#39;&#39;: &#91;&#91;GFDL]]&lt;br&gt; &#91;&#91;en:Image:Durrës.jpg]])</em></li> <li>25 mei 2004 19:27 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Duranduran_weddingalbum_cover.jpg|Duranduran_weddingalbum_cover.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: wedding album cover (fair use) &#91;&#91;en:Image:Duranduran weddingalbum cover.jpg]])</em></li> <li>25 mei 2004 19:26 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Rio_cover.jpg|Rio_cover.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Rio album cover &#39;&#39;This image is copyrighted. Its use is contended to be &#91;&#91;fair use]] under &#91;&#91;United States]] law. See: &#91;&#91;Wikipedia:Copyrights&#124;Copyrights]]&#39;&#39;. &#91;&#91;en:Image:Rio cover.jpg]])</em></li> <li>25 mei 2004 19:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:DandDExpertSetBoxCover.jpg|DandDExpertSetBoxCover.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Cover of D &amp; D Expert set box, covered under &quot;fair use,&quot; original from &quot;The Acaeum&quot; (http&#58;//www.acaeum.com/), used with permission &#123;&#123;msg:PermissionAndFairUse}} &#91;&#91;en:Image:DandDExpertSetBoxCover.jpg]])</em></li> <li>25 mei 2004 19:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:DandDBasicSetBoxCover.jpg|DandDBasicSetBoxCover.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Cover of D &amp; D Basic set box, covered under &quot;fair use,&quot; original from &#91;http&#58;//www.acaeum.com &quot;The Acaeum&quot;], used with permission &#123;&#123;msg:PermissionAndFairUse}} &#91;&#91;en:Image:DandDBasicSetBoxCover.jpg]])</em></li> <li>25 mei 2004 19:22 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:DandDBasicSetBoxCover.jpg|DandDBasicSetBoxCover.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Cover of D &amp; D Basic set box, covered under &quot;fair use,&quot; original from &#91;http&#58;//www.acaeum.com &quot;The Acaeum&quot;], used with permission &#123;&#123;msg:PermissionAndFairUse}} &#91;&#91;en:Image:DandDBasicSetBoxCover.jpg]] 1)</em></li> <li>25 mei 2004 19:17 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:EgyptDumyat.png|EgyptDumyat.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:EgyptDumyat.png]])</em></li> <li>25 mei 2004 19:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Duke_Ellington_Instruments.jpg|Duke_Ellington_Instruments.jpg]]" <em>(Duke_Ellington_Instruments, vanaf Engelse wikipedia &#91;&#91;en:Image:Duke Ellington Instruments.jpg]])</em></li> <li>25 mei 2004 19:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Duke_Ellington_band.jpg|Duke_Ellington_band.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: http&#58;//uv201.com/index.html &#91;&#91;en:Image:Duke Ellington band.jpg]])</em></li> <li>25 mei 2004 19:13 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Duke_Ellington_hat.jpg|Duke_Ellington_hat.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Classic picture of Duke Ellington from Museum of the City of New York. &#91;&#91;en:Image:Duke Ellington hat.jpg]])</em></li> <li>25 mei 2004 19:04 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dudleymoore.jpg|Dudleymoore.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Dudley Moore &#91;&#91;en:Image:dudleymoore.jpg]])</em></li> <li>25 mei 2004 18:07 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Ac.simeonst1postzegels.jpg|Ac.simeonst1postzegels.jpg]]" <em>(Simeon II, tsaar van Bulgarije (van Engelse Wiki))</em></li> <li>25 mei 2004 18:06 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Ac.simeon1.jpg|Ac.simeon1.jpg]]" <em>(Simeon II, premier van Bulgarije (van Engelse Wiki))</em></li> <li>25 mei 2004 13:15 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Pronkboon_worteltje.jpg|Pronkboon_worteltje.jpg]]" <em>(zelfgemaakte foto; 24 uur na vochtig maken van boon)</em></li> <li>25 mei 2004 12:55 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Hank_Marvin_2004.jpg|Hank_Marvin_2004.jpg]]" <em>(Hank Marvin -vrij ter beschikking gesteld via MSN community)</em></li> <li>25 mei 2004 10:11 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Moa.jpg|Moa.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-da. De beschrijving daar was: &#91;&#91;Billede:moa.jpg]] Rekonstruktion af moa udstillet pÃ¥ Auckland Museum pÃ¥ New Zealand. Foto: Auckland 1999, Malene Thyssen. &#91;&#91;da:Billede:moa.jpg]] &#123;&#123;msg:GNU/FDL}})</em></li> <li>25 mei 2004 09:52 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Symmetrie_twee_of_meer.png|Symmetrie_twee_of_meer.png]]" <em>(symbool voor bloemformule verbeterde versie)</em></li> <li>25 mei 2004 09:47 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Lalicjk.jpg|Lalicjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>25 mei 2004 09:38 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:G_tussenstandig.png|G_tussenstandig.png]]" <em>(symbool voor bloemformule )</em></li> <li>25 mei 2004 09:29 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:G_bovenstandig.png|G_bovenstandig.png]]" <em>(symbool voor bloemformule)</em></li> <li>25 mei 2004 09:24 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:AshmoreandCartierIslands.png|AshmoreandCartierIslands.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Ashmore and Cartier Islands From &#91;http&#58;//www.lib.utexas.edu/maps/index.html PCL map collection] &#91;&#91;en:Image:AshmoreandCartierIslands.png]])</em></li> <li>25 mei 2004 09:00 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Spiraal.png|Spiraal.png]]" <em>(symbool voor bloemformule verbeterde versie)</em></li> <li>25 mei 2004 08:55 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Symmetrie_twee_of_meer.png|Symmetrie_twee_of_meer.png]]" <em>(symbool voor bloemformule)</em></li> <li>25 mei 2004 07:57 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Spiraal.png|Spiraal.png]]" <em>(zelfgemaakte tekening voor bloemformule verbeterde versie)</em></li> <li>25 mei 2004 07:38 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Spiraal.png|Spiraal.png]]" <em>(zelfgemaakte tekening voor bloemformule)</em></li> <li>25 mei 2004 07:25 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Wheat.jpg|Wheat.jpg]]" <em>(En: wikipedia)</em></li> <li>25 mei 2004 06:32 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Oceanie.jpg|Kaart_Oceanie.jpg]]" <em>(Vertaling kaart Nederlands)</em></li> <li>25 mei 2004 06:18 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Ignatius_Loyola.jpg|Ignatius_Loyola.jpg]]" <em>(En: wikipedia)</em></li> <li>24 mei 2004 22:11 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dubrovnik.jpg|Dubrovnik.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Dubrovnik &#91;&#91;en:Image:dubrovnik.jpg]])</em></li> <li>24 mei 2004 22:09 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:VictorEmanuelII2.jpg|VictorEmanuelII2.jpg]]" <em>(Victor Emanuel II van Italië (public domain van http&#58;//www.lib.utexas.edu/photodraw/portraits/))</em></li> <li>24 mei 2004 22:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:BurjalArab.jpg|BurjalArab.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Arabian Tower - Burj Al Arab - From: http&#58;//www.gardkarlsen.com/dubai.htm &#91;&#91;en:Image:BurjalArab.jpg]])</em></li> <li>24 mei 2004 21:54 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Pan_och_en_hamadryad_Mosaik_frÃ¥n_Pompeji.jpg|Pan_och_en_hamadryad_Mosaik_frÃ¥n_Pompeji.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-sv. De beschrijving daar was: Mosaik frÃ¥n Pompeji; Pan och en Hamadryad; frÃ¥n en &#91;&#91;sv:Bild:Pan och en hamadryad Mosaik frÃ¥n Pompeji.jpg]])</em></li> <li>24 mei 2004 21:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dryad11.jpg|Dryad11.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The Dryad Evelyn De Morgan (British, 1850-1919) &#91;&#91;en:Image:Dryad11.jpg]])</em></li> <li>24 mei 2004 21:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Printingpress.png|Printingpress.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: resized picture &#91;&#91;en:Image:Printingpress.png]])</em></li> <li>24 mei 2004 21:43 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Igflatbedcylinderpress.jpg|Igflatbedcylinderpress.jpg]]" <em>(Vanaf Engelse wikipedia, &#91;&#91;en:Image:Igflatbedcylinderpress.jpg]])</em></li> <li>24 mei 2004 21:36 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Drosm3.gif|Drosm3.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The copyright status of this image and the source of this image needs to clarified. --&#91;&#91;User:Lexor&#124;Lexor]] 11:17, 25 Nov 2003 (UTC) &#91;&#91;en:Image:Drosm3.gif]])</em></li> <li>24 mei 2004 21:23 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Bisdomkaart.png|Bisdomkaart.png]]" <em>(Bisdomkaart van Nederland, eigen werk, &#123;&#123;msg:PS}})</em></li> <li>24 mei 2004 21:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Triangulation.png|Triangulation.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: triangulation &#91;&#91;fr:Image:Triangulation.png]])</em></li> <li>24 mei 2004 20:58 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Napoleonbonaparte.PNG|Napoleonbonaparte.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>24 mei 2004 20:34 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:ATB-kaart.png|ATB-kaart.png]]" <em>(spoorkaart van Nederland. toont waar ATB-EG, ATB-NG en PZB of geen treinbeïnvloeding ligt, eigen werk, &#123;&#123;msg:PD}})</em></li> <li>24 mei 2004 20:28 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Suid-Afrika-coa.png|Suid-Afrika-coa.png]]" <em>(test, uit afr wiki)</em></li> <li>24 mei 2004 20:26 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:South_africa_flag_medium.png|South_africa_flag_medium.png]]" <em>(test, uit afr wiki)</em></li> <li>24 mei 2004 20:22 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Collared.jpg|Collared.jpg]]" <em>(En: wikipedia)</em></li> <li>24 mei 2004 20:10 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Beachvolley.jpg|Beachvolley.jpg]]" <em>(De Nederlandse beachvolleybalster Marrit Leenstra in gevecht aan het net. Bron: http&#58;//www.volleybal.nl/. Overname toegestaan, maar alleen met bronvermelding.)</em></li> <li>24 mei 2004 19:21 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Onkruid.jpg|Onkruid.jpg]]" <em>(bloemen in verwaarloosd weiland eigen foto)</em></li> <li>24 mei 2004 19:08 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Grenspaal1.jpg|Grenspaal1.jpg]]" <em>(grenspaal tussen het vroegere Pruisen (Oostkantons) en België)</em></li> <li>24 mei 2004 18:50 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Hoogspanning2.jpg|Hoogspanning2.jpg]]" <em>(nabij centrale van Coo-Trois-Ponts eigen foto)</em></li> <li>24 mei 2004 18:49 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Hoogspanning1.jpg|Hoogspanning1.jpg]]" <em>(nabij centrale van Coo-Trois-Ponts eigen foto)</em></li> <li>24 mei 2004 12:45 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Beliavsky.jpg|Beliavsky.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>24 mei 2004 12:39 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Beliajk.jpg|Beliajk.jpg]]" <em>(friso)</em></li> <li>24 mei 2004 11:45 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kupreijk.jpg|Kupreijk.jpg]]" <em>(Fritz8 - print)</em></li> <li>24 mei 2004 10:40 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Sokoljk.jpg|Sokoljk.jpg]]" <em>(Fritz8 - print)</em></li> <li>24 mei 2004 09:08 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Qinjk.jpg|Qinjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>24 mei 2004 06:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:SavonarolaPlaque.jpg|SavonarolaPlaque.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Plaque commemorating the spot where Girolamo Savonarola was executed in the Piazza Della Signoria, Florence. Photograph by Greg O&#39;Beirne. &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:SavonarolaPlaque.jpg]])</em></li> <li>24 mei 2004 06:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Savonarola.jpg|Savonarola.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: savonarola &#123;&#123;msg:Unverified}} &#91;&#91;en:Image:Savonarola.jpg]])</em></li> <li>24 mei 2004 00:02 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Harmonischen.jpg|Harmonischen.jpg]]" <em>(eigen afbeelding)</em></li> <li>23 mei 2004 22:28 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Johanneskepler.PNG|Johanneskepler.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>23 mei 2004 21:45 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Wappen_ar_1813.jpg|Wappen_ar_1813.jpg]]" <em>(Wapen van Argentinië (1813))</em></li> <li>23 mei 2004 19:22 [[Gebruiker:Dick Bos|Dick Bos]] heeft ge-upload: "[[:Afbeelding:Woodlark57.jpg|Woodlark57.jpg]]" <em>(Boomleeuwerik; plaatje uit een oude encyclopedie; van Engelse Wikipedia)</em></li> <li>23 mei 2004 18:56 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Virgo.arp.750pix.jpg|Virgo.arp.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A star field in the Virgo Cluster.&lt;br&gt; &#39;&#39;&#39;CREDIT:&#39;&#39;&#39; ESO PR Photo 04a/03 &lt;br&gt; &#39;&#39;&#39;SOURCE:&#39;&#39;&#39; http&#58;//www.eso.org/outreach/press-rel/pr-2003/pr-02-03.html &lt;br&gt; &#39;&#39;&#39;COPYRIGHT:&#39;&#39;&#39; &#39;&#39;&quot;The photos displayed here may be reproduced for non-commercial purposes, if reference is made to the European Southern Observatory.&quot;&#39;&#39; &lt;br&gt; &#39;&#39;&#39;PREPARED BY&#39;&#39;&#39; Adrian Pingstone in December 2003. &#91;&#91;en:Image:virgo.arp.750pix.jpg]])</em></li> <li>23 mei 2004 18:31 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Mimas_moon.jpg|Mimas_moon.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Mimas, Saturn&#39;s moon. Taken by Voyager 1. NASA PD &#91;&#91;en:Image:Mimas moon.jpg]])</em></li> <li>23 mei 2004 18:28 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Microtuble.jpg|Microtuble.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: From &#91;http&#58;//www-vis.lbl.gov/Vignettes/KDowning-Microtubules/index.html], believed to be in the &#91;&#91;public domain]] &#91;&#91;en:Image:Microtuble.jpg]])</em></li> <li>23 mei 2004 18:26 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Prime_meridian.jpg|Prime_meridian.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The Prime Meridian, Greenwich Image by &#91;&#91;User:ChrisO&#124;ChrisO]] &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:Prime meridian.jpg]])</em></li> <li>23 mei 2004 18:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Tony_Banks_S.jpg|Tony_Banks_S.jpg]]" <em>(Vanaf Poolse wikipedia &#91;&#91;pl:Grafika:Tony Banks S.jpg]])</em></li> <li>23 mei 2004 18:09 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Zanzibar_(tanzania).jpg|Zanzibar_(tanzania).jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Map of Zanzibar (Tanzania) from http&#58;//www.lib.utexas.edu/maps/tanzania.html &#91;&#91;en:Image:Zanzibar (tanzania).jpg]])</em></li> <li>23 mei 2004 16:57 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Royal_observatory_greenwich.jpg|Royal_observatory_greenwich.jpg]]" <em>(greenwich obrservatorium)</em></li> <li>23 mei 2004 16:20 [[Gebruiker:Bernard van der Wees|Bernard van der Wees]] heeft ge-upload: "[[:Afbeelding:Napoleon.png|Napoleon.png]]" <em>(Eerdere versie hersteld)</em></li> <li>23 mei 2004 16:20 [[Gebruiker:Bernard van der Wees|Bernard van der Wees]] heeft ge-upload: "[[:Afbeelding:Napoleon.png|Napoleon.png]]" <em>(Eerdere versie hersteld)</em></li> <li>23 mei 2004 16:14 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:WhiteHorseFromGround_CopyrightKaihsuTai.jpg|WhiteHorseFromGround_CopyrightKaihsuTai.jpg]]" <em>(en: wikipedia gfdl)</em></li> <li>23 mei 2004 14:16 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Symphony_in_White.jpg|Symphony_in_White.jpg]]" <em>(Van Engelse Wikipedia: Whistler, “Symphony in White, No.1: The White Girlâ€, National Gallery of Art, Washington DC, USA. Picture prepared for Wikipedia by Adrian Pingstone in May 2003. )</em></li> <li>23 mei 2004 13:09 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Antarctica_Map.png|Antarctica_Map.png]]" <em>(Kaart Antarctica&lt;br&gt;Vertaling door Ben Tels)</em></li> <li>23 mei 2004 11:36 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:NEO_ellesmere_small.jpg|NEO_ellesmere_small.jpg]]" <em>(nationaal park)</em></li> <li>23 mei 2004 11:28 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Ellesmere.png|Ellesmere.png]]" <em>(ellesmere eiland)</em></li> <li>23 mei 2004 11:09 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Baffin.png|Baffin.png]]" <em>(baffineiland)</em></li> <li>23 mei 2004 10:19 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Nansen.jpg|Nansen.jpg]]" <em>(nansen)</em></li> <li>23 mei 2004 10:15 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Grenspaal.jpg|Grenspaal.jpg]]" <em>(grenspaal 105 (grens tussen Pruisen en België tot 1918) op niet zichtbare zijde letters &quot;Pr&quot;)</em></li> <li>23 mei 2004 09:16 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Grenspaal.jpg|Grenspaal.jpg]]" <em>(grenspaal 105 (grens tussen Pruisen en België tot 1918) op niet zichtbare zijde letters &quot;Pr&quot;)</em></li> <li>23 mei 2004 08:54 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Bosbessen.jpg|Bosbessen.jpg]]" <em>(bosbessen langs bosweg mei eigen foto)</em></li> <li>23 mei 2004 08:43 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Look-zonder-look.JPG|Look-zonder-look.JPG]]" <em>(Look-zonder-look berm mei eigen foto)</em></li> <li>23 mei 2004 07:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dragoon-illustration.jpeg|Dragoon-illustration.jpeg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Illustration of &#91;&#91;dragoon]] {&#124; align=center style=&quot;width:80%;background-color:white&quot; &#124; Light Dragoon &#124;- &#124; 1975 &#124;- &#124; Illustration by Don Troiani, &#91;&#91;National Park Service]] A trooper of &#91;&#91;William Washington]] cavalry, &#91;&#91;2nd Continental Light Dragoons]]. &#124;} From http&#58;//www.cr.nps.gov/museum/exhibits/revwar/vafo/vafohorse.html &#123;&#123;msg:PD}} &#91;&#91;en:Image:Dragoon-illustration.jpeg]])</em></li> <li>23 mei 2004 07:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Img1608.jpg|Img1608.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: 1998 nairobi bombing &#91;&#91;en:Image:img1608.jpg]])</em></li> <li>23 mei 2004 07:43 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Aanslag_nairobi.jpg|Aanslag_nairobi.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: 1998 nairobi bombing &#91;&#91;en:Image:img1608.jpg]])</em></li> <li>23 mei 2004 07:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Nairobiright.jpg|Nairobiright.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: city of nairobi (1980&#39;s) &#91;&#91;en:Image:nairobiright.jpg]])</em></li> <li>23 mei 2004 07:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Legree.png|Legree.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Simon Legree, from a &#91;&#91;magic lantern]] series of about &#91;&#91;1885]] of &#39;&#39;&#91;&#91;Uncle Tom&#39;s Cabin]]&#39;&#39; &#91;&#91;en:Image:legree.png]])</em></li> <li>23 mei 2004 03:05 [[Gebruiker:Branddobbe|Branddobbe]] heeft ge-upload: "[[:Afbeelding:Gebruiker_Branddobbe.jpg|Gebruiker_Branddobbe.jpg]]" <em>(ik)</em></li> <li>23 mei 2004 00:30 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Undergroundrailroadsmall2.jpg|Undergroundrailroadsmall2.jpg]]" <em>(Een kaart van routes van de Underground Railroad.&lt;br&gt;Bron: http&#58;//history.sandiego.edu/gen/CWPics/86139.jpg, via Wikipedia.en&lt;br&gt;Licentie onbekend, toestemming voor plaatsing aangenomen wegens publicatie op Wikipedia.en)</em></li> <li>23 mei 2004 00:07 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Harriet_beecher_stowe.jpg|Harriet_beecher_stowe.jpg]]" <em>(Harriet Beecher Stowe&lt;br&gt;Bron: Wikipedia.en&lt;br&gt;Beschrijving aldaar:Harriet Beecher Stowe (19th century photograph)&lt;br&gt;Aangenomen licentie (uit publicatie op Wikipedia): &#123;&#123;msg:GFDL}} )</em></li> <li>22 mei 2004 20:12 [[Gebruiker:Dick Bos|Dick Bos]] heeft ge-upload: "[[:Afbeelding:MarxKapitaal.jpg|MarxKapitaal.jpg]]" <em>(voorzijde omslag &#39;&#39;&#39;Karl Marx&#39;&#39;&#39;-&#39;&#39;Het Kapitaal&#39;&#39; (vert. I. Lipschits) 1976 )</em></li> <li>22 mei 2004 19:30 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:PuntlandLocatie.png|PuntlandLocatie.png]]" <em>(Locatie puntland (bewerking van SomalieLocatie: GFDL))</em></li> <li>22 mei 2004 19:18 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:RoaldAmundsen.jpg|RoaldAmundsen.jpg]]" <em>(Roald Amundsen)</em></li> <li>22 mei 2004 19:04 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:PuntlandVlag.png|PuntlandVlag.png]]" <em>(Vlag Puntland van wiki-en (GFDL))</em></li> <li>22 mei 2004 18:56 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Kinesisk_drake.PNG|Kinesisk_drake.PNG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-sv. De beschrijving daar was: frÃ¥n Nordisk familjbok &#91;&#91;sv:Bild:Kinesisk drake.PNG]])</em></li> <li>22 mei 2004 18:56 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Draak_uit_de_middeleeuwen.png|Draak_uit_de_middeleeuwen.png]]" <em>(Draak uit de middeleeuwen, vanaf Zweedse wikipedia, frÃ¥n Nordisk familjbok, &#91;&#91;sv:Bild:Drake pÃ¥ en medeltida väfvnad.png]])</em></li> <li>22 mei 2004 18:53 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Finn_Ronne.png|Finn_Ronne.png]]" <em>(finn ronne)</em></li> <li>22 mei 2004 18:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Drake_pÃ¥_en_medeltida_väfvnad.png|Drake_pÃ¥_en_medeltida_väfvnad.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-sv. De beschrijving daar was: frÃ¥n Nordisk familjbok &#91;&#91;sv:Bild:Drake pÃ¥ en medeltida väfvnad.png]])</em></li> <li>22 mei 2004 18:43 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Metal_lathe.png|Metal_lathe.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A Lathe for Turning Metal From US Army training publication TC 9-524. &#123;&#123;Msg:PD}} &#91;&#91;en:Image:Metal lathe.png]])</em></li> <li>22 mei 2004 18:43 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lathe.PNG|Lathe.PNG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: From http&#58;//www.sru.edu/depts/cisba/compsci/dailey/public/machines.html &#91;&#91;en:Image:Lathe.PNG]])</em></li> <li>22 mei 2004 18:41 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Nails.jpg|Nails.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: common nails &#91;&#91;en:Image:nails.jpg]])</em></li> <li>22 mei 2004 18:38 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Drill.jpg|Drill.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Jordan assembling a bookcase &#91;&#91;en:Image:Drill.jpg]])</em></li> <li>22 mei 2004 18:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:WhitecliffsDover.jpg|WhitecliffsDover.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Dover Harbour with White Cliffs, ca. 1980 &#91;&#91;en:Image:whitecliffsDover.jpg]])</em></li> <li>22 mei 2004 18:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Arms-dover.jpg|Arms-dover.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Arms of &#91;&#91;Dover]] District Council. From &#91;http&#58;//www.civicheraldry.co.uk civicheraldry.co.uk], with permission. &#91;&#91;User:Marnanel/CivicHeraldry pages&#124;About the civic heraldry images...]] &#61;=External links== * &#91;http&#58;//www.civicheraldry.co.uk/kent.html#dover%20dc Details of the arms] &#91;&#91;en:Image:arms-dover.jpg]])</em></li> <li>22 mei 2004 18:31 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Situationsplan_von_Dover.jpg|Situationsplan_von_Dover.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Situationsplan von Dover / Quelle: &#91;&#91;Meyers Konversationslexikon]] von 1888, Band 5, Seite 97 / Lizenz: Public Domain &#91;&#91;de:Bild:Situationsplan von Dover.jpg]])</em></li> <li>22 mei 2004 18:26 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ha1.jpg|Ha1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Angioplasty Owned by and taken of &#91;&#91;user:bleiglass&#124;Bleiglass]] &#91;&#91;en:Image:Ha1.jpg]])</em></li> <li>22 mei 2004 17:55 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:ZuidGeorgieSandwichEilandenKaart.png|ZuidGeorgieSandwichEilandenKaart.png]]" <em>(Kaart Sandwicheil van wiki-de (orig CIA) PD)</em></li> <li>22 mei 2004 17:53 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:ZuidGeorgiaSandwichVlag.jpg|ZuidGeorgiaSandwichVlag.jpg]]" <em>(vlag zuid georgie en zuidelijke sandwich eilanden)</em></li> <li>22 mei 2004 17:29 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Ferdinand_I_van_Roemenië.jpg|Ferdinand_I_van_Roemenië.jpg]]" <em>(Ferdinand I van Roemenië (van Zweedse Wiki))</em></li> <li>22 mei 2004 17:15 [[Gebruiker:Willemz|Willemz]] heeft ge-upload: "[[:Afbeelding:APB.JPG|APB.JPG]]" <em>(gemaakt met CabriGeometreIIplus)</em></li> <li>22 mei 2004 17:13 [[Gebruiker:Willemz|Willemz]] heeft ge-upload: "[[:Afbeelding:ABP.JPG|ABP.JPG]]" <em>(bemaakt met CabriGeometreIIplus)</em></li> <li>22 mei 2004 16:39 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:A-38.jpg|A-38.jpg]]" <em>(a-38 ijsschots)</em></li> <li>22 mei 2004 16:37 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:300px-A-38.jpg|300px-A-38.jpg]]" <em>(ijsschots a-38)</em></li> <li>22 mei 2004 16:36 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:300px-A-38.jpg|300px-A-38.jpg]]" <em>(ijsschots a-38)</em></li> <li>22 mei 2004 16:09 [[Gebruiker:Amantine|Amantine]] heeft ge-upload: "[[:Afbeelding:Chitine.png|Chitine.png]]" <em>(Structuurtekening chitine, door mij zelf gemaakt)</em></li> <li>22 mei 2004 15:45 [[Gebruiker:MrBrown|MrBrown]] heeft ge-upload: "[[:Afbeelding:Drr.jpg|Drr.jpg]]" <em>(De Rechtvaardige Rechters, kleurenfoto van het origineel door Agfa Gevaert)</em></li> <li>22 mei 2004 15:04 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Minoische_vaas_octopus.jpg|Minoische_vaas_octopus.jpg]]" <em>(Minoische vaas met octopus)</em></li> <li>22 mei 2004 15:02 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Ludwigvanbeethoven.PNG|Ludwigvanbeethoven.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>22 mei 2004 14:49 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Antarctica_Map.png|Antarctica_Map.png]]" <em>(kaart antarctica)</em></li> <li>22 mei 2004 14:39 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Antarctica_shaded_topo_map.jpg|Antarctica_shaded_topo_map.jpg]]" <em>(kaart antarctica)</em></li> <li>22 mei 2004 14:13 [[Gebruiker:Puckly|Puckly]] heeft ge-upload: "[[:Afbeelding:Canada_Saskatchewan.png|Canada_Saskatchewan.png]]" <em>(Gemaakt door de Canadees &#91;&#91;w:en:User:Montrealais&#124;Montréalais]] voor WikipediaEN, dus GNU/FDL)</em></li> <li>22 mei 2004 14:13 [[Gebruiker:Puckly|Puckly]] heeft ge-upload: "[[:Afbeelding:Canada_Quebec.png|Canada_Quebec.png]]" <em>(Gemaakt door de Canadees &#91;&#91;w:en:User:Montrealais&#124;Montréalais]] voor WikipediaEN, dus GNU/FDL)</em></li> <li>22 mei 2004 14:11 [[Gebruiker:Puckly|Puckly]] heeft ge-upload: "[[:Afbeelding:Canada_Ontario.png|Canada_Ontario.png]]" <em>(Gemaakt door de Canadees &#91;&#91;en:User:montrealais]] voor WikipediaEN, dus GNU/FDL)</em></li> <li>22 mei 2004 14:11 [[Gebruiker:Puckly|Puckly]] heeft ge-upload: "[[:Afbeelding:Canada_Manitoba.png|Canada_Manitoba.png]]" <em>(Gemaakt door de Canadees &#91;&#91;en:User:montrealais]] voor WikipediaEN, dus GNU/FDL)</em></li> <li>22 mei 2004 14:10 [[Gebruiker:Puckly|Puckly]] heeft ge-upload: "[[:Afbeelding:Canada_BC.png|Canada_BC.png]]" <em>(Gemaakt door de Canadees &#91;&#91;en:User:montrealais]] voor WikipediaEN, dus GNU/FDL)</em></li> <li>22 mei 2004 14:10 [[Gebruiker:Puckly|Puckly]] heeft ge-upload: "[[:Afbeelding:Canada_Alberta.png|Canada_Alberta.png]]" <em>(Gemaakt door de Canadees &#91;&#91;en:User:montrealais]] voor WikipediaEN, dus GNU/FDL)</em></li> <li>22 mei 2004 13:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Rumsfeld_Isaias_Afewerki.jpg|Rumsfeld_Isaias_Afewerki.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: US Secretary of Defense Donald Rumsfeld and Eritrean President Isaias Afewerki, public domain image from defenselink.mil &#91;&#91;en:Image:Rumsfeld Isaias Afewerki.jpg]])</em></li> <li>22 mei 2004 13:11 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:PalauKaart.png|PalauKaart.png]]" <em>(Kaart Palaue van wiki-en (CIA, PD, conv naar .png))</em></li> <li>22 mei 2004 13:09 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:PalauLocatie.png|PalauLocatie.png]]" <em>(Locatie Paulau van wiki-en GFDL)</em></li> <li>22 mei 2004 11:47 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:ConstantijnIvanGriekenland.jpg|ConstantijnIvanGriekenland.jpg]]" <em>(Constantijn I van Griekenland (van Engelse Wiki))</em></li> <li>22 mei 2004 11:41 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Damejk.jpg|Damejk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 mei 2004 11:32 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:CassTape.JPG|CassTape.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:PD}}. Cassette Tape, picture taken by &#91;&#91;User:Seth Ilys]] on 15 Mar 2004 and released into the public domain. &#91;&#91;en:Image:CassTape.JPG]])</em></li> <li>22 mei 2004 11:17 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Iceberg09.jpg|Iceberg09.jpg]]" <em>(ijsbergen)</em></li> <li>22 mei 2004 11:15 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:500px-Iceberg09.jpg|500px-Iceberg09.jpg]]" <em>(ijsbergen)</em></li> <li>22 mei 2004 10:16 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:FotoRuudLubbers.jpg|FotoRuudLubbers.jpg]]" <em>(Foto Ruud Lubbers)</em></li> <li>22 mei 2004 09:43 [[Gebruiker:Serassot|Serassot]] heeft ge-upload: "[[:Afbeelding:Markeren_kruis.jpg|Markeren_kruis.jpg]]" <em>(eigen foto)</em></li> <li>22 mei 2004 09:39 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Torenjk.jpg|Torenjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 mei 2004 08:49 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Rhinanthus-bloem-kl.jpg|Rhinanthus-bloem-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein goudse poort, 19 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>22 mei 2004 08:40 [[Gebruiker:Waerth|Waerth]] heeft ge-upload: "[[:Afbeelding:Chad_Prefectures_numbered_300px.png|Chad_Prefectures_numbered_300px.png]]" <em>(kaartje gemaakt door user Snoyes van de engelse wikipedia voor het kaartenproject aldaar, vrij te gebruiken)</em></li> <li>22 mei 2004 08:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Koningjk.jpg|Koningjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 mei 2004 08:03 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:DornierLogo.png|DornierLogo.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Dornier company logo &#91;&#91;en:Image:DornierLogo.png]])</em></li> <li>22 mei 2004 07:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dorycka.jpg|Dorycka.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-pl. De beschrijving daar was: ksi&amp;#261;&amp;#380;ka z r. 1902 &#91;&#91;pl:Grafika:dorycka.jpg]])</em></li> <li>22 mei 2004 07:56 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Grandtemp.jpg|Grandtemp.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Temple of the Delians &#91;&#91;en:Image:Grandtemp.jpg]])</em></li> <li>22 mei 2004 07:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Jonisk1.png|Jonisk1.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Ionic capital, from Nordisk familjebok. Image in public domain. &#91;&#91;en:Image:Jonisk1.png]])</em></li> <li>22 mei 2004 07:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Image:Grandtemp.jpg|Image:Grandtemp.jpg]]" <em>(Tempel met Dorische zuilen, vanaf Engelse wikipedia, &#91;&#91;en:Image:Image:Grandtemp.jpg]])</em></li> <li>22 mei 2004 07:48 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Image:Grandtemp.jpg|Image:Grandtemp.jpg]]" <em>(Give a description for the image:Tempel met Dorische zuilen)</em></li> <li>22 mei 2004 07:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dorische_zuil.png|Dorische_zuil.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Corinthian capital, from Nordisk familjebok. Image in public domain. &#91;&#91;en:Image:Korintisk1.png]])</em></li> <li>22 mei 2004 01:32 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Othello.jpg|Othello.jpg]]" <em>(van Engelse Wikipedia: &quot;Othello and Desdemona in Venice&quot; door Théodore Chassériau (1819-1856) This image has been released into the public domain by the copyright holder, or its copyright has expired. This applies worldwide.)</em></li> <li>21 mei 2004 22:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bapti1.jpg|Bapti1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Christian baptism ceremony &#91;&#91;en:Image:Bapti1.jpg]])</em></li> <li>21 mei 2004 22:11 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:DOOM253.png|DOOM253.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Copie d&#39;&amp;#233;cran de Doom, fournie librement par &#91;&#91;Utilisateur:Ellisllk&#124;&amp;#8467;isllk]] Statut : Image probablement sous copyright, dont il est plausible que certains usages (tel que dans l&#39;article &#91;&#91;Doom]]) puissent &amp;#234;tre accept&amp;#233;s sous la doctrine du fair use Je (&#91;&#91;Utilisateur:Ellisllk&#124;Ellisllk]]) estime que cette image peut correspondre &amp;#224; l&#39;usage &quot;fair use&quot; parce que: * (1) c&#39;est une copie d&#39;&amp;#233;cran de faible qualit&amp;#233;, * (2) cela ne limite en aucune fa&amp;#231;on les droits du propri&amp;#233;taire du copyright &amp;#224; diffuser l&#39;image ou &amp;#224; l&#39;utiliser, * (3) l&#39;image est seulement employ&amp;#233; &amp;#224; but d&#39;illustration, * (4) l&#39;usage de l&#39;image ajoute quelque chose de significatif &amp;#224; l&#39;article &#91;&#91;Doom]] parce qu&#39;elle illustre le style du jeu. &#91;&#91;fr:Image:DOOM253.png]])</em></li> <li>21 mei 2004 22:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Doom-boxart.jpg|Doom-boxart.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:fairuse}} &#91;&#91;en:Image:Doom-boxart.jpg]])</em></li> <li>21 mei 2004 22:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Trump.jpg|Trump.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Image credited to: Carl Cox 2004 at http&#58;//www.carlcoxphoto.com Recieved permission via email: &#39;&#39;&#39;To: Al Gore Support Center (Chris) &lt;webmaster@algoresupportcenter.zzn.com&gt;&#39;&#39;&#39;&#39; &#39;&#39;&#39;Subject Re: Your portraits&#39;&#39;&#39; &#39;&#39;&#39;From: ccox87@comcast.net&#39;&#39;&#39; &#39;&#39;&#39;Date: Mon, 23 Feb 2004 05:08:38 &#39;&#39;&#39; &#39;&#39;&#39;You can credit to: Carl Cox 2004 at www.carlcoxphoto.com &#39;&#39;&#39;Carl Cox&#39;&#39;&#39; &#39;&#39;&#39;301-670-0086&#39;&#39;&#39; &#39;&#39;&#39;www.carlcoxphoto.com&#39;&#39; &#39; &#123;&#123;msg:PermissionAndFairUse}} &#91;&#91;en:Image:Trump.jpg]])</em></li> <li>21 mei 2004 21:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Donald_Duck_suitcase_small2.jpg|Donald_Duck_suitcase_small2.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Donald Duck Die Originalvorlage stammt von &#91;&#91;Fantasy]], ich hab es nur etwas freigestellt, geschärft und gesättigt. &#39;&#39;&#39;Hinweis vom Urheber des Bildes:&#39;&#39;&#39; * Dieses Bild stammt von &#91;&#91;Fantasy]] und ist im Sinne der &#91;&#91;GFDL]] freigegeben (&#39;&#39;This Image is licensed to the public under the &#91;&#91;GNU Free Documentation License]]&#39;&#39;). * Die Verwendung dieses Bildes ist somit &#39;&#39;&#39;inner- und außerhalb von Wikipedia FREI&#39;&#39;&#39; und ausdrücklich erwünscht. &#91;&#91;Benutzer:Horst Frank&#124;Horst Frank]] 02:42, 20. Nov 2003 (CET) &#91;&#91;de:Bild:Donald Duck suitcase small2.jpg]])</em></li> <li>21 mei 2004 21:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cilinder.gif|Cilinder.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: * On 2002-04-03 08:46:59, &#91;&#91;user:Cervantes&#124;Cervantes]] uploaded file cilinder.gif &#91;Cilinder] Simple diagram of a &#91;&#91;cylinder]]. Used on the &#91;http&#58;//eo.wikipedia.com/wiki/Cilindro Esperanto Wikipedia] and the Spanish &#91;http&#58;//enciclopedia.us.es/wiki.phtml?title=Cilindro Enciclopedia Libre Universal]. &#91;&#91;en:Image:Cilinder.gif]])</em></li> <li>21 mei 2004 21:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Kreiszylinder.PNG|Kreiszylinder.PNG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Gerader Kreiszylinder mit abgewickeltem Mantel, &#91;&#91;GFDL]] gezeichnet von &#91;&#91;Benutzer:Honina&#124;Honina]] &#91;&#91;de:Bild:Kreiszylinder.PNG]])</em></li> <li>21 mei 2004 21:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Moderniron.jpg|Moderniron.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: my pic. gfdl. pictures quite grainy. took it inside with no flash &#91;&#91;en:Image:moderniron.jpg]])</em></li> <li>21 mei 2004 21:05 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SaoTomePrincipeKaart.png|SaoTomePrincipeKaart.png]]" <em>(Kaart SaoTome van wiki-en (orig: CIA))</em></li> <li>21 mei 2004 21:03 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SaotomePrincipeWapen.png|SaotomePrincipeWapen.png]]" <em>(wapen van saotome van wiki-en)</em></li> <li>21 mei 2004 21:02 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SaoTomePrincipeLocatie.png|SaoTomePrincipeLocatie.png]]" <em>(Locatie SaoTome van wiki-en (GFDL))</em></li> <li>21 mei 2004 21:01 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SaoTemePrincipeKaart.png|SaoTemePrincipeKaart.png]]" <em>(Kaart SoaTome van wiki-en (orig: CIA))</em></li> <li>21 mei 2004 18:48 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneVulgaris-stengel-kl.jpg|SileneVulgaris-stengel-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, 14 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 18:48 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneVulgaris-stengel-hr.jpg|SileneVulgaris-stengel-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, 14 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 18:46 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneVulgaris-plant-kl.jpg|SileneVulgaris-plant-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, 14 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 18:46 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneVulgaris-plant-hr.jpg|SileneVulgaris-plant-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, 14 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 18:44 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneVulgaris-overz-kl.jpg|SileneVulgaris-overz-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, 14 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 18:44 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneVulgaris-overz-hr.jpg|SileneVulgaris-overz-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, 14 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 18:41 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Furelise.mid|Furelise.mid]]" <em>(Fur Elise (overgetikt) PD aangezien componist meer dan 70 dood is)</em></li> <li>21 mei 2004 18:38 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneVulgaris-bloem-kl.jpg|SileneVulgaris-bloem-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, 14 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 18:37 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SileneVulgaris-bloem-hr.jpg|SileneVulgaris-bloem-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein Goudse Poort, 14 mei 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 18:10 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Adrian_de_gerlache.jpg|Adrian_de_gerlache.jpg]]" <em>(Adrien de Gerlache)</em></li> <li>21 mei 2004 17:59 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Spar.jpg|Spar.jpg]]" <em>(spar in Trois-Ponts 3,5 m op 1m hoogte eigen foto)</em></li> <li>21 mei 2004 17:57 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Stekelbrem.jpg|Stekelbrem.jpg]]" <em>(stekelbrem naast bosweg Trois-Ponts 20 mei eigen foto)</em></li> <li>21 mei 2004 17:53 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Ganzebloem.jpg|Ganzebloem.jpg]]" <em>(gele ganzebloem berm naast boerderij Logbiermé 20 mei eigen foto)</em></li> <li>21 mei 2004 17:14 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:SevernayaZemlya.jpg|SevernayaZemlya.jpg]]" <em>(Severnaya afbeelding)</em></li> <li>21 mei 2004 17:12 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:180px-SevernayaZemlya.jpg|180px-SevernayaZemlya.jpg]]" <em>(Severnaya afbeelding)</em></li> <li>21 mei 2004 16:23 [[Gebruiker:RonaldW|RonaldW]] heeft ge-upload: "[[:Afbeelding:Herdersmat.jpg|Herdersmat.jpg]]" <em>(zelfgemaakt plaatje (mbv Fritz))</em></li> <li>21 mei 2004 16:01 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Belgica.jpg|Belgica.jpg]]" <em>(Belgica in de Antwerpse haven)</em></li> <li>21 mei 2004 13:31 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:ClaraSchumann.jpg|ClaraSchumann.jpg]]" <em>(van wiki-en (Clara_s.jpg) vanwege ouderdom waarschijnlijk PD)</em></li> <li>21 mei 2004 13:18 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:RobertSchumann.jpg|RobertSchumann.jpg]]" <em>(Schumann vanb wiki--en (oude foto, derhalve waarschijnlijk PD))</em></li> <li>21 mei 2004 12:35 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Vink.jpg|Vink.jpg]]" <em>(vink eigen foto )</em></li> <li>21 mei 2004 12:19 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Paardjk.jpg|Paardjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>21 mei 2004 10:53 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Chandjk.jpg|Chandjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>21 mei 2004 10:51 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:UmbertoIvanItalie.jpg|UmbertoIvanItalie.jpg]]" <em>(Umberto I van Italië (van Engelse Wiki))</em></li> <li>21 mei 2004 10:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Domenico_scarlatti.jpg|Domenico_scarlatti.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Domenico Scarlatti * licence : domaine public * source : http&#58;//www.classicalarchives.com/bios/scarlatti_bio.html &#91;&#91;fr:Image:domenico scarlatti.jpg]])</em></li> <li>21 mei 2004 09:56 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:IrisPseudacorus-overz-kl.jpg|IrisPseudacorus-overz-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein goudse poort, 17-5-2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 09:55 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:IrisPseudacorus-overz-hr.jpg|IrisPseudacorus-overz-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein goudse poort, 17-5-2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 09:55 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:MURRAY.jpg|MURRAY.jpg]]" <em>(permissie Levitt)</em></li> <li>21 mei 2004 09:54 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:IrisPseudacorus-CloseUp-kl.jpg|IrisPseudacorus-CloseUp-kl.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein goudse poort, 17-5-2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 09:53 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:IrisPseudacorus-CloseUp-hr.jpg|IrisPseudacorus-CloseUp-hr.jpg]]" <em>(&#91;&#91;Gouda]], bedrijventerrein goudse poort, 17-5-2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 09:48 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Duskydolphin17.jpg|Duskydolphin17.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Previously Dolphin.jpg renamed Note that &#91;&#91;User:203.109.157.194]] has written at &#91;&#91;Talk:Dusky Dolphin]] that these are not Dusky Dolphins but &#91;&#91;Pacific White-sided Dolphin]]s. I&#39;m neither agreeing nor disagreeing with this, but I thought I&#39;d better point it out. -- &#91;&#91;User:Oliver Pereira&#124;Oliver P.]] 02:27, 25 Oct 2003 (UTC) :The user is right. They are correctly attributed in the source: &#91;http&#58;//www.photolib.noaa.gov/animals/anim0802.htm] -- &#91;&#91;User:Baldhur&#124;Baldhur]] 19:30, 22 Apr 2004 (UTC) &#91;&#91;en:Image:Duskydolphin17.jpg]])</em></li> <li>21 mei 2004 09:29 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Gans.jpg|Gans.jpg]]" <em>(gans gedomesticeerd eigen foto)</em></li> <li>21 mei 2004 09:26 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Lahnojk.jpg|Lahnojk.jpg]]" <em>(Fritz8 - print)</em></li> <li>21 mei 2004 09:18 [[Gebruiker:Herr Klugbeisser|Herr Klugbeisser]] heeft ge-upload: "[[:Afbeelding:Santos_in_Brazil.png|Santos_in_Brazil.png]]" <em>(Locatie van Santos)</em></li> <li>21 mei 2004 09:15 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Roundworm.jpg|Roundworm.jpg]]" <em>(En: wikipedia)</em></li> <li>21 mei 2004 09:09 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Onmozet.jpg|Onmozet.jpg]]" <em>(Fritz8 - print)</em></li> <li>21 mei 2004 08:56 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Onmozet.jpg|Onmozet.jpg]]" <em>(Fritz8 - print)</em></li> <li>21 mei 2004 08:40 [[Gebruiker:Maarten van Vliet|Maarten van Vliet]] heeft ge-upload: "[[:Afbeelding:Rummy.jpg|Rummy.jpg]]" <em>(Officieel portret van Donald Rumsfeld. Komt van de engelse wiki. Het plaatje valt onder het publieke domein, &#91;&#91;en:work of the United States Government]].)</em></li> <li>21 mei 2004 08:32 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Stanleylivingstone.png|Stanleylivingstone.png]]" <em>(&#91;&#91;Henry Morton Stanley]] vindt &#91;&#91;David Livingstone]].&lt;p&gt;Bron: Stanley and the White Heroes in Africa, D.M. Kelsey, 1890. Eigen scan. &#123;&#123;msg:PD}})</em></li> <li>21 mei 2004 08:22 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Alhambra2.jpg|Alhambra2.jpg]]" <em>(Jardines del Partal in Alhambra foto van duitse Wiki bewerkt)</em></li> <li>21 mei 2004 08:21 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(Jardines del Partal in Alhambra foto van duitse Wiki bewerkt)</em></li> <li>21 mei 2004 08:07 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Alhambra.jpg|Alhambra.jpg]]" <em>(Leeuwenpatio in Alhambra foto van Spaanse Wiki bewerkt)</em></li> <li>21 mei 2004 08:03 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Alhambra.jpg|Alhambra.jpg]]" <em>(Leuwenpatio in Alhamra foto van Spaanse Wiki)</em></li> <li>21 mei 2004 07:45 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Query_acces.png|Query_acces.png]]" <em>(Voorbeeld van een query met acces, eigen screendump)</em></li> <li>21 mei 2004 06:40 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeleHelmbloem-plant-hr.jpg|GeleHelmbloem-plant-hr.jpg]]" <em>(uit de serie onze tuin, 17 april 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 06:37 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeleHelmbloem-plant-kl.jpg|GeleHelmbloem-plant-kl.jpg]]" <em>(uit de serie onze tuin, 17 april 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 06:37 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeleHelmbloem-CloseUp-hr.jpg|GeleHelmbloem-CloseUp-hr.jpg]]" <em>(uit de serie onze tuin, 17 april 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>21 mei 2004 06:36 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeleHelmbloem-CloseUp-kl.jpg|GeleHelmbloem-CloseUp-kl.jpg]]" <em>(uit de serie onze tuin, 17 april 2004, &#123;&#123;msg:eigenwerk}})</em></li> <li>20 mei 2004 23:36 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Alexander_Pope.jpg|Alexander_Pope.jpg]]" <em>(Van Engelse Wikipedia: 1881 Young Persons&#39; Cyclopedia of Persons and Places )</em></li> <li>20 mei 2004 21:31 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Tiger.jpg|Tiger.jpg]]" <em>(En: wikipedia)</em></li> <li>20 mei 2004 20:57 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:VictorEmanuel.jpg|VictorEmanuel.jpg]]" <em>(Victor Emanuel II van Italië (van Duitse Wiki))</em></li> <li>20 mei 2004 19:59 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Iris_germanicus.JPG|Iris_germanicus.JPG]]" <em>(Eigen foto)</em></li> <li>20 mei 2004 19:31 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Ger_bw-filbinger.jpg|Ger_bw-filbinger.jpg]]"</li> <li>20 mei 2004 18:20 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Warsroses6193.jpg|Warsroses6193.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Wars of the Roses: Dukes York and Lancaster choose roses in the Temple Gardens, London from &#39;&#39;The Book of Knowledge&#39;&#39;, Vol. III, The Grolier Society, New York, 1911 &#91;&#91;en:Image:warsroses6193.jpg]])</em></li> <li>20 mei 2004 18:15 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Brem.jpg|Brem.jpg]]" <em>(brem 20 mei eigen foto)</em></li> <li>20 mei 2004 18:13 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Epidermis.jpg|Epidermis.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Darstellung der Epidermisschichten &#91;&#91;de:Bild:Epidermis.jpg]])</em></li> <li>20 mei 2004 18:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Sherpa.jpg|Sherpa.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-it. De beschrijving daar was: Sherpa-Famiglia &#91;&#91;it:Immagine:sherpa.jpg]])</em></li> <li>20 mei 2004 14:40 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Bath.jpg|Bath.jpg]]" <em>(Van Engelse Wikipedia: Pulteney Bridge in Bath, Foto: augustus 2002 door DrBob. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License)</em></li> <li>20 mei 2004 13:15 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:ETEY.jpg|ETEY.jpg]]" <em>(permissie Levitt)</em></li> <li>20 mei 2004 13:01 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Nunnjk.jpg|Nunnjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>20 mei 2004 12:36 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Nunn.jpg|Nunn.jpg]]" <em>(permissie Levitt)</em></li> <li>20 mei 2004 12:13 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:JONCONK.jpg|JONCONK.jpg]]" <em>(permissie Levitt)</em></li> <li>20 mei 2004 12:11 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:JONCONK.jpg|JONCONK.jpg]]" <em>(permissie Levitt)</em></li> <li>20 mei 2004 11:58 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:HEBDEN.jpg|HEBDEN.jpg]]" <em>(permissie levitt )</em></li> <li>20 mei 2004 11:56 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:JONCONK.jpg|JONCONK.jpg]]" <em>(permissie levitt )</em></li> <li>20 mei 2004 11:38 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:JONCONK.jpg|JONCONK.jpg]]" <em>(permissie Levitt)</em></li> <li>20 mei 2004 11:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:JONCONK.jpg|JONCONK.jpg]]" <em>(permissie Levitt)</em></li> <li>20 mei 2004 11:12 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Levittjk.jpg|Levittjk.jpg]]" <em>(friso)</em></li> <li>20 mei 2004 09:05 [[Gebruiker:Moribunt|Moribunt]] heeft ge-upload: "[[:Afbeelding:CannesHaven.jpg|CannesHaven.jpg]]" <em>(Eigen foto.)</em></li> <li>20 mei 2004 08:51 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Weer.jpg|Weer.jpg]]" <em>(weerfoto voor vrt 20 mei 2004 eigen foto)</em></li> <li>20 mei 2004 08:44 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Meidoorn.jpg|Meidoorn.jpg]]" <em>(bloem van eenstijlige meidoorn eigen foto 20 mei)</em></li> <li>20 mei 2004 08:42 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Paardekastanje.jpg|Paardekastanje.jpg]]" <em>(blad en bloem van witte paardekastanje eigen foto 20 mei 2004)</em></li> <li>20 mei 2004 08:30 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Hebdenjk.jpg|Hebdenjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>20 mei 2004 07:24 [[Gebruiker:Dick Bos|Dick Bos]] heeft ge-upload: "[[:Afbeelding:MarxKapital.jpg|MarxKapital.jpg]]" <em>(titelpagina Das Kapital 1867)</em></li> <li>20 mei 2004 03:10 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Godsavethequeen.jpg|Godsavethequeen.jpg]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law. )</em></li> <li>20 mei 2004 03:02 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law. )</em></li> <li>20 mei 2004 02:59 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Godqueen.jpg|Godqueen.jpg]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law. )</em></li> <li>20 mei 2004 02:58 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Godqueen.jpg|Godqueen.jpg]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law. )</em></li> <li>20 mei 2004 02:56 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Godqueen.jpg|Godqueen.jpg]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law. )</em></li> <li>20 mei 2004 00:06 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Salisbury.jpg|Salisbury.jpg]]" <em>(Van Engelse Wikipedia. Omschrijving: schilderij van Salisbury Cathedral door John Constable (1776 - 1837). )</em></li> <li>19 mei 2004 23:05 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dmendeleev.jpg|Dmendeleev.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: 19th century (or early 20th century) photograph. public domain. &#123;&#123;msg:PD}} &#91;&#91;en:Image:Dmendeleev.jpg]])</em></li> <li>19 mei 2004 23:03 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:230px-Wuerfel_rot.jpg|230px-Wuerfel_rot.jpg]]" <em>(Dobbelstenen vanaf Duitse wikipedia, Drei rote Würfel Fotograf: Walter J. Pilsak, Waldsassen 2004 Copyright Status: GNU Freie Dokumentationslizenz, &#91;&#91;de:Bild:Wuerfel rot.jpg]])</em></li> <li>19 mei 2004 23:01 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Windsor_Castle.jpg|Windsor_Castle.jpg]]" <em>(van Engelse pagina)</em></li> <li>19 mei 2004 22:57 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:DjosersPyramid_Saqqara01.jpg|DjosersPyramid_Saqqara01.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Description de l&#39;image : Pyramide de Djoser&lt;br&gt; Source : Photo de &#91;&#91;w:Uer:Hjr]], original &#91;&#91;w:image:DjosersPyramid Saqqara01.jpg]]&lt;br&gt; Statut : &#91;&#91;GFDL]] &#91;&#91;fr:Image:DjosersPyramid Saqqara01.jpg]])</em></li> <li>19 mei 2004 22:42 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Kluisbestanden.zip|Kluisbestanden.zip]]" <em>(update)</em></li> <li>19 mei 2004 22:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Django_Reinhardt.jpg|Django_Reinhardt.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Django Reinhardt as a boy &#91;&#91;en:Image:Django Reinhardt.jpg]])</em></li> <li>19 mei 2004 22:29 [[Gebruiker:Wereldreiziger|Wereldreiziger]] heeft ge-upload: "[[:Afbeelding:P3300146.JPG|P3300146.JPG]]" <em>(Monument José Martí)</em></li> <li>19 mei 2004 22:29 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Waterstof.jpg|Waterstof.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-sv. De beschrijving daar was: &#91;&#91;Bild:H-utseende-stor.jpg]] ---- frÃ¥n eng. wikin &#91;&#91;sv:Bild:H-utseende.jpg]])</em></li> <li>19 mei 2004 22:26 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Waterstof.jpg|Waterstof.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: ;description: Photo de l&#39;&#91;&#91;élément chimique&#124;élément]] &#91;&#91;hydrogène]] sous sa forme pure ;source: Image produite pour Wikipédia par l&#39;utilisateur &#91;&#91;w:en:User:RTC]] ;copyright: &#91;&#91;GFDL]] &#91;&#91;fr:Image:H,1-thumb.jpg]])</em></li> <li>19 mei 2004 22:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Karte_Batavia_MKL1888.png|Karte_Batavia_MKL1888.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Historische Karte von Batavia - aus Meyers Konversionlexikon 1888 &#91;&#91;de:Bild:Karte Batavia MKL1888.png]])</em></li> <li>19 mei 2004 22:21 [[Gebruiker:Wereldreiziger|Wereldreiziger]] heeft ge-upload: "[[:Afbeelding:27-3_Binnenplaats_Palacio_de_los_Capitanes_Generales.JPG|27-3_Binnenplaats_Palacio_de_los_Capitanes_Generales.JPG]]" <em>(Eigen foto)</em></li> <li>19 mei 2004 22:18 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Outphase.png|Outphase.png]]" <em>(Golven in tegenfase, naar de Engelse wikipedia, &#91;&#91;en:Image:Outphase.png]])</em></li> <li>19 mei 2004 22:04 [[Gebruiker:Wereldreiziger|Wereldreiziger]] heeft ge-upload: "[[:Afbeelding:Chichicastenango.jpg|Chichicastenango.jpg]]" <em>(Foto zelf genomen)</em></li> <li>19 mei 2004 21:54 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Irrigated_blueberries4046.jpg|Irrigated_blueberries4046.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Irrigated blueberries &#91;&#91;en:Image:Irrigated blueberries4046.jpg]])</em></li> <li>19 mei 2004 20:38 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Alfonso_Portillo.jpg|Alfonso_Portillo.jpg]]" <em>(En: wikipedia)</em></li> <li>19 mei 2004 20:34 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Europa.jpg|Kaart_Europa.jpg]]" <em>(Versie 3)</em></li> <li>19 mei 2004 16:16 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Nevermind.png|Nevermind.png]]" <em>(van engelse wikipedia: &#39;fair use&#39;)</em></li> <li>19 mei 2004 13:54 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Tand.png|Tand.png]]" <em>(Dwarsdoorsnede van een tand&lt;br&gt;Bron:Bron: National Institutes for Health, http&#58;//www.nidr.nih.gov/spectrum/NIDCR4/4grasec3.htm &lt;br&gt;Oorspronkelijk geupload door Andr&amp;eacute; Engels&lt;br&gt;Vertaald in het Nederlands, uitgebreid en geconverteerd naar PNG door Ben Tels&lt;br&gt;Materiaal op nih.gov-websites is publiek domein tenzij anders vermeld. &#123;&#123;msg:PD}})</em></li> <li>19 mei 2004 13:28 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Waterloo_Bridge.jpg|Waterloo_Bridge.jpg]]" <em>(van Engelse Wikpedia, Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License)</em></li> <li>19 mei 2004 12:57 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:AstronomieDeclinatieRechteKlimming.jpg|AstronomieDeclinatieRechteKlimming.jpg]]" <em>(Schematische weergave van declinatie en rechte klimming als hemelco&amp;ouml;rdinaten&lt;br&gt;Bron:Wikipedia.de&lt;br&gt;Originele naam: AstroDeklinationRektazension.jpg&lt;br&gt;Geupload door Marc Layer met beschrijving Astronomie - Skizze Ekliptik/Frühlingspunkt/Deklination/Rektazension&lt;br&gt;Vertaald in het Nederlands door Ben Tels&lt;br&gt;Aangenomen licentie (gegeven publicatie op Wikipedia.de zonder verdere uitleg): &#123;&#123;msg:GFDL}})</em></li> <li>19 mei 2004 11:44 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Mist.jpg|Mist.jpg]]" <em>(eigen foto )</em></li> <li>19 mei 2004 11:02 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Tomjk.jpg|Tomjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 mei 2004 08:07 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Ereprijs2.jpg|Ereprijs2.jpg]]" <em>(eigen foto voor Teun)</em></li> <li>19 mei 2004 08:06 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Ereprijs1.jpg|Ereprijs1.jpg]]" <em>(eigen foto voor Teun)</em></li> <li>19 mei 2004 06:28 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:AlbaniaNumberedDistricts.png|AlbaniaNumberedDistricts.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: numbered map of &#91;&#91;Albania]]n districts &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:AlbaniaNumberedDistricts.png]])</em></li> <li>19 mei 2004 06:20 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Discofeverstamp.jpg|Discofeverstamp.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Celebrate the Century stamps &#91;&#91;en:Image:Discofeverstamp.jpg]])</em></li> <li>19 mei 2004 06:05 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dipole_field.jpg|Dipole_field.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Dipole field from NASA. Copied from http&#58;//geomag.usgs.gov/intro.html &#123;&#123;msg:PD}} &#91;&#91;en:Image:Dipole field.jpg]])</em></li> <li>19 mei 2004 05:44 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Wiktionary_en-Logo.png|Wiktionary_en-Logo.png]]" <em>(logo wiktionary)</em></li> <li>18 mei 2004 23:05 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:Israel_flag_medium.png|Israel_flag_medium.png]]" <em>(uit engelse wikipedia; i.p.v. &quot;israhel&quot;-vlag (wellicht freudiaanse fout...))</em></li> <li>18 mei 2004 22:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Diogenes_von_Sinope.jpg|Diogenes_von_Sinope.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Diogenes von Sinope aus: Baumeister: Denkmäler des klassischen Altertums. 1885. Band I., Seite 428 &#91;&#91;de:Bild:Diogenes von Sinope.jpg]])</em></li> <li>18 mei 2004 22:08 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dilbert-animated.jpg|Dilbert-animated.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;Dilbert]] animated series, image from screenshot. Epsiode 212, &quot;The Virtual Employee&quot; &#123;&#123;msg:fairuse}} &#91;&#91;en:Image:Dilbert-animated.jpg]])</em></li> <li>18 mei 2004 22:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dijon_Rue_vieille.jpg|Dijon_Rue_vieille.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: ;Description : Rue vernaculaire du centre de Dijon, bordée de maisons à &#91;&#91;colombage]]s à encorbellement (avancée du premier étage au-dessus de la rue pour gagner de la surface). La rue, aujourd&#39;hui piétonne, a été aménagée au moyen d&#39;un revêtement pavé respectant le caractère du lieu. ;Date : avril 2001, dans l&#39;après-midi ;Auteur : &#91;&#91;Utilisateur:Pontauxchats&#124;Pontauxchats Ier]] ;Licence: Domaine public &#91;&#91;fr:Image:Dijon Rue vieille.jpg]])</em></li> <li>18 mei 2004 22:00 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dijon_Arc_de_Triomphe.jpg|Dijon_Arc_de_Triomphe.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: ;Description : Arc de Triomphe érigé au centre de Dijon ;Date : avril 2001, dans l&#39;après-midi ;Auteur : &#91;&#91;Utilisateur:Pontauxchats&#124;Pontauxchats Ier]] ;Licence: Domaine public &#91;&#91;fr:Image:Dijon Arc de Triomphe.jpg]])</em></li> <li>18 mei 2004 21:20 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dickcheney1.jpg|Dickcheney1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Photo of Dick Cheney as Vice President. &#123;&#123;msg:PD-USGov}} &#91;&#91;en:Image:Dickcheney1.jpg]])</em></li> <li>18 mei 2004 20:45 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Berndavi.JPG|Berndavi.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-es. De beschrijving daar was: imagen copiada de en.wikipedia (Berndavi.JPG) &#91;&#91;es:Imagen:Berndavi.JPG]])</em></li> <li>18 mei 2004 19:35 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Zebra's_Noorder_Dierenpark_Emmen_mei_2004.jpg|Zebra's_Noorder_Dierenpark_Emmen_mei_2004.jpg]]" <em>(Eigen foto Fruggo, vrijgegeven onder GNU-FDL)</em></li> <li>18 mei 2004 19:27 [[Gebruiker:Dick Bos|Dick Bos]] heeft ge-upload: "[[:Afbeelding:Bwsa2.jpg|Bwsa2.jpg]]" <em>(logo BWSA)</em></li> <li>18 mei 2004 17:44 [[Gebruiker:Moribunt|Moribunt]] heeft ge-upload: "[[:Afbeelding:UriGeller.jpg|UriGeller.jpg]]" <em>(Van Engelse Wikipedia, wordt daar omschreven als (fair use of photo from randi.org))</em></li> <li>18 mei 2004 17:16 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Cu2.JPG|Cu2.JPG]]" <em>(Cu2)</em></li> <li>18 mei 2004 14:13 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Tand.gif|Tand.gif]]" <em>(Dwarsdoorsnede van een &#91;&#91;tand]]. Bron: National Institutes for Health, http&#58;//www.nidr.nih.gov/spectrum/NIDCR4/4grasec3.htm. Materiaal op nih.gov-websites is publiek domein tenzij anders vermeld. &#123;&#123;msg:PD}})</em></li> <li>18 mei 2004 13:04 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Svesjk.jpg|Svesjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>18 mei 2004 10:07 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Pantocratorsinai.jpg|Pantocratorsinai.jpg]]" <em>(Afbeelding van Christus &#91;&#91;Pantocrator]]. &#91;&#91;Icoon]] van het Sint Catharinaklooster op de berg Sinai, 6e eeuw.)</em></li> <li>18 mei 2004 09:31 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Stuartjk.jpg|Stuartjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>18 mei 2004 06:50 [[Gebruiker:Wouterhagens|Wouterhagens]] heeft ge-upload: "[[:Afbeelding:Des_isomers.jpg|Des_isomers.jpg]]" <em>(isomeren van DES (Wouter Hagens))</em></li> <li>17 mei 2004 23:05 [[Gebruiker:Pven|Pven]] heeft ge-upload: "[[:Afbeelding:USB_flash_drive.jpg|USB_flash_drive.jpg]]" <em>(USB flash drive bron: Engelse wikipedia)</em></li> <li>17 mei 2004 22:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Diamant_gitter.png|Diamant_gitter.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Diamant-FCC-Gitter&lt;br&gt;Urheber: Anton (rp) 2004&lt;br&gt;Nutzungsrechte enspr. GNU free licence freigegeben. &#91;&#91;de:Bild:diamant gitter.png]])</em></li> <li>17 mei 2004 22:09 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Brillanten.jpg|Brillanten.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: **Diamanten im Brillantschliff *Quelle: **Fotografiert am 04.02.2004 *Fotograf: **Mario Sarto *Lizenzstatus: **GNU FDL &#91;&#91;de:Bild:Brillanten.jpg]])</em></li> <li>17 mei 2004 22:05 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Toonladder_van_Pythagoras-e.jpg|Toonladder_van_Pythagoras-e.jpg]]" <em>(eigen afbeelding, vernieuwd)</em></li> <li>17 mei 2004 21:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:DES_structure.png|DES_structure.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: DES structural drawing - Created using ISIS/Draw 2.5 and Paint Shop Pro 8.1 by Catbar. &#91;&#91;User:Catbar&#124;Brian Rock]] 03:48, 27 Jan 2004 (UTC) &#91;&#91;en:Image:DES structure.png]])</em></li> <li>17 mei 2004 21:26 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Large_Detroit_Landsat.jpg|Large_Detroit_Landsat.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A large Landsat of Detroit &#91;&#91;en:Image:Large Detroit Landsat.jpg]])</em></li> <li>17 mei 2004 21:20 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Toonladder_van_Pythagoras3e.jpg|Toonladder_van_Pythagoras3e.jpg]]" <em>(eigen afbeelding)</em></li> <li>17 mei 2004 21:11 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Stellerskelett.png|Stellerskelett.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: nach einer Lithographie von J.F. Brandt (1802-1879) &#91;&#91;de:Bild:Stellerskelett.png]])</em></li> <li>17 mei 2004 21:11 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Stellerkuh.jpg|Stellerkuh.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: zeitgenössische Zeichnung von Sven Waxell &#91;&#91;de:Bild:Stellerkuh.jpg]])</em></li> <li>17 mei 2004 21:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:As11_36_5390.jpg|As11_36_5390.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Buzz in LM PD NASA image &#123;&#123;msg:PD}} &#91;&#91;en:Image:As11 36 5390.jpg]])</em></li> <li>17 mei 2004 21:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Aldrin_near_Module_leg.jpg|Aldrin_near_Module_leg.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Astronaut Edwin E. Aldrin near a leg of the Lunar Module, PD NASA photo &#91;&#91;en:Image:Aldrin near Module leg.jpg]])</em></li> <li>17 mei 2004 20:27 [[Gebruiker:Johanboie|Johanboie]] heeft ge-upload: "[[:Afbeelding:CYTOKINE.LAB|CYTOKINE.LAB]]" <em>(Cytokines en ziekten, eigen file in WP5.1)</em></li> <li>17 mei 2004 20:09 [[Gebruiker:Johanboie|Johanboie]] heeft ge-upload: "[[:Afbeelding:VACCINAT.THE|VACCINAT.THE]]" <em>(Vaccinaties , eigen file in WP5.1)</em></li> <li>17 mei 2004 20:01 [[Gebruiker:Johanboie|Johanboie]] heeft ge-upload: "[[:Afbeelding:ZWANGERS.GYN|ZWANGERS.GYN]]" <em>(Zwangerschap en ziekten, eigen file in WP5.1)</em></li> <li>17 mei 2004 19:58 [[Gebruiker:Johanboie|Johanboie]] heeft ge-upload: "[[:Afbeelding:CARLONG.TUM|CARLONG.TUM]]" <em>(Longkankerfile in WP5.1)</em></li> <li>17 mei 2004 19:55 [[Gebruiker:Johanboie|Johanboie]] heeft ge-upload: "[[:Afbeelding:ASTBRONC.COL|ASTBRONC.COL]]" <em>(Astma bronchiale)</em></li> <li>17 mei 2004 19:54 [[Gebruiker:Johanboie|Johanboie]] heeft ge-upload: "[[:Afbeelding:Astma_bronchiale|Astma_bronchiale]]" <em>(Astma bronchiale)</em></li> <li>17 mei 2004 18:15 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:London_Bridge3.jpg|London_Bridge3.jpg]]" <em>(Van Engelse pagina: Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License,)</em></li> <li>17 mei 2004 18:03 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:London_Bridge2.jpg|London_Bridge2.jpg]]" <em>(van Engelse pagina: This image is copyrighted. The license holder allows anyone to use it for any purpose, provided that photo credit is given to Aran Johnson. )</em></li> <li>17 mei 2004 18:01 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(van Engelse pagina: This image is copyrighted. The license holder allows anyone to use it for any purpose, provided that photo credit is given to Aran Johnson. )</em></li> <li>17 mei 2004 17:52 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:London_Bridge1.jpg|London_Bridge1.jpg]]" <em>(van engelse pagina: This image has been released into the public domain by the copyright holder, or its copyright has expired. This applies worldwide.)</em></li> <li>17 mei 2004 17:48 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Des_Moines_skyline_night.jpg|Des_Moines_skyline_night.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A photo of the downtown Des Moines, IA skyline at night. This image is in the public domain. &#91;&#91;en:Image:Des Moines skyline night.jpg]])</em></li> <li>17 mei 2004 17:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A photo of the downtown Des Moines, IA skyline at night. This image is in the public domain. &#91;&#91;en:Image:Des Moines skyline night.jpg]])</em></li> <li>17 mei 2004 17:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A photo of the downtown Des Moines, IA skyline at night. This image is in the public domain. &#91;&#91;en:Image:Des Moines skyline night.jpg]])</em></li> <li>17 mei 2004 17:43 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:IAMap-doton-DesMoines.PNG|IAMap-doton-DesMoines.PNG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:GFDL}}&lt;br&gt;Adapted from Wikipedia&#39;s IA county maps by Seth Ilys. &#91;&#91;en:Image:IAMap-doton-DesMoines.PNG]])</em></li> <li>17 mei 2004 17:38 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Alotokoty001.png|Alotokoty001.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-pl. De beschrijving daar was: Lotokot malajski - ilustracja z pocz&amp;#261;tku wieku &#91;&#91;pl:Grafika:Alotokoty001.png]])</em></li> <li>17 mei 2004 14:31 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Noord_amerika.jpg|Noord_amerika.jpg]]" <em>(Kaart van Noord-Amerika&lt;br&gt;Bron:CIA World Factbook&lt;br&gt;Vertaald door Ben Tels&lt;br&gt;&#123;&#123;msg:CIA}})</em></li> <li>17 mei 2004 12:43 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(Fritz8 - print)</em></li> <li>17 mei 2004 11:05 [[Gebruiker:Antonius|Antonius]] heeft ge-upload: "[[:Afbeelding:5-kruis-vlinders.gif|5-kruis-vlinders.gif]]" <em>(www10.brinkster.com via google)</em></li> <li>17 mei 2004 10:20 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Carte_France_Département_14.png|Carte_France_Département_14.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;&#39;Credit(s):&#39;&#39;&#39; &#91;&#91;:fr:Utilisateur:Rinaldum]] &#39;&#39;&#39;Source:&#39;&#39;&#39; french wikipedia &#39;&#39;&#39;License:&#39;&#39;&#39; &#91;&#91;GFDL]] &#91;&#91;fr:Image:Carte France Département 14.png]] &#91;&#91;en:Image:Carte France Département 14.png]])</em></li> <li>17 mei 2004 10:19 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;&#39;Credit(s):&#39;&#39;&#39; &#91;&#91;:fr:Utilisateur:Rinaldum]] &#39;&#39;&#39;Source:&#39;&#39;&#39; french wikipedia &#39;&#39;&#39;License:&#39;&#39;&#39; &#91;&#91;GFDL]] &#91;&#91;fr:Image:Carte France Département 14.png]] &#91;&#91;en:Image:Carte France Département 14.png]])</em></li> <li>17 mei 2004 09:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ken_n_dennis.jpg|Ken_n_dennis.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Photo of &#91;&#91;UNIX]] creators &#91;&#91;Ken Thompson]] and &#91;&#91;Dennis Ritchie]]. from the latest edition of the &#91;&#91;Jargon File]], http&#58;//www.catb.org/~esr/jargon/html/U/Unix.html &#91;&#91;en:Image:Ken n dennis.jpg]])</em></li> <li>17 mei 2004 09:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Photo of &#91;&#91;UNIX]] creators &#91;&#91;Ken Thompson]] and &#91;&#91;Dennis Ritchie]]. from the latest edition of the &#91;&#91;Jargon File]], http&#58;//www.catb.org/~esr/jargon/html/U/Unix.html &#91;&#91;en:Image:Ken n dennis.jpg]])</em></li> <li>17 mei 2004 09:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kuzjk.jpg|Kuzjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 mei 2004 07:56 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:LocatieKibbelgaarn.png|LocatieKibbelgaarn.png]]" <em>(Locatie van Kibbelgaarn in de gemeente veendam, bewerkt kaartje van &#91;&#91;gebruiker:Mtcv]], &#123;&#123;msg:GFDL}} )</em></li> <li>17 mei 2004 07:53 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Ravel_bolero_drum_rhythtm.png|Ravel_bolero_drum_rhythtm.png]]" <em>(Vanaf Engelse wikipedia The snare drum ostinato from Maurice Ravel&#39;s Bolero. Only two bars of one part of a much larger orchestral work, so I believe this is fair use and would be fair use in almost all contexts. )</em></li> <li>17 mei 2004 07:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Hyssopus_officinalis.jpg|Hyssopus_officinalis.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: blühender Ysop *Beschreibung: blühender Ysop *Quelle: &#91;http&#58;//www.boga.ruhr-uni-bochum.de/html/Hyssopus_officinalis_Foto.html Bildersammlung Botanischer Garten der Ruhr-Universität Bochum] *Fotograf oder Zeichner: Armin Jagel *Andere Versionen: ./. *Lizenzstatus: GNU FDL &#61;= Lizenzstatus == Die Verwendung von Bildern aus der Sammlung wurde auf meine Anfrage (mit außdrücklichem Verweis auf die GNU-FDL) hin mit freundlicher Genehmigung zur Verfügung gestellt von &quot;Botanischer Garten Universität Bochum&quot; (Herr Jagel). Siehe &#91;http&#58;//de.wikipedia.org/wiki/Bild:Mahonia_aquifolium_ja.jpg] -- &#91;&#91;Benutzer:Rainer Bielefeld&#124;RainerBi]] 17:38, 2. Mai 2004 (CEST) &#91;&#91;de:Bild:Hyssopus officinalis.jpg]])</em></li> <li>17 mei 2004 07:35 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: blühender Ysop *Beschreibung: blühender Ysop *Quelle: &#91;http&#58;//www.boga.ruhr-uni-bochum.de/html/Hyssopus_officinalis_Foto.html Bildersammlung Botanischer Garten der Ruhr-Universität Bochum] *Fotograf oder Zeichner: Armin Jagel *Andere Versionen: ./. *Lizenzstatus: GNU FDL &#61;= Lizenzstatus == Die Verwendung von Bildern aus der Sammlung wurde auf meine Anfrage (mit außdrücklichem Verweis auf die GNU-FDL) hin mit freundlicher Genehmigung zur Verfügung gestellt von &quot;Botanischer Garten Universität Bochum&quot; (Herr Jagel). Siehe &#91;http&#58;//de.wikipedia.org/wiki/Bild:Mahonia_aquifolium_ja.jpg] -- &#91;&#91;Benutzer:Rainer Bielefeld&#124;RainerBi]] 17:38, 2. Mai 2004 (CEST) &#91;&#91;de:Bild:Hyssopus officinalis.jpg]])</em></li> <li>17 mei 2004 07:32 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:LocatieKibbelgaarn.png|LocatieKibbelgaarn.png]]" <em>(Locatie van Kibbelgaarn in de gemeente veendam, bewerkt kaartje van &#91;&#91;gebruiker:Mtcv]], &#123;&#123;msg:GFDL}} Poging 3)</em></li> <li>17 mei 2004 07:27 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(Locatie van Kibbelgaarn in de gemeente veendam, bewerkt kaartje van &#91;&#91;gebruiker:Mtcv]], &#123;&#123;msg:GFDL}})</em></li> <li>17 mei 2004 07:24 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(Locatie van Kibbelgaarn in de gemeente veendam, bewerkt kaartje van &#91;&#91;gebruiker:Mtcv]], &#123;&#123;msg:GFDL}})</em></li> <li>17 mei 2004 06:27 [[Gebruiker:Jboie|Jboie]] heeft ge-upload: "[[:Afbeelding:ASTBRONC.COL|ASTBRONC.COL]]" <em>(eigen file)</em></li> <li>17 mei 2004 02:11 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Toonladder_van_Pythagoras3.jpg|Toonladder_van_Pythagoras3.jpg]]" <em>(herziene, eigen afbeelding)</em></li> <li>17 mei 2004 02:10 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Intervallen_van_Pythagoras3.jpg|Intervallen_van_Pythagoras3.jpg]]" <em>(herziene, eigen afbeelding)</em></li> <li>17 mei 2004 00:43 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Groepjes.PNG|Groepjes.PNG]]" <em>(Eerdere versie hersteld)</em></li> <li>17 mei 2004 00:38 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Toonladder_van_Pythagoras2.jpg|Toonladder_van_Pythagoras2.jpg]]" <em>(alweer eigen afbeelding...)</em></li> <li>17 mei 2004 00:34 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Toonladder_van_Pythagoras.jpg|Toonladder_van_Pythagoras.jpg]]" <em>(vernieuwde, eigen afbeelding)</em></li> <li>16 mei 2004 23:44 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Intervallen_van_Pythagoras.jpg|Intervallen_van_Pythagoras.jpg]]" <em>(eigen afbeelding)</em></li> <li>16 mei 2004 23:26 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Toonladder_van_Pythagoras.jpg|Toonladder_van_Pythagoras.jpg]]" <em>(eigen afbeelding, nogmaals...)</em></li> <li>16 mei 2004 23:20 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Toonladder_van_Pythagoras.jpg|Toonladder_van_Pythagoras.jpg]]" <em>(eigen afbeelding)</em></li> <li>16 mei 2004 23:16 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Toonladder_van_Pythagoras.png|Toonladder_van_Pythagoras.png]]" <em>(eigen afbeelding)</em></li> <li>16 mei 2004 20:58 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Motorpolitie.jpg|Motorpolitie.jpg]]" <em>(Motorpolitie tijdens de wielerwedstrijd &quot;De Ster van Walcheren&quot;. Foto: Frans Meijer, http&#58;//www.stervanwalcheren.nl. Overname toegestaan met bronvermelding.)</em></li> <li>16 mei 2004 20:05 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Demonstratie_tegen_softwarepatenten_16mei2004-2.jpeg|Demonstratie_tegen_softwarepatenten_16mei2004-2.jpeg]]" <em>(vrij van auteursrechten)</em></li> <li>16 mei 2004 20:04 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Demonstratie_tegen_softwarepatenten_16mei20041.jpeg|Demonstratie_tegen_softwarepatenten_16mei20041.jpeg]]" <em>(vrij van auteursrechten)</em></li> <li>16 mei 2004 20:00 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Leda.jpg|Leda.jpg]]" <em>(Leda met de zwaan van Da Vinci (van Duitse Wiki))</em></li> <li>16 mei 2004 19:58 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Pan.jpg|Pan.jpg]]" <em>(Pan met een geit (van Engelse Wiki))</em></li> <li>16 mei 2004 19:45 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:MuseumDeMoriaan2.jpg|MuseumDeMoriaan2.jpg]]" <em>(Pijpen en Plattelmuseum De Moriaan in Gouda. Eigen foto, gebruik vrij)</em></li> <li>16 mei 2004 19:28 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:GevelsteenDeMoriaan.jpg|GevelsteenDeMoriaan.jpg]]" <em>(Gevelsteen Pijpen en Plateelmuseum in Gouda. Eigen foto, gebruik vrij. )</em></li> <li>16 mei 2004 19:27 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:MuseumDeMoriaan.jpg|MuseumDeMoriaan.jpg]]" <em>(Pijpen en plateelmuseum De Moriaan in Gouda. Eigen foto, gebruik vrij. )</em></li> <li>16 mei 2004 19:25 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Westminster_Bridge.jpg|Westminster_Bridge.jpg]]" <em>(Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License)</em></li> <li>16 mei 2004 17:18 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Pronkboon_zaadcloseup.jpg|Pronkboon_zaadcloseup.jpg]]" <em>(zelfgemaakte foto van pronkboonzaad)</em></li> <li>16 mei 2004 16:00 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Victoriameer.png|Kaart_Victoriameer.png]]" <em>(Kaart Victoriameer, eigen brouwsel)</em></li> <li>16 mei 2004 13:36 [[Gebruiker:Dexsuperior|Dexsuperior]] heeft ge-upload: "[[:Afbeelding:Overzicht.jpg|Overzicht.jpg]]" <em>(Dit is een overzicht van beide restanten van de burchtmuur van kasteel Paddenpoel te Leiden. Gemaakt door Rob Honig, die vrijwillig afstand doet van alle rechten.)</em></li> <li>16 mei 2004 13:32 [[Gebruiker:Dexsuperior|Dexsuperior]] heeft ge-upload: "[[:Afbeelding:Paddenpoel.jpg|Paddenpoel.jpg]]" <em>(Dit is een overzicht van de restanten van kasteel Paddenpoel te Leiden. Gemaakt door Rob Honig, die vrijwillig afstand doet van alle rechten.)</em></li> <li>16 mei 2004 13:31 [[Gebruiker:Dexsuperior|Dexsuperior]] heeft ge-upload: "[[:Afbeelding:Muur2.jpg|Muur2.jpg]]" <em>(Dit is een van de restanten van de burchtmuur van kasteel Paddenpoel te Leiden. Gemaakt door Rob Honig, die vrijwillig afstand doet van alle rechten.)</em></li> <li>16 mei 2004 13:31 [[Gebruiker:Dexsuperior|Dexsuperior]] heeft ge-upload: "[[:Afbeelding:Muur1.jpg|Muur1.jpg]]" <em>(Dit is een van de restanten van de burchtmuur van kasteel Paddenpoel te Leiden. Gemaakt door Rob Honig, die vrijwillig afstand doet van alle rechten.)</em></li> <li>16 mei 2004 13:13 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:British_museum.jpg|British_museum.jpg]]" <em>(van engelse pagina: Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License,)</em></li> <li>16 mei 2004 12:35 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Unzjk.jpg|Unzjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 mei 2004 12:06 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:PisaUitzichtArno.jpg|PisaUitzichtArno.jpg]]" <em>(Uitzicht over de Arno in Pisa. Eigen foto, onder GFDL.)</em></li> <li>16 mei 2004 11:30 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:IndiaAssam.png|IndiaAssam.png]]" <em>(En: wikipedia)</em></li> <li>16 mei 2004 10:18 [[Gebruiker:Moribunt|Moribunt]] heeft ge-upload: "[[:Afbeelding:250px-NickBergandFiveMen.JPG|250px-NickBergandFiveMen.JPG]]" <em>(van Engelse Wikipedia)</em></li> <li>16 mei 2004 10:18 [[Gebruiker:Moribunt|Moribunt]] heeft ge-upload: "[[:Afbeelding:150px-NickBergAP.jpg|150px-NickBergAP.jpg]]" <em>(van Engelse Wikipedia)</em></li> <li>16 mei 2004 09:46 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Vink.jpg|Vink.jpg]]" <em>(vink eigen foto )</em></li> <li>16 mei 2004 09:45 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Vizsla.jpg|Vizsla.jpg]]" <em>(vizsla pup eigen foto en eigen hond)</em></li> <li>16 mei 2004 08:28 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Bougainville.gif|Bougainville.gif]]" <em>(van google afbeeldingen)</em></li> <li>16 mei 2004 08:20 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Bougainv.gif|Bougainv.gif]]"</li> <li>16 mei 2004 08:19 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Bmap.bmp|Bmap.bmp]]"</li> <li>15 mei 2004 22:47 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:Woonhuis_PBas.jpg|Woonhuis_PBas.jpg]]" <em>(Fictief woonhuis P. Bas, Gouda. Eigen foto, gebruik vrij)</em></li> <li>15 mei 2004 21:51 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AnchusaSempervirens-plant-kl.jpg|AnchusaSempervirens-plant-kl.jpg]]" <em>(uit de serie onze tuin, &#123;&#123;msg:eigenwerk}})</em></li> <li>15 mei 2004 21:51 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AnchusaSempervirens-plant-hr.jpg|AnchusaSempervirens-plant-hr.jpg]]" <em>(uit de serie onze tuin, &#123;&#123;msg:eigenwerk}})</em></li> <li>15 mei 2004 21:50 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AnchusaSempervirens-bloem-kl.jpg|AnchusaSempervirens-bloem-kl.jpg]]" <em>(uit de serie onze tuin, &#123;&#123;msg:eigenwerk}})</em></li> <li>15 mei 2004 21:50 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AnchusaSempervirens-bloem-hr.jpg|AnchusaSempervirens-bloem-hr.jpg]]" <em>(uit de serie onze tuin, &#123;&#123;msg:eigenwerk}})</em></li> <li>15 mei 2004 21:47 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AnchusaSempervirens-blad-kl.jpg|AnchusaSempervirens-blad-kl.jpg]]" <em>(uit de serie onze tuin, &#123;&#123;msg:eigenwerk}})</em></li> <li>15 mei 2004 21:47 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AnchusaSempervirens-blad-hr.jpg|AnchusaSempervirens-blad-hr.jpg]]" <em>(uit de serie onze tuin, &#123;&#123;msg:eigenwerk}})</em></li> <li>15 mei 2004 18:54 [[Gebruiker:Willemdd|Willemdd]] heeft ge-upload: "[[:Afbeelding:MoerzekeKerk.jpg|MoerzekeKerk.jpg]]" <em>(classicistische Sint-Martinuskerk te Moerzeke, eigen foto)</em></li> <li>15 mei 2004 15:36 [[Gebruiker:Koen079|Koen079]] heeft ge-upload: "[[:Afbeelding:Luchtsmal.JPG|Luchtsmal.JPG]]" <em>(Foto vanuit NH Hotel, uitzicht op station Zoetermeer &amp; omgeving. Foto is door mijzelf genomen, dus geen probleem.)</em></li> <li>15 mei 2004 15:22 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:BrabantStadLocatie.png|BrabantStadLocatie.png]]" <em>(Locatie BrabantStad. Eigen werk, vrij te gebruiken.)</em></li> <li>15 mei 2004 14:41 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Big_ben.jpg|Big_ben.jpg]]" <em>(The picture was taken by David Sky on vacation in 1998 on a 35mm flm camera and scanned. )</em></li> <li>15 mei 2004 13:28 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Downing_Street.jpg|Downing_Street.jpg]]" <em>(Prime Minister Tony Blair and Vice President Dick Cheney in front of Number 10 Downing Street on March 11, 2002. White House photo by David Bohrer. &#91;1] This image has been released into the public domain by the copyright holder, or its copyright has expired. This applies worldwide)</em></li> <li>15 mei 2004 13:06 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Magvdk.jpg|Magvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 mei 2004 12:45 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Dolmajk.jpg|Dolmajk.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 mei 2004 12:08 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Dolmatov.jpg|Dolmatov.jpg]]" <em>(Titkov)</em></li> <li>15 mei 2004 11:27 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Kruipende_Boterbloem.jpg|Kruipende_Boterbloem.jpg]]" <em>(zelfgemaakte foto van bloem van kruipende boterbloem)</em></li> <li>15 mei 2004 11:23 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:SP1001.jpg|SP1001.jpg]]" <em>(Andre Engels. &#123;&#123;msg:eigenwerk}})</em></li> <li>15 mei 2004 11:18 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Aardbei_bloembodem_vlezig.jpg|Aardbei_bloembodem_vlezig.jpg]]" <em>(zelfgemaakte foto; dwarsdoorsnede door bloem van aardbei)</em></li> <li>15 mei 2004 09:55 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:NijlKrokodil.jpg|NijlKrokodil.jpg]]" <em>(Nijkrokodil van wiki-en (PD aldaar))</em></li> <li>15 mei 2004 09:48 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Alligator.jpg|Alligator.jpg]]" <em>(Alligator van wiki-en)</em></li> <li>15 mei 2004 09:45 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:MayotteKaart.jpg|MayotteKaart.jpg]]" <em>(Mayotte van wiki-en (oorspronkelijk van universioteit van texas, en derhalve PD) )</em></li> <li>15 mei 2004 09:22 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SomalilandLocatie.png|SomalilandLocatie.png]]" <em>(2e poging - nu via .bmp en MS-photo-editor)</em></li> <li>15 mei 2004 09:20 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SomalilandLocatie.png|SomalilandLocatie.png]]" <em>(Locatie somaliland (aangepast van Somalie-Locatie.png van wiki-nl) )</em></li> <li>15 mei 2004 09:08 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SomalilandKaart.png|SomalilandKaart.png]]" <em>(Kaart Somaliland van wiki-en (indirect van CIA) )</em></li> <li>15 mei 2004 09:05 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SomalilandVlag.png|SomalilandVlag.png]]" <em>(Vlag Somaliland van wiki-en verkleind en omgezet naar png)</em></li> <li>14 mei 2004 21:45 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SymphytumOfficinale-stengel-hr.jpg|SymphytumOfficinale-stengel-hr.jpg]]" <em>(&#123;&#123;msg:eigenwerk}})</em></li> <li>14 mei 2004 21:43 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SymphytumOfficinale-plant-hr.jpg|SymphytumOfficinale-plant-hr.jpg]]" <em>(&#123;&#123;msg:eigenwerk}})</em></li> <li>14 mei 2004 21:36 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SymphytumOfficinale-bloem-wit-hr.jpg|SymphytumOfficinale-bloem-wit-hr.jpg]]" <em>(eigen werk)</em></li> <li>14 mei 2004 21:34 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SymphytumOfficinale-bloem-roze-hr.jpg|SymphytumOfficinale-bloem-roze-hr.jpg]]" <em>(eigen werk)</em></li> <li>14 mei 2004 21:32 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SymphytumOfficinale-bloem-pa-hr.jpg|SymphytumOfficinale-bloem-pa-hr.jpg]]" <em>(eigen werk)</em></li> <li>14 mei 2004 21:27 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SymphytumOfficinale-bloem-wit-kl.jpg|SymphytumOfficinale-bloem-wit-kl.jpg]]" <em>(eigen werk)</em></li> <li>14 mei 2004 21:26 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SymphytumOfficinale-plant-kl.jpg|SymphytumOfficinale-plant-kl.jpg]]" <em>(eigen werk)</em></li> <li>14 mei 2004 21:26 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SymphytumOfficinale-stengel-kl.jpg|SymphytumOfficinale-stengel-kl.jpg]]" <em>(eigen werk)</em></li> <li>14 mei 2004 21:26 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SymphytumOfficinale-bloem-wit-kl.jpg|SymphytumOfficinale-bloem-wit-kl.jpg]]" <em>(eigen werk)</em></li> <li>14 mei 2004 21:25 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SymphytumOfficinale-bloem-roze-kl.jpg|SymphytumOfficinale-bloem-roze-kl.jpg]]" <em>(eigen werk)</em></li> <li>14 mei 2004 21:25 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SanguisorbaMinor-bloem-kl.jpg|SanguisorbaMinor-bloem-kl.jpg]]" <em>(Saffier)</em></li> <li>14 mei 2004 21:24 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SymphytumOfficinale-bloem-pa-kl.jpg|SymphytumOfficinale-bloem-pa-kl.jpg]]" <em>(eigen werk)</em></li> <li>14 mei 2004 20:01 [[Gebruiker:Koendw|Koendw]] heeft ge-upload: "[[:Afbeelding:Yahtzee_voorbeeld8.png|Yahtzee_voorbeeld8.png]]" <em>(Voorbeeld yahtzee-combinatie; eigen werk.)</em></li> <li>14 mei 2004 20:01 [[Gebruiker:Koendw|Koendw]] heeft ge-upload: "[[:Afbeelding:Yahtzee_voorbeeld7.png|Yahtzee_voorbeeld7.png]]" <em>(Voorbeeld yahtzee-combinatie; eigen werk.)</em></li> <li>14 mei 2004 20:01 [[Gebruiker:Koendw|Koendw]] heeft ge-upload: "[[:Afbeelding:Yahtzee_voorbeeld6.png|Yahtzee_voorbeeld6.png]]" <em>(Voorbeeld yahtzee-combinatie; eigen werk.)</em></li> <li>14 mei 2004 20:01 [[Gebruiker:Koendw|Koendw]] heeft ge-upload: "[[:Afbeelding:Yahtzee_voorbeeld5.png|Yahtzee_voorbeeld5.png]]" <em>(Voorbeeld yahtzee-combinatie; eigen werk.)</em></li> <li>14 mei 2004 20:00 [[Gebruiker:Koendw|Koendw]] heeft ge-upload: "[[:Afbeelding:Yahtzee_voorbeeld4.png|Yahtzee_voorbeeld4.png]]" <em>(Voorbeeld yahtzee-combinatie; eigen werk.)</em></li> <li>14 mei 2004 20:00 [[Gebruiker:Koendw|Koendw]] heeft ge-upload: "[[:Afbeelding:Yahtzee_voorbeeld3.png|Yahtzee_voorbeeld3.png]]" <em>(Voorbeeld yahtzee-combinatie; eigen werk.)</em></li> <li>14 mei 2004 20:00 [[Gebruiker:Koendw|Koendw]] heeft ge-upload: "[[:Afbeelding:Yahtzee_voorbeeld2.png|Yahtzee_voorbeeld2.png]]" <em>(Voorbeeld yahtzee-combinatie; eigen werk.)</em></li> <li>14 mei 2004 19:49 [[Gebruiker:Koendw|Koendw]] heeft ge-upload: "[[:Afbeelding:Yahtzee_voorbeeld1.png|Yahtzee_voorbeeld1.png]]" <em>(Voorbeeld yahtzee-combinatie; eigen werk.)</em></li> <li>14 mei 2004 18:22 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Montenei.gif|Montenei.gif]]"</li> <li>14 mei 2004 18:21 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Monteneg.gif|Monteneg.gif]]"</li> <li>14 mei 2004 12:39 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Belajk.jpg|Belajk.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 mei 2004 11:43 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Scheergerei.JPG|Scheergerei.JPG]]" <em>(Eigen foto)</em></li> <li>14 mei 2004 11:33 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Ae_dachmarke_frei_rgb.jpg|Ae_dachmarke_frei_rgb.jpg]]" <em>(Restricted use: can be used with Wikipedia article)</em></li> <li>14 mei 2004 11:22 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:PRIXARS_RGB.jpg|PRIXARS_RGB.jpg]]" <em>(Beperkte toestemming)</em></li> <li>14 mei 2004 09:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Suspoljk.jpg|Suspoljk.jpg]]" <em>(Fritz8 - print)</em></li> <li>13 mei 2004 22:32 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Oostvaardersplassen3.JPG|Oostvaardersplassen3.JPG]]" <em>(Eigen foto)</em></li> <li>13 mei 2004 22:31 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Oostvaardersplassen2.JPG|Oostvaardersplassen2.JPG]]" <em>(Eigen foto)</em></li> <li>13 mei 2004 22:31 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Oostvaardersplassen1.JPG|Oostvaardersplassen1.JPG]]" <em>(Eigen foto)</em></li> <li>13 mei 2004 21:43 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Denia.jpg|Denia.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The Denia fortress &#91;&#91;en:Image:denia.jpg]])</em></li> <li>13 mei 2004 21:38 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Demeter2_MKL1888.png|Demeter2_MKL1888.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Abbildung - aus &#91;&#91;Meyers Konversationslexikon]] von 1888 - Public Domain - Demeter und Persephone, den jungen Triptolemos weihend (Relief von Cleufis, Athen) &#91;&#91;de:Bild:Demeter2 MKL1888.png]])</em></li> <li>13 mei 2004 21:35 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Demeter_MKL1888.png|Demeter_MKL1888.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Abbildung aus &#91;&#91;Meyers Konversationslexikon]] von 1888 - Public Domain - Demeter (Relief aus Pompeji) &#91;&#91;de:Bild:Demeter MKL1888.png]])</em></li> <li>13 mei 2004 21:31 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:NileDelta-EO.JPG|NileDelta-EO.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:PD}} NASA image of Nile Delta, taken by &#91;&#91;MISR]] sattelite on January 30, 2001. Cropped. &#91;&#91;en:Image:NileDelta-EO.JPG]])</em></li> <li>13 mei 2004 21:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Deimos2.jpg|Deimos2.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Deimos Gesamtansicht, Nasa Public Domain, Viking 2 (nachb.) &#91;&#91;de:Bild:Deimos2.jpg]])</em></li> <li>13 mei 2004 21:19 [[Gebruiker:R.f.pels|R.f.pels]] heeft ge-upload: "[[:Afbeelding:Screenie.png|Screenie.png]]" <em>(KDE Screenshot, GPL)</em></li> <li>13 mei 2004 21:15 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Boudiccastatue.jpg|Boudiccastatue.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-ms. De beschrijving daar was: Sumber Wikipedia Inggeris. &#91;&#91;ms:Imej:boudiccastatue.jpg]])</em></li> <li>13 mei 2004 21:14 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:NederlandRechterlijkeIndeling.png|NederlandRechterlijkeIndeling.png]]" <em>(foutje eruit)</em></li> <li>13 mei 2004 21:12 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Hindenburg_Zeppelin.jpg|Hindenburg_Zeppelin.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is an image of the infamous Hindenburg Zeppelin, which on May 6, 1937 was destroyed when its hydrogen gas-filled envelope caught fire. See &#91;&#91;Hindenburg disaster]] &#91;&#91;en:Image:Hindenburg.jpg]] )</em></li> <li>13 mei 2004 21:07 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Hindenburg.jpg|Hindenburg.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>13 mei 2004 21:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Hindenburg.jpg|Hindenburg.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is an image of the infamous Hindenburg Zeppelin, which on May 6, 1937 was destroyed when its hydrogen gas-filled envelope caught fire. See &#91;&#91;Hindenburg disaster]] &#91;&#91;en:Image:Hindenburg.jpg]])</em></li> <li>13 mei 2004 20:59 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:NederlandRechterlijkeIndeling.png|NederlandRechterlijkeIndeling.png]]" <em>(Kaart rechterlijke indeling, eigen werk, &#123;&#123;msg:PD}})</em></li> <li>13 mei 2004 20:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lower_saxony_ol.png|Lower_saxony_ol.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Karte Niedersachsens mit dem Landkreis Oldenburg &#91;&#91;de:Bild:Lower saxony ol.png]])</em></li> <li>13 mei 2004 20:47 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cerebellum.png|Cerebellum.png]]" <em>(Vanaf Duitse wikipedia, &#91;&#91;de:Bild:Cerebellum.png]])</em></li> <li>13 mei 2004 20:38 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Acetylcholine.png|Acetylcholine.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Structure of &#91;&#91;acetylcholine]], created with JChemPaint. &#91;&#91;en:Image:acetylcholine.png]])</em></li> <li>13 mei 2004 20:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Tangram_diagram.png|Tangram_diagram.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Diagram of a tangram. Made by &#91;&#91;User:Tarquin&#124;Tarquin]] in Adobe Illustrator. Contact me if you need the source file. &#91;&#91;en:Image:Tangram diagram.png]])</em></li> <li>13 mei 2004 20:09 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:TrifoliumDubium-bloem-kl.jpg|TrifoliumDubium-bloem-kl.jpg]]" <em>(eigen foto, industrieterrein Goudse poort, Gouda, 12 mei 2004)</em></li> <li>13 mei 2004 20:08 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SanguisorbaMinor-plant-kl.jpg|SanguisorbaMinor-plant-kl.jpg]]" <em>(eigen foto, industrieterrein Goudse poort, Gouda, 12 mei 2004)</em></li> <li>13 mei 2004 20:08 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:TrifoliumDubium-bloem-hr.jpg|TrifoliumDubium-bloem-hr.jpg]]" <em>(eigen foto, industrieterrein Goudse poort, Gouda, 12 mei 2004)</em></li> <li>13 mei 2004 19:52 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Aardbevingen.gif|Aardbevingen.gif]]" <em>(Aardbevingen zijn geconcentreerd in bepaalde gordels. Deze komen overeen met de randen van de platen waaruit de aardkorst bestaat, zie &#91;&#91;plaattectoniek]].&lt;p&gt;Bron: U.S. Geological Survey, overgenomen van http&#58;//pubs.usgs.gov/gip/earthq4/severitygip.html.&lt;p&gt;&quot;Information presented on this website is considered public information (unless otherwise noted) and may be distributed or copied. Use of appropriate byline/photo/image credit is requested.&quot;)</em></li> <li>13 mei 2004 19:42 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SanguisorbaMinor-plant-kl.jpg|SanguisorbaMinor-plant-kl.jpg]]" <em>(eigen foto, industrieterrein Goudse poort, Gouda, mei 2004)</em></li> <li>13 mei 2004 19:42 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SanguisorbaMinor-plant-hr.jpg|SanguisorbaMinor-plant-hr.jpg]]" <em>(eigen foto, industrieterrein Goudse poort, Gouda, mei 2004)</em></li> <li>13 mei 2004 19:41 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Aerogel.jpg|Aerogel.jpg]]" <em>(Mooiere foto)</em></li> <li>13 mei 2004 19:41 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SanguisorbaMinor-bloem-kl.jpg|SanguisorbaMinor-bloem-kl.jpg]]" <em>(eigen foto, industrieterrein Goudse poort, Gouda, mei 2004)</em></li> <li>13 mei 2004 19:40 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SanguisorbaMinor-bloem-hr.jpg|SanguisorbaMinor-bloem-hr.jpg]]" <em>(eigen foto, industrieterrein Goudse poort, Gouda, mei 2004)</em></li> <li>13 mei 2004 19:39 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SanguisorbaMinor-blad-kl.jpg|SanguisorbaMinor-blad-kl.jpg]]" <em>(eigen foto, industrieterrein Goudse poort, Gouda, mei 2004)</em></li> <li>13 mei 2004 19:39 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:SanguisorbaMinor-blad-hr.jpg|SanguisorbaMinor-blad-hr.jpg]]" <em>(eigen foto, industrieterrein Goudse poort, Gouda, mei 2004)</em></li> <li>13 mei 2004 19:34 [[Gebruiker:RonaldW|RonaldW]] heeft ge-upload: "[[:Afbeelding:Narrenmat.jpg|Narrenmat.jpg]]" <em>(Zelfgemaakt plaatje (mbv Fritz))</em></li> <li>13 mei 2004 19:17 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Van_Beethoven.jpg|Van_Beethoven.jpg]]" <em>(handtekening L. Van Beethoven eigen bewerkte foto [[Gebruiker:Quistnix|Quistnix]] 28 nov 2004 16:07 (CET))</em></li> <li>13 mei 2004 19:10 [[Gebruiker:Toubib|Toubib]] heeft ge-upload: "[[:Afbeelding:Van_Beethoven.jpg|Van_Beethoven.jpg]]" <em>(eigen bewerkte foto[[Gebruiker:Quistnix|Quistnix]] 28 nov 2004 16:07 (CET))</em></li> <li>13 mei 2004 19:06 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Elektrificatiekaart.png|Elektrificatiekaart.png]]" <em>(elektrificatiekaart van Nederland, eigen werk, &#123;&#123;msg:PD}})</em></li> <li>13 mei 2004 18:53 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Garlick-nih.jpg|Garlick-nih.jpg]]" <em>(Glenn Garlick, cellist in het National Symphony Orchestra. Afkomstig van het Amerikaanse National Institutes of Health. Origineel op: http&#58;//www.nih.gov/news/NIH-Record/01_21_2003/story02.htm.&lt;p&gt;&quot;The majority of information at this site is in the public domain. Unless stated otherwise, documents and files on NIH web servers can be freely downloaded and reproduced&quot; &#123;&#123;msg:PD}})</em></li> <li>13 mei 2004 18:42 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Glenn-nih.jpg|Glenn-nih.jpg]]" <em>(&#91;&#91;John Glenn]]. Afkomstig van het Amerikaanse National Institutes of Health. Origineel op: http&#58;//www.nih.gov/news/NIH-Record/09_25_2000/briefs.htm.&lt;p&gt;&quot;The majority of information at this site is in the public domain. Unless stated otherwise, documents and files on NIH web servers can be freely downloaded and reproduced&quot; &#123;&#123;msg:PD}})</em></li> <li>13 mei 2004 18:36 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Armstrong-nih.jpg|Armstrong-nih.jpg]]" <em>(Lance Armstrong, afkomstig van het Amerikaanse National Institutes of Health. Origineel op: http&#58;//www.nih.gov/news/NIH-Record/09_30_2003/story02.htm.&lt;p&gt;&quot;The majority of information at this site is in the public domain. Unless stated otherwise, documents and files on NIH web servers can be freely downloaded and reproduced&quot; &#123;&#123;msg:PD}})</em></li> <li>13 mei 2004 17:47 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Teek4.jpg|Teek4.jpg]]" <em>(Teken kunnen door het opzuigen van bloed tot vele malen hun oorspronkelijke grootte uitgroeien.&lt;p&gt;Bron: Washington State Department of Health, http&#58;//www.doh.wa.gov. Origineel op: http&#58;//www.doh.wa.gov/ehp/ts/Zoo/WATickDiseases.htm.&lt;p&gt;&quot;Information presented by the government on this web site is considered public information and may be distributed or copied. Use of appropriate byline/image credits is requested.&quot; &#123;&#123;msg:PD}})</em></li> <li>13 mei 2004 16:15 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Guammp2.gif|Guammp2.gif]]" <em>(Kaart van het eiland &#91;&#91;Guam]].&lt;p&gt;&#123;&#123;msg:DOI}})</em></li> <li>13 mei 2004 14:47 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Tintoretto_christus_bij_galilea.jpg|Tintoretto_christus_bij_galilea.jpg]]" <em>(Tintoretto, vanaf http&#58;//www.ibiblio.org/wm/paint/auth/tintoretto/, vrije bron)</em></li> <li>13 mei 2004 14:42 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Tintoretto_christus_bij_galilee.jpg|Tintoretto_christus_bij_galilee.jpg]]" <em>(Tintoretto, vanaf http&#58;//www.ibiblio.org/wm/paint/auth/tintoretto/, vrije bron)</em></li> <li>13 mei 2004 11:57 [[Gebruiker:Ed solie|Ed solie]] heeft ge-upload: "[[:Afbeelding:Paarden_hakendover.jpg|Paarden_hakendover.jpg]]" <em>(Paardenprocessie te Hakendover op paasmaandag - de foto is vrij van auteursrechten en ter beschikking gesteld door Kris Merckx en www.hakendover.be)</em></li> <li>13 mei 2004 09:05 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Lahnojk.jpg|Lahnojk.jpg]]" <em>(Fritz8 - print)</em></li> <li>12 mei 2004 22:17 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:Gedenksteen_PBas.jpg|Gedenksteen_PBas.jpg]]" <em>(Gedenksteen in (fictief) woonhuis van Pieter Bas. Eigen foto, gebruik vrij. )</em></li> <li>12 mei 2004 21:48 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Dopamine.png|Dopamine.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Dopamine structural diagram Created by Maxim Iorsh with xymtex \documentclass{letter} \usepackage{epic,carom,hetarom} \pagestyle{empty} \begin{document} \begin{picture}(1200,1500) \put(0,0){\bzdrv{5==HO;6==HO}} \put(340,0){\sixunitv{}{2==NH$_2$}{bcde}} \end{picture} \end{document} &#91;&#91;en:Image:Dopamine.png]])</em></li> <li>12 mei 2004 20:49 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:Biesbosch_wetlands.jpg|Biesbosch_wetlands.jpg]]" <em>(Natgehouden land in de Biesbosch, mei 2004. Eigen foto, gebruik vrij)</em></li> <li>12 mei 2004 20:47 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:Biesbosch_kreek.jpg|Biesbosch_kreek.jpg]]" <em>(Kreek in de Biesbosch, mei 2004. Eigen foto, gebruik vrij)</em></li> <li>12 mei 2004 20:23 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:WapenHerford.png|WapenHerford.png]]" <em>(Wapen van Herford (van Engelse Wiki))</em></li> <li>12 mei 2004 19:32 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Europa.jpg|Kaart_Europa.jpg]]" <em>(Foutjes verbeterd)</em></li> <li>12 mei 2004 18:44 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Webbylogo.gif|Webbylogo.gif]]" <em>(Ik vraag om toestemming)</em></li> <li>12 mei 2004 17:30 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Kosovo.gif|Kosovo.gif]]"</li> <li>12 mei 2004 14:26 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Europa.jpg|Kaart_Europa.jpg]]" <em>(Nederlandse vertaling CIA kaart)</em></li> <li>12 mei 2004 13:15 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Mostertjk.jpg|Mostertjk.jpg]]" <em>(eigen archief)</em></li> <li>12 mei 2004 13:14 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Mostertjk.jpg|Mostertjk.jpg]]" <em>(eigen archief)</em></li> <li>12 mei 2004 12:21 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Timmerjk.jpg|Timmerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>12 mei 2004 11:54 [[Gebruiker:DexieBoy|DexieBoy]] heeft ge-upload: "[[:Afbeelding:Blenheim_palace.jpg|Blenheim_palace.jpg]]" <em>(Engelse Wiki)</em></li> <li>12 mei 2004 11:36 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gerttimjk.jpg|Gerttimjk.jpg]]" <em>(eigen archief)</em></li> <li>12 mei 2004 11:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bramtaktk.jpg|Bramtaktk.jpg]]" <em>(eigen archief)</em></li> <li>12 mei 2004 10:49 [[Gebruiker:SanderSpek|SanderSpek]] heeft ge-upload: "[[:Afbeelding:Olomouc.png|Olomouc.png]]" <em>(Ligging Olomouc (op basis van eigen sjabloon))</em></li> <li>12 mei 2004 08:02 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Weljk.jpg|Weljk.jpg]]" <em>(Fritz8 - print)</em></li> <li>12 mei 2004 08:00 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Wellingjk.jpg|Wellingjk.jpg]]" <em>(dimitri)</em></li> <li>12 mei 2004 06:42 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:LowlandGorilla.jpg|LowlandGorilla.jpg]]" <em>(En: wikipedia)</em></li> <li>12 mei 2004 05:53 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stigma3475.jpg|Stigma3475.jpg]]" <em>(foto afkomstig van Engelse Wikipedia)</em></li> <li>11 mei 2004 22:32 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:LorenzAttractor.png|LorenzAttractor.png]]" <em>(Lorenz attractor, vanaf Engelse wikipedia &#91;&#91;en:Image:LorenzAttractor.png]])</em></li> <li>11 mei 2004 22:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Deepspace1.jpg|Deepspace1.jpg]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Deepspace1.jpg]])</em></li> <li>11 mei 2004 22:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ionentriebwerk.jpg|Ionentriebwerk.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *&#39;&#39;&#39;Beschreibung:&#39;&#39;&#39; &#91;&#91;Ionentriebwerk]], das von der &#91;&#91;ESA]]-&#91;&#91;Raumsonde]] &#91;&#91;Smart-1]], die auf dem Weg zum &#91;&#91;Erdmond&#124;Mond]] ist, verwendet wird. *&#39;&#39;&#39;Quelle:&#39;&#39;&#39; &#91;http&#58;//sci.esa.int/science-e/www/area/index.cfm?fareaid=10 ESA Science] *&#39;&#39;&#39;Lizenzstatus:&#39;&#39;&#39; Public Domain &#91;&#91;de:Bild:Ionentriebwerk.jpg]])</em></li> <li>11 mei 2004 21:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Kaaba.jpg|Kaaba.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The Kaaba in Makkah &#123;&#123;msg:unverified}} &#91;&#91;en:Image:kaaba.jpg]])</em></li> <li>11 mei 2004 21:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Mecca.jpg|Mecca.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;es:Imagen:Mecca.jpg]] &#123;&#123;msg:unverified}} &#91;&#91;en:Image:Mecca.jpg]])</em></li> <li>11 mei 2004 21:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lion_King_Mufasa.jpg|Lion_King_Mufasa.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Mufasa from Disney&#39;s &#91;&#91;The Lion King]] &#123;&#123;msg:fairuse}} &#91;&#91;en:Image:Lion King Mufasa.jpg]])</em></li> <li>11 mei 2004 21:39 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Friedman_david.jpg|Friedman_david.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: David Friedman &#91;&#91;en:Image:friedman david.jpg]])</em></li> <li>11 mei 2004 21:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:DannyDevitoTaxi.jpg|DannyDevitoTaxi.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Danny Devito from Taxi &#91;&#91;en:Image:DannyDevitoTaxi.jpg]])</em></li> <li>11 mei 2004 21:20 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Danainternational.jpg|Danainternational.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:Danainternational.jpg]])</em></li> <li>11 mei 2004 21:19 [[Gebruiker:Nobody.de|Nobody.de]] heeft ge-upload: "[[:Afbeelding:Gelsenkirchen_in_Germany05.04.png|Gelsenkirchen_in_Germany05.04.png]]" <em>(free)</em></li> <li>11 mei 2004 21:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:EgyptDumyat.png|EgyptDumyat.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:EgyptDumyat.png]])</em></li> <li>11 mei 2004 14:18 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Tabla1.png|Tabla1.png]]" <em>(nogmaals: ikzelf op de tabla)</em></li> <li>11 mei 2004 14:15 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(ikzelf op de tabla - liever een eigen afbeelding, toch?)</em></li> <li>11 mei 2004 11:22 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Stefajk.jpg|Stefajk.jpg]]" <em>(friso)</em></li> <li>11 mei 2004 10:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Konerjk.jpg|Konerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>11 mei 2004 10:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:07300203.jpg|07300203.jpg]]" <em>(gratis download als screensaver)</em></li> <li>11 mei 2004 08:20 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Peterpaulrubens-portret.PNG|Peterpaulrubens-portret.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>11 mei 2004 07:39 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kuijpersjk.jpg|Kuijpersjk.jpg]]" <em>(dimitri)</em></li> <li>11 mei 2004 05:40 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stampervormen.jpg|Stampervormen.jpg]]" <em>(plaat van Radford e.a. 1974)</em></li> <li>11 mei 2004 05:34 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stempelvormen.jpg|Stempelvormen.jpg]]" <em>(plaat van Radford e.a. 1974)</em></li> <li>11 mei 2004 05:27 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Hommel.jpg|Hommel.jpg]]" <em>(zelfgemaakte foto van hommel voor ingang nest )</em></li> <li>11 mei 2004 05:23 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Hommelnest.jpg|Hommelnest.jpg]]" <em>(zelfgemaakte foto van een hommelnest in de zomer)</em></li> <li>10 mei 2004 21:56 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Kelly_&_Niicky.jpg|Kelly_&_Niicky.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>10 mei 2004 21:56 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Kelly_&_Niicky.jpg|Kelly_&_Niicky.jpg]]" <em>(vervanging andere foto)</em></li> <li>10 mei 2004 21:53 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Kelly_&_Niicky.jpg|Kelly_&_Niicky.jpg]]" <em>(vervanging persoonlijke foto die niet weg wil)</em></li> <li>10 mei 2004 21:51 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Kelly_&_Niicky.jpg|Kelly_&_Niicky.jpg]]" <em>(Vervangen foto die niet weggegooid wil worden)</em></li> <li>10 mei 2004 21:43 [[Gebruiker:CE|CE]] heeft ge-upload: "[[:Afbeelding:JohnWilkesBooth.jpg|JohnWilkesBooth.jpg]]" <em>(engelse wiki)</em></li> <li>10 mei 2004 21:27 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:RoY.ft.sendY.JPG|RoY.ft.sendY.JPG]]" <em>(Smartiegirls)</em></li> <li>10 mei 2004 21:26 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Koen.jpg|Koen.jpg]]" <em>(smartiegirls rommel vervangen)</em></li> <li>10 mei 2004 21:26 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Bas.jpg|Bas.jpg]]" <em>(smartiegirlstroep vervangen)</em></li> <li>10 mei 2004 21:25 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Maarten.jpg|Maarten.jpg]]" <em>(vervanging smartiegirlstroep)</em></li> <li>10 mei 2004 21:25 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Tijs.jpg|Tijs.jpg]]" <em>(vervanging smartiegirlstroep)</em></li> <li>10 mei 2004 21:23 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Floor.jpg|Floor.jpg]]" <em>(vervanging smartiegirlstroep)</em></li> <li>10 mei 2004 21:22 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Bill.bmp|Bill.bmp]]" <em>(Smartygirls werk onzichtbaarmaken)</em></li> <li>10 mei 2004 20:42 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Bill.bmp|Bill.bmp]]" <em>(Bill)</em></li> <li>10 mei 2004 20:40 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Kadyrov.jpg|Kadyrov.jpg]]"</li> <li>10 mei 2004 20:28 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Houthem4.JPG|Houthem4.JPG]]" <em>(Eigen foto)</em></li> <li>10 mei 2004 20:27 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Houthem3.JPG|Houthem3.JPG]]" <em>(Eigen foto)</em></li> <li>10 mei 2004 20:26 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Houthem2.JPG|Houthem2.JPG]]" <em>(Eigen foto)</em></li> <li>10 mei 2004 20:25 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Houthem1.JPG|Houthem1.JPG]]" <em>(Eigen foto)</em></li> <li>10 mei 2004 17:29 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Wiki_on_or_offline.jpg|Wiki_on_or_offline.jpg]]" <em>(Online or offline status zelf in elkaar geflanst, GNU FDL)</em></li> <li>10 mei 2004 17:28 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Wiki_offline.jpg|Wiki_offline.jpg]]" <em>(Offline status zelf in elkaar geflanst, GNU FDL)</em></li> <li>10 mei 2004 17:27 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Wiki_online.jpg|Wiki_online.jpg]]" <em>(Online status, zelf in elkaar geflanst, GNU FDL)</em></li> <li>10 mei 2004 15:34 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Kilda2876.png|Kilda2876.png]]" <em>(Saint Kilda, vertaald van Engelse Wiki)</em></li> <li>10 mei 2004 15:28 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Floor.jpg|Floor.jpg]]" <em>(Floor)</em></li> <li>10 mei 2004 13:43 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:GevlekteAronskelk.jpg|GevlekteAronskelk.jpg]]" <em>(Eigen foto)</em></li> <li>10 mei 2004 12:29 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Taljvdk.jpg|Taljvdk.jpg]]" <em>(postzegel )</em></li> <li>10 mei 2004 12:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Fil.jpg|Fil.jpg]]" <em>(postzegel)</em></li> <li>10 mei 2004 11:39 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pliesvdk.jpg|Pliesvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>10 mei 2004 11:02 [[Gebruiker:Wouterhagens|Wouterhagens]] heeft ge-upload: "[[:Afbeelding:Lindaan.jpg|Lindaan.jpg]]" <em>(formule lindaan (Wouter Hagens)</em></li> <li>10 mei 2004 10:45 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pliesterjk.jpg|Pliesterjk.jpg]]" <em>(dimitri)</em></li> <li>10 mei 2004 10:27 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Hommel.JPG|Hommel.JPG]]" <em>(Eigen foto)</em></li> <li>10 mei 2004 10:17 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Horsterwold3.JPG|Horsterwold3.JPG]]" <em>(Eigen foto)</em></li> <li>10 mei 2004 10:15 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Horsterwold2.JPG|Horsterwold2.JPG]]" <em>(Eigen foto)</em></li> <li>10 mei 2004 10:14 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Horsterwold1.JPG|Horsterwold1.JPG]]" <em>(Eigen foto)</em></li> <li>10 mei 2004 08:26 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Meidoorn_aangevretenknop.jpg|Meidoorn_aangevretenknop.jpg]]" <em>(zelfgemaakte foto van door rups aangevreten knop bij meidoorn)</em></li> <li>10 mei 2004 08:15 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Grootvdk.jpg|Grootvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>10 mei 2004 07:49 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Akelei_meeldraden_eenbroederig.jpg|Akelei_meeldraden_eenbroederig.jpg]]" <em>(zelfgemaakte foto van éénbroederige meeldraden en ongelijke lengte van Akelei)</em></li> <li>10 mei 2004 07:20 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Geranium_macrorrhizum_ongelijke_rijping_stempel_meeldraad.jpg|Geranium_macrorrhizum_ongelijke_rijping_stempel_meeldraad.jpg]]" <em>(zelfgemaakte foto van onrijpe stempel van Geranium macrorrhizum)</em></li> <li>10 mei 2004 07:19 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Claesz-vanitas.jpg|Claesz-vanitas.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;Vanitas]], by &#91;&#91;Pieter Claesz]] &#91;&#91;en:Image:claesz-vanitas.jpg]])</em></li> <li>10 mei 2004 07:02 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Geranium_macrorrhizum_stempel_gespleten.jpg|Geranium_macrorrhizum_stempel_gespleten.jpg]]" <em>(zelfgemaakte foto van Geranium macrorrhizum met open gespleten stempel)</em></li> <li>9 mei 2004 22:25 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:Map1.png|Map1.png]]" <em>(Eigen kaart RhB)</em></li> <li>9 mei 2004 21:52 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Homomonument.jpg|Homomonument.jpg]]" <em>(van engelse pagina, geen beschrijving aanwezig)</em></li> <li>9 mei 2004 21:15 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Afrika.jpg|Kaart_Afrika.jpg]]" <em>(Versie 3)</em></li> <li>9 mei 2004 16:05 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Volksrepubliek_Tuva_vlag.gif|Volksrepubliek_Tuva_vlag.gif]]"</li> <li>9 mei 2004 16:04 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:2e_ita.png|2e_ita.png]]" <em>(Italiaanse 2 euro)</em></li> <li>9 mei 2004 16:03 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:1e_ita.png|1e_ita.png]]" <em>(Italiaanse 1 euro)</em></li> <li>9 mei 2004 16:02 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:10ec_ita.png|10ec_ita.png]]" <em>(Italiaanse 1 euro)</em></li> <li>9 mei 2004 16:02 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:1ec_ita.png|1ec_ita.png]]" <em>(Italiaanse 1 eurocent)</em></li> <li>9 mei 2004 16:01 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:20ec_ita.png|20ec_ita.png]]" <em>(Italiaanse 20 eurocent)</em></li> <li>9 mei 2004 16:01 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:2ec_ita.png|2ec_ita.png]]" <em>(Italiaanse 2 euro)</em></li> <li>9 mei 2004 16:01 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:50ec_ita.png|50ec_ita.png]]" <em>(Italiaanse 50 eurocent)</em></li> <li>9 mei 2004 16:00 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:5ec_ita.png|5ec_ita.png]]" <em>(Italiaanse 5 eurocent)</em></li> <li>9 mei 2004 15:58 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Shield.gif|Shield.gif]]"</li> <li>9 mei 2004 15:56 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Tuwa.gif|Tuwa.gif]]"</li> <li>9 mei 2004 15:54 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:RussiaTuva.png|RussiaTuva.png]]"</li> <li>9 mei 2004 15:46 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:10ec_ire.png|10ec_ire.png]]" <em>(Ierse 10 eurocent)</em></li> <li>9 mei 2004 15:46 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:1e_ire.png|1e_ire.png]]" <em>(Ierse 1 euro)</em></li> <li>9 mei 2004 15:45 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:1ec_ire.png|1ec_ire.png]]" <em>(Ierse 1 euro)</em></li> <li>9 mei 2004 15:44 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:20ec_ire.png|20ec_ire.png]]" <em>(Ierse 20 eurocent)</em></li> <li>9 mei 2004 15:44 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:2e_ire.png|2e_ire.png]]" <em>(Ierse 2 euro)</em></li> <li>9 mei 2004 15:43 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:2ec_ire.png|2ec_ire.png]]" <em>(Ierse 2 eurocent)</em></li> <li>9 mei 2004 15:43 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:50ec_ire.png|50ec_ire.png]]" <em>(Ierse 50 eurocent)</em></li> <li>9 mei 2004 15:42 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:5ec_ire.png|5ec_ire.png]]" <em>(Ierse 5 eurocent)</em></li> <li>9 mei 2004 15:05 [[Gebruiker:Moribunt|Moribunt]] heeft ge-upload: "[[:Afbeelding:Theo_avatar.jpg|Theo_avatar.jpg]]" <em>(Eigen foto t.b.v. test met avatar. )</em></li> <li>9 mei 2004 14:58 [[Gebruiker:Papaya|Papaya]] heeft ge-upload: "[[:Afbeelding:Eric.jpg|Eric.jpg]]" <em>(Eric)</em></li> <li>9 mei 2004 14:28 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Kaart_Cyprus.jpg|Kaart_Cyprus.jpg]]" <em>(Nieuwe upload van CIA Factbook&lt;br&gt;Vertaald in het Nederlands&lt;br&gt;&#123;&#123;msg:CIA}})</em></li> <li>9 mei 2004 13:14 [[Gebruiker:Opa|Opa]] heeft ge-upload: "[[:Afbeelding:Magriet.jpg|Magriet.jpg]]" <em>(eigen foto Margriet cultivar)</em></li> <li>9 mei 2004 12:56 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:China3.gif|China3.gif]]"</li> <li>9 mei 2004 12:50 [[Gebruiker:Papaya|Papaya]] heeft ge-upload: "[[:Afbeelding:Caravan1.jpg|Caravan1.jpg]]" <em>(onze caravan)</em></li> <li>9 mei 2004 12:48 [[Gebruiker:Papaya|Papaya]] heeft ge-upload: "[[:Afbeelding:Camping_1.jpg|Camping_1.jpg]]" <em>(Onze caravan)</em></li> <li>9 mei 2004 12:47 [[Gebruiker:Papaya|Papaya]] heeft ge-upload: "[[:Afbeelding:Camping_1.jpg|Camping_1.jpg]]" <em>(Onze caravan)</em></li> <li>9 mei 2004 12:45 [[Gebruiker:Papaya|Papaya]] heeft ge-upload: "[[:Afbeelding:Caravan.jpg|Caravan.jpg]]" <em>(Onze caravan)</em></li> <li>9 mei 2004 12:40 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:China-37.gif|China-37.gif]]"</li> <li>9 mei 2004 12:35 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Tabla.jpg|Tabla.jpg]]" <em>(uit de engelse wikipedia van sysop Jay)</em></li> <li>9 mei 2004 12:02 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:China2.gif|China2.gif]]"</li> <li>9 mei 2004 11:56 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:China-11.gif|China-11.gif]]"</li> <li>9 mei 2004 11:01 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Popovjk.jpg|Popovjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>9 mei 2004 10:31 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:10ec_fra.png|10ec_fra.png]]" <em>(Franse 10 eruocent)</em></li> <li>9 mei 2004 10:31 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:1e_fra.png|1e_fra.png]]" <em>(Franse 1 euro)</em></li> <li>9 mei 2004 10:30 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:1ec_fra.png|1ec_fra.png]]" <em>(Franse 1 eurocent)</em></li> <li>9 mei 2004 10:29 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:20ec_fra.png|20ec_fra.png]]" <em>(Franse 20 eurocent)</em></li> <li>9 mei 2004 10:28 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:2e_fra.png|2e_fra.png]]" <em>(Franse 2 euro)</em></li> <li>9 mei 2004 10:27 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:2ec_fra.png|2ec_fra.png]]" <em>(Franse 2 eurocent)</em></li> <li>9 mei 2004 10:27 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:50ec_fra.png|50ec_fra.png]]" <em>(Franse 50 eurocent)</em></li> <li>9 mei 2004 10:26 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:5ec_fra.png|5ec_fra.png]]" <em>(Franse 5 eurocent)</em></li> <li>9 mei 2004 10:20 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Hongarije.png|Kaart_Hongarije.png]]" <em>(Nederlandse vertaling CIA kaart)</em></li> <li>9 mei 2004 09:23 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Rafaelportret.gif|Rafaelportret.gif]]" <em>(PD tekening van UT Library, ingekleurd naar bestaand schilderij)</em></li> <li>9 mei 2004 08:35 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Rafael-portret.gif|Rafael-portret.gif]]" <em>(PD tekening van UT Library, ingekleurd naar bestaand schilderij)</em></li> <li>9 mei 2004 08:30 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Rafael-portret.gif|Rafael-portret.gif]]" <em>(Eerdere versie hersteld)</em></li> <li>9 mei 2004 06:58 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Schotse_hooglander.JPG|Schotse_hooglander.JPG]]" <em>(Eigen foto)</em></li> <li>9 mei 2004 01:59 [[Gebruiker:Jcwf|Jcwf]] heeft ge-upload: "[[:Afbeelding:Solit2.jpg|Solit2.jpg]]" <em>(amerikaanse bosruiter eigen foto)</em></li> <li>8 mei 2004 21:49 [[Gebruiker:Jcwf|Jcwf]] heeft ge-upload: "[[:Afbeelding:Page2.jpg|Page2.jpg]]" <em>(page swallowtail eigen foto)</em></li> <li>8 mei 2004 21:09 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LamiumGaleobdolonArgentum-plant-kl.jpg|LamiumGaleobdolonArgentum-plant-kl.jpg]]" <em>(eigen foto, 10 april Florence nightingalepark, den haag)</em></li> <li>8 mei 2004 21:06 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LamiumGaleobdolonArgentum-plant-hr.jpg|LamiumGaleobdolonArgentum-plant-hr.jpg]]" <em>(eigen foto, 10 april Florence nightingalepark, den haag)</em></li> <li>8 mei 2004 21:01 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AlliumUrsinum-overz-kl.jpg|AlliumUrsinum-overz-kl.jpg]]" <em>(eigen foto, 30 april 2004)</em></li> <li>8 mei 2004 21:00 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AlliumUrsinum-overz-hr.jpg|AlliumUrsinum-overz-hr.jpg]]" <em>(eigen foto, 30 april 2004)</em></li> <li>8 mei 2004 20:58 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AlliumUrsinum-bloem-kl.jpg|AlliumUrsinum-bloem-kl.jpg]]" <em>(eigen foto, 30 april 2004)</em></li> <li>8 mei 2004 20:57 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AlliumUrsinum-bloem-hr.jpg|AlliumUrsinum-bloem-hr.jpg]]" <em>(eigen foto, 30 april 2004)</em></li> <li>8 mei 2004 20:56 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AlliumUrsinum-blad-kl.jpg|AlliumUrsinum-blad-kl.jpg]]" <em>(eigen foto, 30 april 2004)</em></li> <li>8 mei 2004 20:53 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:AlliumUrsinum-blad-hr.jpg|AlliumUrsinum-blad-hr.jpg]]" <em>(eigen foto, 30 april 2004)</em></li> <li>8 mei 2004 20:40 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LinariaCymbalaria-plant-hr.jpg|LinariaCymbalaria-plant-hr.jpg]]" <em>(eigen foto, Zierikzee)</em></li> <li>8 mei 2004 20:34 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LinariaCymbalaria-overz-hr.jpg|LinariaCymbalaria-overz-hr.jpg]]" <em>(eigen foto, Zierikzee, 6 mei 2004)</em></li> <li>8 mei 2004 20:31 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LinariaCymbalaria-CloseUp-hr.jpg|LinariaCymbalaria-CloseUp-hr.jpg]]" <em>(eigen foto, Zierikzee, 6 mei 2004)</em></li> <li>8 mei 2004 20:29 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LinariaCymbalaria-plant-kl.jpg|LinariaCymbalaria-plant-kl.jpg]]" <em>(eigen foto, Zierikzee, 6 mei 2004)</em></li> <li>8 mei 2004 20:23 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LinariaCymbalaria-overz-kl.jpg|LinariaCymbalaria-overz-kl.jpg]]" <em>(eigen foto, Zierikzee, 6 mei 2004)</em></li> <li>8 mei 2004 20:22 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Rafael-portret.gif|Rafael-portret.gif]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>8 mei 2004 20:22 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LinariaCymbalaria-CloseUp-kl.jpg|LinariaCymbalaria-CloseUp-kl.jpg]]" <em>(eigen foto, Zierikzee, 6 mei 2004)</em></li> <li>8 mei 2004 20:16 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Rafael-portret.gif|Rafael-portret.gif]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>8 mei 2004 18:06 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:ArzvillerPlanIncline.jpg|ArzvillerPlanIncline.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Beschreibung: Arzviller, Schrägaufzug im Rhein-Marne-Kanal Quelle: Fotografiert November 2003 Fotograf: Reinhard Kraasch Copyright Status: GNU Freie Dokumentationslizenz &#91;&#91;de:Bild:ArzvillerPlanIncline.jpg]])</em></li> <li>8 mei 2004 17:52 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Rafael-portret.gif|Rafael-portret.gif]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>8 mei 2004 17:36 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Yshamir.jpg|Yshamir.jpg]]" <em>(Yitzhak Shamir&lt;br&gt;Bron: Wikipedia.en &#123;&#123;msg:GFDL}})</em></li> <li>8 mei 2004 16:43 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Franz_Courtens.jpg|Franz_Courtens.jpg]]" <em>(Franz Courtens - eigen foto)</em></li> <li>8 mei 2004 15:49 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Eshkol_levi.jpg|Eshkol_levi.jpg]]" <em>(Levi Eshkol&lt;br&gt;Bron: Wikipedia.en &#123;&#123;msg:GFDL}})</em></li> <li>8 mei 2004 15:07 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Msharett.jpg|Msharett.jpg]]" <em>(Moshe Sharett&lt;br&gt;Bron: Wikipedia.en &#123;&#123;msg:GFDL}})</em></li> <li>8 mei 2004 13:50 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:ConstantijnXI.jpg|ConstantijnXI.jpg]]" <em>(Vrijwel onherkenbaar portret van Constantijn XI op silveren munt geslagen gedurende de allerlaatste maanden van het Romeinse rijk. Bron: Classical Numismatic Group, Inc. (CNG))</em></li> <li>8 mei 2004 13:36 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Komkommer.jpg|Komkommer.jpg]]" <em>(kleinere afbeelding, public domain volgens engelse wiki)</em></li> <li>8 mei 2004 13:32 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Willem_Elsschot.jpg|Willem_Elsschot.jpg]]" <em>(van engelse pagina, Willem Elsschot on Belgian Stamp, daar geplaatst door gebruiker Andries )</em></li> <li>8 mei 2004 13:27 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Bananen.jpg|Bananen.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Bananas.&lt;br&gt; Photographed by Adrian Pingstone in March 2004 and released to the public domain. &#91;&#91;simple:Image:Banana.arp.750pix.jpg]] &#91;&#91;en:Image:Banana.arp.750pix.jpg]])</em></li> <li>8 mei 2004 13:26 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Bananen.jpg|Bananen.jpg]]" <em>(nu fixed (vorige was html ipv de afbeelding). uit Engelse wiki: &quot;&#39;&#39;Photographed by Adrian Pingstone in March 2004 and released to the public domain&#39;&#39;&quot;)</em></li> <li>8 mei 2004 13:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bouwjk.jpg|Bouwjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>8 mei 2004 13:15 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Phmanchu21a.jpg|Phmanchu21a.jpg]]"</li> <li>8 mei 2004 13:00 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.png|Test.png]]" <em>(Test &amp;#228;&amp;#246;&amp;#252;)</em></li> <li>8 mei 2004 12:56 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Mandschn.gif|Mandschn.gif]]"</li> <li>8 mei 2004 12:46 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.png|Test.png]]" <em>(Test äöü)</em></li> <li>8 mei 2004 12:46 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:GM_sugar_cane.jpg|GM_sugar_cane.jpg]]" <em>(van wiki:en orig:(http&#58;//www.ars.usda.gov/is/graphics/photos/dec97/k7151-3.htm&lt;br&gt;An experimental ARS sugarcane field near Canal Point, Florida.&lt;br&gt;Photo by Scott Bauer.&lt;p&gt;&#123;&#123;msg:PD}}) )</em></li> <li>8 mei 2004 12:32 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.png|Test.png]]" <em>(Test &amp;#228;&amp;#246;&amp;#252;)</em></li> <li>8 mei 2004 12:07 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Rabarber_stelen.jpg|Rabarber_stelen.jpg]]" <em>(zelfgemaakte foto van rabarberplant begin mei)</em></li> <li>8 mei 2004 12:04 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Afrika.jpg|Kaart_Afrika.jpg]]" <em>(Suggesties verwerkt)</em></li> <li>8 mei 2004 10:04 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.png|Test.png]]" <em>(test äöü)</em></li> <li>8 mei 2004 08:20 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Siege-alesia-vercingetorix-jules-cesar.jpg|Siege-alesia-vercingetorix-jules-cesar.jpg]]" <em>(Slag bij Alesia. Uit Franse Wikipedia. met vermelding: &quot;Vercingétorix jette ses armes aux pieds de César, 1899, par Lionel-Noël Royer; Source: Musée CROZATIER du Puy-en-Velay&quot; )</em></li> <li>8 mei 2004 08:19 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Gd_rd.gif|Gd_rd.gif]]"</li> <li>8 mei 2004 08:06 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Liza_whaha2.jpg|Liza_whaha2.jpg]]" <em>(Liza)</em></li> <li>8 mei 2004 08:04 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Emmaa.JPG|Emmaa.JPG]]" <em>(Emma)</em></li> <li>8 mei 2004 08:02 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Manchu_China.gif|Manchu_China.gif]]"</li> <li>8 mei 2004 07:58 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Poederkwast_meeldraden_helmhokje_rugzijde.jpg|Poederkwast_meeldraden_helmhokje_rugzijde.jpg]]" <em>(zelfgemaakte foto van helmhokjes aan rugzijde bevestigd op helmdraad (Poederkwast))</em></li> <li>8 mei 2004 07:55 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Vercingetorix.jpg|Vercingetorix.jpg]]" <em>(Portret van Vercingetorix op een Romeinse densrius. Met permissie van Classical Numismatic Group, Inc. (CNG))</em></li> <li>8 mei 2004 07:52 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:China1.gif|China1.gif]]"</li> <li>8 mei 2004 04:34 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Zaadknop_klaar_tekst.jpg|Zaadknop_klaar_tekst.jpg]]" <em>(zelfgemaakte tekening van een zaadknop)</em></li> <li>8 mei 2004 04:30 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Vruchtbeginselklaartekst.jpg|Vruchtbeginselklaartekst.jpg]]" <em>(zelfgemaakte tekening van vruchtbeginsel)</em></li> <li>8 mei 2004 04:23 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Tulp_stempel_gelobd_behaard.jpg|Tulp_stempel_gelobd_behaard.jpg]]" <em>(zelfgemaakte foto van tulp met behaarde en gelobde stempel)</em></li> <li>8 mei 2004 04:20 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bosanemoon_stempels_knotsvormig_behaard.jpg|Bosanemoon_stempels_knotsvormig_behaard.jpg]]" <em>(zelfgemaakte foto; knotsvormige stempel van bosanemoon)</em></li> <li>8 mei 2004 04:17 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Meidoorn_stempel_vlak.jpg|Meidoorn_stempel_vlak.jpg]]" <em>(zelfgemaakte foto; stempelvorm bij éénstijlige meidoorn)</em></li> <li>7 mei 2004 21:47 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:RomulusAugustus.jpg|RomulusAugustus.jpg]]" <em>(Portret van Romulus Augustus op gouden Romeinse munt. Bron: Classical Numismatic Group, Inc. (CNG))</em></li> <li>7 mei 2004 21:38 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Anthemius.jpg|Anthemius.jpg]]" <em>(Portret van Anthemius op gouden Romeinse munt. Bron: Classical Numismatic Group, Inc. (CNG))</em></li> <li>7 mei 2004 21:28 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Afrika.jpg|Kaart_Afrika.jpg]]" <em>(Vertaling kaart Nederlands)</em></li> <li>7 mei 2004 21:25 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Jovianus.jpg|Jovianus.jpg]]" <em>(Portret van Jovianus op bronzen munt. Bron: Classical Numismatic Group, Inc. (CNG))</em></li> <li>7 mei 2004 21:24 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Tijs.jpg|Tijs.jpg]]" <em>(Tijs)</em></li> <li>7 mei 2004 21:23 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Maarten.jpg|Maarten.jpg]]" <em>(Maarten)</em></li> <li>7 mei 2004 21:22 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Bas.jpg|Bas.jpg]]" <em>(Bas)</em></li> <li>7 mei 2004 21:22 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Koen.jpg|Koen.jpg]]" <em>(Koen)</em></li> <li>7 mei 2004 21:21 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:RoY.ft.sendY.JPG|RoY.ft.sendY.JPG]]" <em>(Roy en Sendy)</em></li> <li>7 mei 2004 21:20 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Roy6.JPG|Roy6.JPG]]" <em>(Roy)</em></li> <li>7 mei 2004 21:20 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Marc0w.jpg|Marc0w.jpg]]" <em>(Marco)</em></li> <li>7 mei 2004 21:19 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Joery.jpg|Joery.jpg]]" <em>(Joery)</em></li> <li>7 mei 2004 21:18 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Matsje.jpg|Matsje.jpg]]" <em>(Mats)</em></li> <li>7 mei 2004 21:18 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Kefin2.jpg|Kefin2.jpg]]" <em>(Kefin)</em></li> <li>7 mei 2004 21:17 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Kevin.JPG|Kevin.JPG]]" <em>(Kevin)</em></li> <li>7 mei 2004 21:17 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:J0yceeH_ft._KeviiN.JPG|J0yceeH_ft._KeviiN.JPG]]" <em>(Joyce en Kevin)</em></li> <li>7 mei 2004 21:15 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Lotte.jpg|Lotte.jpg]]" <em>(Lotte)</em></li> <li>7 mei 2004 21:15 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:LotteeH.jpg|LotteeH.jpg]]" <em>(Lotte)</em></li> <li>7 mei 2004 21:13 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Liza_whaha.jpg|Liza_whaha.jpg]]" <em>(Liza)</em></li> <li>7 mei 2004 21:11 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Valerie2.jpg|Valerie2.jpg]]" <em>(Valerie)</em></li> <li>7 mei 2004 21:11 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Valerie2.jpg|Valerie2.jpg]]" <em>(Valerie)</em></li> <li>7 mei 2004 21:10 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Lhisa.jpg|Lhisa.jpg]]" <em>(Lhisa)</em></li> <li>7 mei 2004 21:10 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Lhisa.jpg|Lhisa.jpg]]" <em>(Lhisa)</em></li> <li>7 mei 2004 21:09 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Lisa.JPG|Lisa.JPG]]" <em>(Lisa)</em></li> <li>7 mei 2004 21:09 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Lisa.JPG|Lisa.JPG]]" <em>(Lisa)</em></li> <li>7 mei 2004 21:08 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Jessiej.jpg|Jessiej.jpg]]" <em>(Jessie)</em></li> <li>7 mei 2004 21:08 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Jessiej.jpg|Jessiej.jpg]]" <em>(Jessie)</em></li> <li>7 mei 2004 21:08 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:José_María_Aznar.jpg|José_María_Aznar.jpg]]" <em>(uit engelse wiki)</em></li> <li>7 mei 2004 21:08 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Liselore.JPG|Liselore.JPG]]" <em>(Lislore)</em></li> <li>7 mei 2004 21:07 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Liselore.JPG|Liselore.JPG]]" <em>(Lislore)</em></li> <li>7 mei 2004 21:06 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Kelly_&_Niicky.jpg|Kelly_&_Niicky.jpg]]" <em>(Kelly &amp; Nicky)</em></li> <li>7 mei 2004 21:06 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Kelly4.jpg|Kelly4.jpg]]" <em>(Kelly)</em></li> <li>7 mei 2004 21:05 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Kelly4.jpg|Kelly4.jpg]]" <em>(Kelly)</em></li> <li>7 mei 2004 21:03 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:Kopie_van_k0nteeh.jpg|Kopie_van_k0nteeh.jpg]]" <em>(kopie van konten)</em></li> <li>7 mei 2004 21:01 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Cy)trnc.gif|Cy)trnc.gif]]"</li> <li>7 mei 2004 21:00 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:EmmY2.jpg|EmmY2.jpg]]" <em>(Emmy)</em></li> <li>7 mei 2004 20:59 [[Gebruiker:Smartiegirl1|Smartiegirl1]] heeft ge-upload: "[[:Afbeelding:EmmY2.jpg|EmmY2.jpg]]" <em>(Emmy)</em></li> <li>7 mei 2004 20:48 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Bananen.jpg|Bananen.jpg]]" <em>(from english wiki, Bananas.)</em></li> <li>7 mei 2004 20:37 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Denktas.gif|Denktas.gif]]"</li> <li>7 mei 2004 19:41 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Leaning-tower-of-pisa-alternate.jpg|Leaning-tower-of-pisa-alternate.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Leaning tower of Pisa Photograph available under GFDL license. I took this picture myself with a Minolta XD-5 and a 24 f/2.8 Rokkor lens on Fujicolor 100. The picture has been scanned from a print and digitally edited (framing, color balance &amp; some blue was added in the sky). You do not need my permission to reuse it, but you may not claim that you took the photo yourself. &#91;&#91;en:Image:Leaning-tower-of-pisa-alternate.jpg]])</em></li> <li>7 mei 2004 18:56 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_goerlitz_in_deutschland.png|Karte_goerlitz_in_deutschland.png]]" <em>(duitse wiki: Karte Görlitz in Deutschland)</em></li> <li>7 mei 2004 18:42 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Eleccurvimeter.jpg|Eleccurvimeter.jpg]]" <em>(Curvimeter, eigen cirvimeter op de scanner gelegd, &#123;&#123;msg:GFDL}})</em></li> <li>7 mei 2004 15:46 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Zypn.gif|Zypn.gif]]"</li> <li>7 mei 2004 15:41 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Cy-map.gif|Cy-map.gif]]"</li> <li>7 mei 2004 14:43 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Naamloos.bmp|Naamloos.bmp]]"</li> <li>7 mei 2004 14:34 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]"</li> <li>7 mei 2004 14:27 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Atjeh-kaart-det.jpg|Atjeh-kaart-det.jpg]]"</li> <li>7 mei 2004 11:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Matveejk.jpg|Matveejk.jpg]]" <em>(Fritz8 - print)</em></li> <li>7 mei 2004 09:47 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Tsaarpeterdegrote.PNG|Tsaarpeterdegrote.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>7 mei 2004 06:52 [[Gebruiker:Deadstar|Deadstar]] heeft ge-upload: "[[:Afbeelding:IrelandMunster.png|IrelandMunster.png]]" <em>(van en: wiki - op GNU license)</em></li> <li>7 mei 2004 06:48 [[Gebruiker:Deadstar|Deadstar]] heeft ge-upload: "[[:Afbeelding:IrelandConnacht.png|IrelandConnacht.png]]" <em>(kaart van en: wiki onder GNU license)</em></li> <li>7 mei 2004 06:47 [[Gebruiker:Deadstar|Deadstar]] heeft ge-upload: "[[:Afbeelding:IrelandLeinster.png|IrelandLeinster.png]]" <em>(kaart van en: wiki onder GNU license)</em></li> <li>7 mei 2004 06:39 [[Gebruiker:Deadstar|Deadstar]] heeft ge-upload: "[[:Afbeelding:IrelandUlster.png|IrelandUlster.png]]" <em>(Ierland Ulster - wiki kaart)</em></li> <li>6 mei 2004 22:10 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:JustinianusI.jpg|JustinianusI.jpg]]" <em>(Portret van Justinianus I op een gouden munt uit Constantinopel. Bron: Classical Numismatic Group, Inc. (CNG))</em></li> <li>6 mei 2004 21:59 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Isaacnewton.PNG|Isaacnewton.PNG]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>6 mei 2004 21:01 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Stadhuis_Dendermonde.jpg|Stadhuis_Dendermonde.jpg]]" <em>(staduis Dendermonde - eigen foto)</em></li> <li>6 mei 2004 20:27 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Dender1.jpg|Dender1.jpg]]" <em>(samenvloeiing Dender en Schelde - eigen foto)</em></li> <li>6 mei 2004 20:21 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Caroluslinnaeus.png|Caroluslinnaeus.png]]" <em>(PD tekening van UT Library, ingekleurd naar bestaand tekening)</em></li> <li>6 mei 2004 20:16 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Vijver.jpg|Vijver.jpg]]" <em>(vijver - eigen foto)</em></li> <li>6 mei 2004 20:07 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Alexiusbegijnhof.jpg|Alexiusbegijnhof.jpg]]" <em>(Sint-Alexiusbegijnhof Dendermonde - eigen foto)</em></li> <li>6 mei 2004 19:24 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Dender.jpg|Dender.jpg]]" <em>(Dender in Dendermonde - eigen foto)</em></li> <li>6 mei 2004 19:17 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Ros_Beiaard.jpg|Ros_Beiaard.jpg]]" <em>(Standbeeld Ros Beiaard - eigen foto)</em></li> <li>6 mei 2004 18:44 [[Gebruiker:Ronja|Ronja]] heeft ge-upload: "[[:Afbeelding:Prelude-scriabin.png|Prelude-scriabin.png]]" <em>(muzieknotatie Prelude Scriabin, vanaf Mutopia, open source, http&#58;//www.mutopiaproject.org/cgibin/piece-info.cgi?id=445)</em></li> <li>6 mei 2004 18:17 [[Gebruiker:Ronja|Ronja]] heeft ge-upload: "[[:Afbeelding:Staccato.png|Staccato.png]]" <em>(Vanaf engelse wikipedia &#91;&#91;en:Image:staccato.png]])</em></li> <li>6 mei 2004 15:36 [[Gebruiker:Opa|Opa]] heeft ge-upload: "[[:Afbeelding:Vlier2.jpg|Vlier2.jpg]]" <em>(eigen foto 6 mei 2004 meidoorn en vlier)</em></li> <li>6 mei 2004 15:35 [[Gebruiker:Opa|Opa]] heeft ge-upload: "[[:Afbeelding:Vlier.jpg|Vlier.jpg]]" <em>(eigen foto 6.5.2004 meidoorn en vlier)</em></li> <li>6 mei 2004 12:45 [[Gebruiker:Kriske|Kriske]] heeft ge-upload: "[[:Afbeelding:Olomouc.gif|Olomouc.gif]]" <em>(Situering Olomouc in Tsjechië)</em></li> <li>6 mei 2004 12:38 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kostenk.jpg|Kostenk.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 mei 2004 12:00 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Cramjk.jpg|Cramjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 mei 2004 11:29 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Galileogalilei.png|Galileogalilei.png]]" <em>(PD tekening van UT Library, ingekleurd naar bestaand schilderij)</em></li> <li>6 mei 2004 11:03 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:JuliaDomna-Caracalla-Geta.jpg|JuliaDomna-Caracalla-Geta.jpg]]" <em>(Gouden munt met de portretten van de Romeinse keizerin Julia Domna en haar twee zoons Caracalla en Geta. Bron: Classical Numismatic Group, Inc. (CNG))</em></li> <li>6 mei 2004 10:51 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Margaret_Rutherford.jpg|Margaret_Rutherford.jpg]]" <em>(van engelse pagina, geen beschrijving aanwezig)</em></li> <li>6 mei 2004 10:18 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Cotenord.jpg|Cotenord.jpg]]" <em>(van engelse pagina)</em></li> <li>6 mei 2004 07:52 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Sophokles.jpg|Sophokles.jpg]]" <em>(Sophocles. Uit Duitse Wikipedia. Originele bronvermelding: &quot;Sophokles aus Baumeister: Denkmäler des klassischen Altertums. 1888. Band III., Seite 1685&quot;)</em></li> <li>6 mei 2004 06:58 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Paardebloem_weiland.jpg|Paardebloem_weiland.jpg]]" <em>(zelfgemaakte foto van paardebloemen in een weiland)</em></li> <li>6 mei 2004 06:45 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Vogelkers_bloesem.jpg|Vogelkers_bloesem.jpg]]" <em>(zelgemaakte foto van vogelkers eind april)</em></li> <li>6 mei 2004 05:48 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Witlof_wortels_kuil.jpg|Witlof_wortels_kuil.jpg]]" <em>(zelfgemaakte foto; ouderwets opzetten van witlofpennen in een kuil)</em></li> <li>6 mei 2004 05:46 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Wilof_pennenteelt.jpg|Wilof_pennenteelt.jpg]]" <em>(zelfgemaakte foto: pennen (wortel)teelt van witlof)</em></li> <li>6 mei 2004 05:09 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Pioenroos.jpg|Pioenroos.jpg]]" <em>(zelfgemaakte foto van pioenroos als voorbeeld van gevulde bloemen)</em></li> <li>5 mei 2004 19:29 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Benjaminfranklin.PNG|Benjaminfranklin.PNG]]" <em>(Benjamin Franklin van de Engelse wiki: &quot;Images of American Political History&quot;, ingekleurd naar bestaand schilderij)</em></li> <li>5 mei 2004 18:35 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Alexanderpavlovich.png|Alexanderpavlovich.png]]" <em>(PD tekening van UT Library, ingekleurd naar bestaande schilderijen)</em></li> <li>5 mei 2004 18:13 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:AchterdeKerk_klein.jpg|AchterdeKerk_klein.jpg]]" <em>(Achter de Kerk, Gouda Eigen foto gebruik vrij)</em></li> <li>5 mei 2004 18:12 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:Spieringstraat_klein.jpg|Spieringstraat_klein.jpg]]" <em>(Spieringstraat Gouda, eigen foto vrij gebruik)</em></li> <li>5 mei 2004 15:56 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Gejaagd_door_de_wind.jpg|Gejaagd_door_de_wind.jpg]]" <em>(van engelse pagina: fairuse GWTW original poster This image is copyrighted. Its use is contended to be fair use under United States law.)</em></li> <li>5 mei 2004 15:38 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Koning_Ferdinand_van_Roemenië.jpg|Koning_Ferdinand_van_Roemenië.jpg]]" <em>(Ferdinand van Roemenië (Roemeense Wiki))</em></li> <li>5 mei 2004 15:32 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Ferdinand_of_Romania.jpg|Ferdinand_of_Romania.jpg]]" <em>(Ferdinand van Roemenië (Engelse Wiki))</em></li> <li>5 mei 2004 14:37 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:CharlesOfRomania.JPG|CharlesOfRomania.JPG]]" <em>(Karel I van Roemenië, van Engelse Wiki)</em></li> <li>5 mei 2004 14:37 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Carol_I_of_Romania.jpg|Carol_I_of_Romania.jpg]]" <em>(Karel I van Roemenië, van Engelse Wiki)</em></li> <li>5 mei 2004 14:33 [[Gebruiker:Rm|Rm]] heeft ge-upload: "[[:Afbeelding:Judo_junior.png|Judo_junior.png]]" <em>(eigen foto)</em></li> <li>5 mei 2004 14:27 [[Gebruiker:Garo|Garo]] heeft ge-upload: "[[:Afbeelding:Kdescreen.jpg|Kdescreen.jpg]]" <em>(GPL, door mij genomen screenshot)</em></li> <li>5 mei 2004 14:20 [[Gebruiker:Garo|Garo]] heeft ge-upload: "[[:Afbeelding:Xmms2.jpg|Xmms2.jpg]]" <em>(GPL, door mij genomen screenshot)</em></li> <li>5 mei 2004 14:17 [[Gebruiker:Garo|Garo]] heeft ge-upload: "[[:Afbeelding:Xmms.jpg|Xmms.jpg]]" <em>(GPL, door mij genomen screenshot)</em></li> <li>5 mei 2004 14:00 [[Gebruiker:Garo|Garo]] heeft ge-upload: "[[:Afbeelding:Roemenie.png|Roemenie.png]]" <em>(GPL, door mij aangepast figuur dat al GPL was)</em></li> <li>5 mei 2004 13:48 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Nederlands-Indië.gif|Nederlands-Indië.gif]]"</li> <li>5 mei 2004 12:12 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Ponzik.jpg|Ponzik.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 12:07 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Samischk.jpg|Samischk.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 12:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Zaitsevk.jpg|Zaitsevk.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 11:57 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Shirovk.jpg|Shirovk.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 11:52 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Richterk.jpg|Richterk.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 11:48 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Staunk.jpg|Staunk.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 11:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Retivdk.jpg|Retivdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 11:37 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Tarrasch.jpg|Tarrasch.jpg]]" <em>(foto&#39;s van voor 1924 zijn vrij)</em></li> <li>5 mei 2004 11:25 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Simagink.jpg|Simagink.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 11:21 [[Gebruiker:Rm|Rm]] heeft ge-upload: "[[:Afbeelding:Ecliptica.png|Ecliptica.png]]" <em>(omdat vorige versie er gehavend uitzag)</em></li> <li>5 mei 2004 11:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Rubjvdk.jpg|Rubjvdk.jpg]]" <em>(postzegel )</em></li> <li>5 mei 2004 11:04 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Rubinvdk.jpg|Rubinvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 10:59 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Resjvdk.jpg|Resjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 10:53 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Polujvdk.jpg|Polujvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 10:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Rosjvdk.jpg|Rosjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 10:45 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Rausjvdk.jpg|Rausjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 10:15 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kiesjvdk.jpg|Kiesjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>5 mei 2004 10:11 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Oliver-Cromwell.PNG|Oliver-Cromwell.PNG]]" <em>(PD tekening: ingekleurd naar het originele schilderij)</em></li> <li>5 mei 2004 10:06 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Olivercromwell.png|Olivercromwell.png]]" <em>(PD tekening: ingekleurd naar het originele schilderij)</em></li> <li>5 mei 2004 10:04 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Olivercromwell.png|Olivercromwell.png]]" <em>(PD tekening: ingekleurd naar het originele schilderij)</em></li> <li>5 mei 2004 10:01 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Olivercromwell.png|Olivercromwell.png]]" <em>(PD tekening: ingekleurd naar het originele schilderij)</em></li> <li>5 mei 2004 09:05 [[Gebruiker:Opa|Opa]] heeft ge-upload: "[[:Afbeelding:Prunus_avium.jpg|Prunus_avium.jpg]]" <em>(vogelkers eigen foto 23.4.2004 vrijstaand in weiland Ardennen)</em></li> <li>5 mei 2004 08:04 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Vlad-dracula.png|Vlad-dracula.png]]" <em>(PD tekening: ingekleurd naar het originele schilderij)</em></li> <li>5 mei 2004 08:03 [[Gebruiker:Opa|Opa]] heeft ge-upload: "[[:Afbeelding:Bergvlier.jpg|Bergvlier.jpg]]" <em>(eigen foto 4.5.2004 Ardennen )</em></li> <li>5 mei 2004 07:48 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Brutus_Eid_Mar.jpg|Brutus_Eid_Mar.jpg]]" <em>(Beroemde munt van van Brutus met zijn eigen portret en symbolen van de moord op Julius Caesar. Bron: Classical Numismatic Group, Inc. (CNG))</em></li> <li>5 mei 2004 07:26 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Vergeet_mij_nietje_closeup_groot.jpg|Vergeet_mij_nietje_closeup_groot.jpg]]" <em>(zelfgemaakte foto van vergeet-mij-nietje in tuin)</em></li> <li>5 mei 2004 07:15 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Vergeet_mij_nietje_closeup.jpg|Vergeet_mij_nietje_closeup.jpg]]" <em>(zelfgemaakte foto van tuin Vergeet-mij-nietje)</em></li> <li>5 mei 2004 06:58 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Sopraan_heeft_het_moeilijk.JPG|Sopraan_heeft_het_moeilijk.JPG]]" <em>(Cartoon van een sopraan die het moeilijk heeft. Tekening van Kjell &#39;t Hoen, ter beschikking gesteld voor gebruik met bronvermelding onder GNU/FDL licentie)</em></li> <li>5 mei 2004 04:58 [[Gebruiker:Ronja|Ronja]] heeft ge-upload: "[[:Afbeelding:Yin_and_yang.png|Yin_and_yang.png]]" <em>(Overgenomen vanaf Engelse wikipedia, &#91;&#91;en:Yin_and_yang.png]])</em></li> <li>5 mei 2004 04:47 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Kleine_watersalamander.JPG|Kleine_watersalamander.JPG]]" <em>(Eigen foto)</em></li> <li>4 mei 2004 18:04 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:BritishVirginIslands_coa.gif|BritishVirginIslands_coa.gif]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 17:45 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Gerb.jpg|Gerb.jpg]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 17:29 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:SaudiCoat.PNG|SaudiCoat.PNG]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 17:25 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Rwandaflag3.PNG|Rwandaflag3.PNG]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 17:11 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:LocationCaymanIslands.png|LocationCaymanIslands.png]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 17:07 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Cayman_islands_flag_medium.png|Cayman_islands_flag_medium.png]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 17:05 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Caymanislands_coa.jpg|Caymanislands_coa.jpg]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 16:08 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Togoarms22.PNG|Togoarms22.PNG]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 16:03 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Pitcairn-coa.jpg|Pitcairn-coa.jpg]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 15:55 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Kritikos.mid|Kritikos.mid]]" <em>(kritikos (traditioneel, midi bestand eigen maaksel))</em></li> <li>4 mei 2004 15:53 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Libyseal.gif|Libyseal.gif]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 15:43 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Capeverdearms22.PNG|Capeverdearms22.PNG]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 15:28 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Myanmararms22.PNG|Myanmararms22.PNG]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 14:57 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Guernsey_Coat_of_Arms.png|Guernsey_Coat_of_Arms.png]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 14:54 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Coaguinea-bissausmall.jpg|Coaguinea-bissausmall.jpg]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 14:45 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Greenland_Coat_of_Arms.gif|Greenland_Coat_of_Arms.gif]]" <em>(En: wikipedia)</em></li> <li>4 mei 2004 13:55 [[Gebruiker:Deadstar|Deadstar]] heeft ge-upload: "[[:Afbeelding:CapitolRecordslabel.jpg|CapitolRecordslabel.jpg]]" <em>(van en: wiki)</em></li> <li>4 mei 2004 13:51 [[Gebruiker:Opa|Opa]] heeft ge-upload: "[[:Afbeelding:Ardennen.jpg|Ardennen.jpg]]" <em>(eigen foto 3.5.2004 genomen op weg van Stavelot naar Wannes)</em></li> <li>4 mei 2004 13:42 [[Gebruiker:Opa|Opa]] heeft ge-upload: "[[:Afbeelding:Beauceron.jpg|Beauceron.jpg]]" <em>(eigen foto 25.3.2004 Beauceron volwassen teef)</em></li> <li>4 mei 2004 13:29 [[Gebruiker:Opa|Opa]] heeft ge-upload: "[[:Afbeelding:Pinus.jpg|Pinus.jpg]]" <em>(eigen foto 2.3.2004 Canarische pijnboom Caldera de Taburiente La Palma Islas Canarias)</em></li> <li>4 mei 2004 13:02 [[Gebruiker:DexieBoy|DexieBoy]] heeft ge-upload: "[[:Afbeelding:New_labour_new_britain_logo.jpg|New_labour_new_britain_logo.jpg]]" <em>(New Labour Logo (van Engelse wiki))</em></li> <li>4 mei 2004 12:59 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Fransbauer_benjejong.jpg|Fransbauer_benjejong.jpg]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law. )</em></li> <li>4 mei 2004 11:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Zegeleerst.jpg|Zegeleerst.jpg]]" <em>(postzegel )</em></li> <li>4 mei 2004 10:46 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Sukkeljk.jpg|Sukkeljk.jpg]]" <em>(foto van voor 1924)</em></li> <li>4 mei 2004 10:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Zuckerjk.jpg|Zuckerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>4 mei 2004 09:59 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Winajk.jpg|Winajk.jpg]]" <em>(Fritz8 - print)</em></li> <li>4 mei 2004 09:55 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Vidmarjk.jpg|Vidmarjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>4 mei 2004 09:51 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Uhljk.jpg|Uhljk.jpg]]" <em>(Fritz8 - print)</em></li> <li>4 mei 2004 09:47 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Torrejk.jpg|Torrejk.jpg]]" <em>(Fritz8 - print)</em></li> <li>4 mei 2004 09:35 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Tartajk.jpg|Tartajk.jpg]]" <em>(Fritz8 - print)</em></li> <li>4 mei 2004 09:31 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Tarraschjk.jpg|Tarraschjk.jpg]]" <em>(friso)</em></li> <li>4 mei 2004 09:18 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Taljaap.jpg|Taljaap.jpg]]" <em>(friso)</em></li> <li>4 mei 2004 09:12 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Szabojk.jpg|Szabojk.jpg]]" <em>(Fritz8 - print)</em></li> <li>4 mei 2004 09:05 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Steinjk.jpg|Steinjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>4 mei 2004 08:37 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Tschijk.jpg|Tschijk.jpg]]" <em>(postzegel)</em></li> <li>4 mei 2004 08:32 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Tschigorin.jpg|Tschigorin.jpg]]" <em>(postzegel)</em></li> <li>4 mei 2004 08:27 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Lopezjk.jpg|Lopezjk.jpg]]" <em>(postzegel)</em></li> <li>4 mei 2004 08:09 [[Gebruiker:Opa|Opa]] heeft ge-upload: "[[:Afbeelding:Perron.jpg|Perron.jpg]]" <em>(eigen foto 3 mei 2004 het perron op de Place St Remacle werd opgericht door de laatste abt van de abdij.)</em></li> <li>4 mei 2004 08:02 [[Gebruiker:Opa|Opa]] heeft ge-upload: "[[:Afbeelding:Abdij.jpg|Abdij.jpg]]" <em>(eigen foto 3 mei 2004 abdij van Stavelot, op de voorgrond opgravingen van de middeleeuwse abdij, links de musea, rechts tussen toegangspoort en toren het gebouw waar in de 18e eeuw de brouwerij, bakkerij en stallen waren gevestigd.)</em></li> <li>4 mei 2004 07:53 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Dtldr2wp.gif|Dtldr2wp.gif]]"</li> <li>4 mei 2004 07:51 [[Gebruiker:Opa|Opa]] heeft ge-upload: "[[:Afbeelding:Half-track.jpg|Half-track.jpg]]" <em>(eigen foto 3 mei 2004 Amerikaanse halftrack M3 bij de brug over de Ambleve te Stavelot herinnert aan de gevechten van 18 december 1944 tot 13 januari 1945. De half-track komt uit Frankrijk waar hij gebruikt werd tijdens de landing in Normandie.)</em></li> <li>4 mei 2004 07:49 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Dsachsw2.gif|Dsachsw2.gif]]"</li> <li>4 mei 2004 07:47 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:0302.gif|0302.gif]]"</li> <li>4 mei 2004 07:43 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Bayernwk.gif|Bayernwk.gif]]"</li> <li>4 mei 2004 07:40 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Preusskf.gif|Preusskf.gif]]"</li> <li>4 mei 2004 07:32 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Preuskt2.gif|Preuskt2.gif]]"</li> <li>4 mei 2004 06:54 [[Gebruiker:Nijman|Nijman]] heeft ge-upload: "[[:Afbeelding:Wojewodztwo_lubelskie.png|Wojewodztwo_lubelskie.png]]" <em>(Provincie Lublin, overgenomen van Poolse pagina http&#58;//pl.wikipedia.org/wiki/Grafika:Wojewodztwo_lubelskie.png)</em></li> <li>4 mei 2004 06:25 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stokboon.jpg|Stokboon.jpg]]" <em>(zelfgemaakte foto van stokslabonen)</em></li> <li>4 mei 2004 06:18 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stamslaboon_zomer1.jpg|Stamslaboon_zomer1.jpg]]" <em>(zelfgemaakte foto van stamslabonen)</em></li> <li>3 mei 2004 20:51 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Sachsen_Koenigreich_Wappen2_.gif|Sachsen_Koenigreich_Wappen2_.gif]]"</li> <li>3 mei 2004 20:50 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Sachsen_im_Deutschen_Reich_.gif|Sachsen_im_Deutschen_Reich_.gif]]"</li> <li>3 mei 2004 20:48 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Koenigreich_Sachsen_Flagge.gif|Koenigreich_Sachsen_Flagge.gif]]"</li> <li>3 mei 2004 20:33 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Waldeck_im_Deutschen_Reich_.gif|Waldeck_im_Deutschen_Reich_.gif]]"</li> <li>3 mei 2004 20:33 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Wappen_waldeck.gif|Wappen_waldeck.gif]]"</li> <li>3 mei 2004 20:17 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Koenigreich_Bayern_Flagge.gif|Koenigreich_Bayern_Flagge.gif]]"</li> <li>3 mei 2004 20:16 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Bayern_im_Deutschen_Reich_.gif|Bayern_im_Deutschen_Reich_.gif]]"</li> <li>3 mei 2004 20:15 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Bayern_Koenigreich_Wappen_.gif|Bayern_Koenigreich_Wappen_.gif]]"</li> <li>3 mei 2004 20:14 [[Gebruiker:Rm|Rm]] heeft ge-upload: "[[:Afbeelding:Jdbgmgr.exe.png|Jdbgmgr.exe.png]]" <em>(screenshot )</em></li> <li>3 mei 2004 19:53 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Tulp_geel2.jpg|Tulp_geel2.jpg]]" <em>(gele tulp april 2004 / foto door Fruggo, vrijgegeven onder GNU-FDL)</em></li> <li>3 mei 2004 19:24 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:SpoorwegenNederland.png|SpoorwegenNederland.png]]" <em>(Ned. spoorwegnet (reizigersvervoer), eigen werk, &#123;&#123;msg:PD}})</em></li> <li>3 mei 2004 17:19 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Bobevers.jpg|Bobevers.jpg]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law.)</em></li> <li>3 mei 2004 16:44 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Andrehazes.jpg|Andrehazes.jpg]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law. )</em></li> <li>3 mei 2004 16:28 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Preussen_Wappen.gif|Preussen_Wappen.gif]]"</li> <li>3 mei 2004 16:24 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Koenigreich_Preussen_Flagge.gif|Koenigreich_Preussen_Flagge.gif]]"</li> <li>3 mei 2004 16:23 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Koenigreich_Preussen.gif|Koenigreich_Preussen.gif]]"</li> <li>3 mei 2004 14:29 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Commedhabitude.jpg|Commedhabitude.jpg]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law. )</em></li> <li>3 mei 2004 13:56 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Luther.png|Luther.png]]" <em>(PD: van wikipedia, maar nu ingekleurd)</em></li> <li>3 mei 2004 13:02 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:TariqAziz.jpg|TariqAziz.jpg]]" <em>(van engelse pagina: United States Central Command photo. )</em></li> <li>3 mei 2004 11:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Torresjk.jpg|Torresjk.jpg]]" <em>(postzegel)</em></li> <li>3 mei 2004 11:03 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Germany.gif|Germany.gif]]"</li> <li>3 mei 2004 11:01 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Turkjk.jpg|Turkjk.jpg]]" <em>(postzegel)</em></li> <li>3 mei 2004 11:00 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Roemreic.gif|Roemreic.gif]]"</li> <li>3 mei 2004 10:58 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Heilige_Roomse_Rijk_Vlag.gif|Heilige_Roomse_Rijk_Vlag.gif]]"</li> <li>3 mei 2004 10:38 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Zangereszondernaam.jpg|Zangereszondernaam.jpg]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law. )</em></li> <li>3 mei 2004 10:34 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Vlagbrusselgroot.png|Vlagbrusselgroot.png]]" <em>(mooiere kleruen)</em></li> <li>3 mei 2004 10:24 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Kolibri.jpg|Kolibri.jpg]]" <em>(foto van http&#58;//www.pueblo.gsa.gov/cic_text/misc/forbirds/forbird.htm staat ook op Duitse Wikipedia)</em></li> <li>3 mei 2004 09:57 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Drittes_Reich_2.gif|Drittes_Reich_2.gif]]"</li> <li>3 mei 2004 09:50 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Fdas.gif|Fdas.gif]]"</li> <li>3 mei 2004 09:48 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Ruyjk.jpg|Ruyjk.jpg]]" <em>(postzegel)</em></li> <li>3 mei 2004 09:42 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kampjk.jpg|Kampjk.jpg]]" <em>(postzegel)</em></li> <li>3 mei 2004 09:22 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Drittes_Reich.gif|Drittes_Reich.gif]]"</li> <li>3 mei 2004 09:13 [[Gebruiker:Rianne|Rianne]] heeft ge-upload: "[[:Afbeelding:Globe_theatre.jpg|Globe_theatre.jpg]]" <em>(Foto door mij gemaakt in het globe theatre. )</em></li> <li>3 mei 2004 09:00 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Ernstjk.jpg|Ernstjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>3 mei 2004 08:56 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Kolibri_snavel.jpg|Kolibri_snavel.jpg]]" <em>(uitvergroting van kolibricomkl.jpg)</em></li> <li>3 mei 2004 08:28 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Suikermais_kiemplant_groot.jpg|Suikermais_kiemplant_groot.jpg]]" <em>(zelfgemaakte foto van kiemplant van suikermais)</em></li> <li>3 mei 2004 08:26 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Pape_innocent_3.jpg|Pape_innocent_3.jpg]]" <em>(fr: wikipedia)</em></li> <li>3 mei 2004 08:16 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stamslaboon_eerste_drietallig_blad_(1).jpg|Stamslaboon_eerste_drietallig_blad_(1).jpg]]" <em>(zelfgemaakte foto van stamslaboon met eerste drietallige bladeren)</em></li> <li>3 mei 2004 07:58 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Appelboom.jpg|Appelboom.jpg]]" <em>(zelfgemaakte foto; Rij van spilvormige appelbomen in bloei eind april)</em></li> <li>3 mei 2004 07:30 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:HostilianusSest01.jpg|HostilianusSest01.jpg]]" <em>(Portret van Hostilianus op een sestertie. (eigen scan))</em></li> <li>3 mei 2004 06:12 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Tulp_meeldraden.jpg|Tulp_meeldraden.jpg]]" <em>(zelfgemaakte foto; tulp met zeer dikke helmdraden)</em></li> <li>3 mei 2004 06:10 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Kerstroos_meeldraad.jpg|Kerstroos_meeldraad.jpg]]" <em>(zelfgemaakte foto van kerstroos (Helleboris))</em></li> <li>3 mei 2004 06:08 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Aardbei-meeldraden.jpg|Aardbei-meeldraden.jpg]]" <em>(zelfgemaakte foto; platte helmhokjes bij aardbei)</em></li> <li>3 mei 2004 05:27 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Equisetumarvense.jpg|Equisetumarvense.jpg]]" <em>(Fertiel stengel van Heermoes door mij gefotografeerd in het Eemboerveld bij Smeerling &#123;&#123;msg:GFDL}})</em></li> <li>2 mei 2004 21:58 [[Gebruiker:Soliman|Soliman]] heeft ge-upload: "[[:Afbeelding:DSCN6184_watertoren_den_helder2002.jpg|DSCN6184_watertoren_den_helder2002.jpg]]" <em>(Watertoren Den Helder 2002)</em></li> <li>2 mei 2004 21:42 [[Gebruiker:Soliman|Soliman]] heeft ge-upload: "[[:Afbeelding:Hel297.jpg|Hel297.jpg]]" <em>(De oude watertoren centrum van Den Helder )</em></li> <li>2 mei 2004 19:22 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Gouda_Holl_IJssel.jpg|Gouda_Holl_IJssel.jpg]]" <em>(Gouda, Hollandse IJssel - eigen foto)</em></li> <li>2 mei 2004 19:12 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Hashemitearms.jpg|Hashemitearms.jpg]]" <em>(En: wikipedia)</em></li> <li>2 mei 2004 18:53 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Ecuador_coa.gif|Ecuador_coa.gif]]" <em>(En: wikipedia)</em></li> <li>2 mei 2004 18:53 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Liberty-delacroix.jpg|Liberty-delacroix.jpg]]" <em>(liberté)</em></li> <li>2 mei 2004 18:53 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Logo_republique4.jpg|Logo_republique4.jpg]]" <em>(logo)</em></li> <li>2 mei 2004 18:53 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Maria1.jpg|Maria1.jpg]]" <em>(marianne)</em></li> <li>2 mei 2004 18:52 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Mariannes_d'aujourd'hui_Paris_2003.jpg|Mariannes_d'aujourd'hui_Paris_2003.jpg]]" <em>(marianne)</em></li> <li>2 mei 2004 18:51 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Mariannes3.jpg|Mariannes3.jpg]]" <em>(marianne)</em></li> <li>2 mei 2004 18:51 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Timbpt2.jpg|Timbpt2.jpg]]" <em>(Marianne postzegel)</em></li> <li>2 mei 2004 18:05 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Ivorycoastarms55.png|Ivorycoastarms55.png]]" <em>(ivoorkust)</em></li> <li>2 mei 2004 17:46 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Biot-map.jpg|Biot-map.jpg]]" <em>(BIOT kaart)</em></li> <li>2 mei 2004 17:46 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:British_iot_flag_medium.png|British_iot_flag_medium.png]]" <em>(BIOT vlag)</em></li> <li>2 mei 2004 17:14 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:American_samoa_flag_large.png|American_samoa_flag_large.png]]" <em>(amerikaans samoa)</em></li> <li>2 mei 2004 17:13 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:125px-American_samoa_flag_large.png|125px-American_samoa_flag_large.png]]" <em>(samoa vlag)</em></li> <li>2 mei 2004 16:54 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Englishcoatofarms.png|Englishcoatofarms.png]]" <em>(engeland)</em></li> <li>2 mei 2004 16:50 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:100px-Englishcoatofarms.png|100px-Englishcoatofarms.png]]" <em>(engeland coa)</em></li> <li>2 mei 2004 16:45 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Cookislands_coa.jpg|Cookislands_coa.jpg]]" <em>(cook eilanden)</em></li> <li>2 mei 2004 16:44 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Comoros_coat_of_arms_small.gif|Comoros_coat_of_arms_small.gif]]" <em>(comoros)</em></li> <li>2 mei 2004 16:40 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Aruba_coa.png|Aruba_coa.png]]" <em>(aruba)</em></li> <li>2 mei 2004 16:37 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Dominican_republic_coa.gif|Dominican_republic_coa.gif]]" <em>(domirep)</em></li> <li>2 mei 2004 16:35 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Embelm_KZ.png|Embelm_KZ.png]]" <em>(yukf)</em></li> <li>2 mei 2004 16:34 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Emblem_of_India.png|Emblem_of_India.png]]" <em>(india)</em></li> <li>2 mei 2004 16:34 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Estonia_coa.png|Estonia_coa.png]]" <em>(estland)</em></li> <li>2 mei 2004 16:33 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Falklands_Coat_of_Arms.png|Falklands_Coat_of_Arms.png]]" <em>(falkland)</em></li> <li>2 mei 2004 16:33 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Faroe_Islands.png|Faroe_Islands.png]]" <em>(farao)</em></li> <li>2 mei 2004 16:32 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Fij-coa.gif|Fij-coa.gif]]" <em>(fiji)</em></li> <li>2 mei 2004 16:32 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Germany_coa.png|Germany_coa.png]]" <em>(duits)</em></li> <li>2 mei 2004 16:32 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Ghanaarms23.png|Ghanaarms23.png]]" <em>(ghana)</em></li> <li>2 mei 2004 16:32 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Guineaarms23.png|Guineaarms23.png]]" <em>(guine)</em></li> <li>2 mei 2004 16:31 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Guyana_coa.png|Guyana_coa.png]]" <em>(guyana)</em></li> <li>2 mei 2004 16:31 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Hong_Kong_coa.png|Hong_Kong_coa.png]]" <em>(honhkonh)</em></li> <li>2 mei 2004 16:31 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Hungary_coa.png|Hungary_coa.png]]" <em>(hongarije)</em></li> <li>2 mei 2004 16:31 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Indonesiacoatofarms.jpg|Indonesiacoatofarms.jpg]]" <em>(indonesie)</em></li> <li>2 mei 2004 16:30 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Iraq_arms.png|Iraq_arms.png]]" <em>(irak)</em></li> <li>2 mei 2004 16:30 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:ISLcoat.gif|ISLcoat.gif]]" <em>(ui)</em></li> <li>2 mei 2004 16:30 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Ireland_coa.png|Ireland_coa.png]]" <em>(ierland)</em></li> <li>2 mei 2004 16:30 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Isle_of_Man_Arms_Small.png|Isle_of_Man_Arms_Small.png]]" <em>(man eiland)</em></li> <li>2 mei 2004 16:30 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Israel-coa-medium.png|Israel-coa-medium.png]]" <em>(isreal)</em></li> <li>2 mei 2004 16:30 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Italy_coa.png|Italy_coa.png]]" <em>(italie)</em></li> <li>2 mei 2004 16:30 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Jamaica_coat_medium.gif|Jamaica_coat_medium.gif]]" <em>(jamaica)</em></li> <li>2 mei 2004 16:30 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Ivorycoastarms55.png|Ivorycoastarms55.png]]" <em>(ivoorkust)</em></li> <li>2 mei 2004 16:29 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Jersey_Coat_of_Arms.png|Jersey_Coat_of_Arms.png]]" <em>(jersey)</em></li> <li>2 mei 2004 16:29 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:KUW-coat.gif|KUW-coat.gif]]" <em>(kuw)</em></li> <li>2 mei 2004 16:29 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Kiribaticoatofarms.jpg|Kiribaticoatofarms.jpg]]" <em>(kirbiti)</em></li> <li>2 mei 2004 16:28 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Lambang_Mongolia.png|Lambang_Mongolia.png]]" <em>(mongolia)</em></li> <li>2 mei 2004 16:28 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Laos_coa.png|Laos_coa.png]]" <em>(laos)</em></li> <li>2 mei 2004 16:28 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Lesothoarms22.png|Lesothoarms22.png]]" <em>(lesoto)</em></li> <li>2 mei 2004 16:28 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Lib-coa.png|Lib-coa.png]]" <em>(liberia)</em></li> <li>2 mei 2004 16:27 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Luxarms.gif|Luxarms.gif]]" <em>(luxelmburg)</em></li> <li>2 mei 2004 16:27 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Liechtenstein_coa.png|Liechtenstein_coa.png]]" <em>(lichtenstein)</em></li> <li>2 mei 2004 16:27 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Mexico_coat_of_arms_(small).png|Mexico_coat_of_arms_(small).png]]" <em>(mexico)</em></li> <li>2 mei 2004 16:26 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Myanmararms22.png|Myanmararms22.png]]" <em>(myanamar)</em></li> <li>2 mei 2004 16:26 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Nantillescoa.png|Nantillescoa.png]]" <em>(nantilles)</em></li> <li>2 mei 2004 16:26 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:New_zealand_coa.png|New_zealand_coa.png]]" <em>(nieuw-zeeland)</em></li> <li>2 mei 2004 16:26 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:PapuaNewGuinea_coa.png|PapuaNewGuinea_coa.png]]" <em>(papua)</em></li> <li>2 mei 2004 16:26 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Paraguay_coa.png|Paraguay_coa.png]]" <em>(paraguay)</em></li> <li>2 mei 2004 16:25 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Philippines_coa.png|Philippines_coa.png]]" <em>(filips)</em></li> <li>2 mei 2004 16:25 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Pitcairn-coa.jpg|Pitcairn-coa.jpg]]" <em>(pitcairn)</em></li> <li>2 mei 2004 16:25 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Rwandaflag3.png|Rwandaflag3.png]]" <em>(rwanda)</em></li> <li>2 mei 2004 16:24 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Shield_cl.gif|Shield_cl.gif]]" <em>(cz)</em></li> <li>2 mei 2004 16:24 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Seychelles_coa.png|Seychelles_coa.png]]" <em>(seychelen)</em></li> <li>2 mei 2004 16:24 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:SmallNationalArmsofUAE.png|SmallNationalArmsofUAE.png]]" <em>(e)</em></li> <li>2 mei 2004 16:24 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Smarino.jpg|Smarino.jpg]]" <em>(san marino)</em></li> <li>2 mei 2004 16:23 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:St_lucia_coa.png|St_lucia_coa.png]]" <em>(lucia)</em></li> <li>2 mei 2004 16:23 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Suriname_coa.png|Suriname_coa.png]]" <em>(suri)</em></li> <li>2 mei 2004 16:23 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Swazicoa.jpg|Swazicoa.jpg]]" <em>(swaziland)</em></li> <li>2 mei 2004 16:23 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Switzerland_coa.png|Switzerland_coa.png]]" <em>(zwitser)</em></li> <li>2 mei 2004 16:23 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Symbol_crest.png|Symbol_crest.png]]" <em>(crest)</em></li> <li>2 mei 2004 16:22 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Tanzanian_Coat_of_Arms.png|Tanzanian_Coat_of_Arms.png]]" <em>(tanzania)</em></li> <li>2 mei 2004 16:22 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:The_small_Danish_Coat_of_Arms.jpg|The_small_Danish_Coat_of_Arms.jpg]]" <em>(denemark)</em></li> <li>2 mei 2004 16:22 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Togoarms22.png|Togoarms22.png]]" <em>(tongo2)</em></li> <li>2 mei 2004 16:22 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Tongaarms22.png|Tongaarms22.png]]" <em>(tongo)</em></li> <li>2 mei 2004 16:21 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Tuvalu-coa.jpg|Tuvalu-coa.jpg]]" <em>(tuvalu)</em></li> <li>2 mei 2004 16:21 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Ugandan_Coat_of_Arms.png|Ugandan_Coat_of_Arms.png]]" <em>(uganda)</em></li> <li>2 mei 2004 16:21 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:UK_Coat_of_Arms_Small.png|UK_Coat_of_Arms_Small.png]]" <em>(uk)</em></li> <li>2 mei 2004 16:21 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Ukraine_coa.png|Ukraine_coa.png]]" <em>(oekraine)</em></li> <li>2 mei 2004 16:21 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Uruguay_coa.png|Uruguay_coa.png]]" <em>(uruguay)</em></li> <li>2 mei 2004 16:21 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Vanuatu_coat_of_arms.jpg|Vanuatu_coat_of_arms.jpg]]" <em>(vanuatu)</em></li> <li>2 mei 2004 16:20 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Vatican_coa.png|Vatican_coa.png]]" <em>(vatikaan)</em></li> <li>2 mei 2004 16:20 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Viet-coa.png|Viet-coa.png]]" <em>(vietnam)</em></li> <li>2 mei 2004 16:20 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Westasmarms22.png|Westasmarms22.png]]" <em>(west)</em></li> <li>2 mei 2004 16:20 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Scottish_Royal_COA.jpg|Scottish_Royal_COA.jpg]]" <em>(En: wikipedia)</em></li> <li>2 mei 2004 16:19 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Za-coa.gif|Za-coa.gif]]" <em>(za)</em></li> <li>2 mei 2004 16:19 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Yemencoa.jpg|Yemencoa.jpg]]" <em>(jemen)</em></li> <li>2 mei 2004 16:19 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:ZaireCoat.png|ZaireCoat.png]]" <em>(zaire)</em></li> <li>2 mei 2004 16:19 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Zambian_Coat_of_Arms.png|Zambian_Coat_of_Arms.png]]" <em>(zambia)</em></li> <li>2 mei 2004 16:19 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Zimbabwe_Coat_of_Arms.png|Zimbabwe_Coat_of_Arms.png]]" <em>(zimbab)</em></li> <li>2 mei 2004 15:09 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:SWGUARD.JPG|SWGUARD.JPG]]" <em>(En: wikipedia)</em></li> <li>2 mei 2004 12:58 [[Gebruiker:Tbrugtje|Tbrugtje]] heeft ge-upload: "[[:Afbeelding:2003611212_tk48.jpg|2003611212_tk48.jpg]]" <em>(meisje word man)</em></li> <li>2 mei 2004 12:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pircjvdk.jpg|Pircjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>2 mei 2004 11:57 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pillsjvdk.jpg|Pillsjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>2 mei 2004 11:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Philijvdk.jpg|Philijvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>2 mei 2004 11:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Petrajvdk.jpg|Petrajvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>2 mei 2004 11:33 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Paulsenjvdk.jpg|Paulsenjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>2 mei 2004 11:28 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pannojvdk.jpg|Pannojvdk.jpg]]" <em>(foto -Dimitri-)</em></li> <li>2 mei 2004 11:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pachjvdk.jpg|Pachjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>2 mei 2004 11:08 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Nimzojvdk.jpg|Nimzojvdk.jpg]]" <em>(peng )</em></li> <li>2 mei 2004 11:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Petrosianjvdk.jpg|Petrosianjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>2 mei 2004 10:57 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Staunjvdk.jpg|Staunjvdk.jpg]]" <em>(postzegel)</em></li> <li>2 mei 2004 10:53 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Rubinjvdk.jpg|Rubinjvdk.jpg]]" <em>(postzegel)</em></li> <li>2 mei 2004 10:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Resjvdk.jpg|Resjvdk.jpg]]" <em>(postzegel)</em></li> <li>2 mei 2004 09:17 [[Gebruiker:MD|MD]] heeft ge-upload: "[[:Afbeelding:Anti-aliasing.jpg|Anti-aliasing.jpg]]" <em>(Voorbeeld van Anti-Aliasing; zelfgemaakt met Fireworks)</em></li> <li>2 mei 2004 09:15 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Vaderabraham.jpg|Vaderabraham.jpg]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law. )</em></li> <li>2 mei 2004 09:14 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Wilmalandkroon.jpg|Wilmalandkroon.jpg]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law. )</em></li> <li>2 mei 2004 08:58 [[Gebruiker:Bart van der Pligt|Bart van der Pligt]] heeft ge-upload: "[[:Afbeelding:Arnoengradje.jpg|Arnoengradje.jpg]]" <em>(This image is copyrighted. Its use is contended to be fair use under United States law.)</em></li> <li>2 mei 2004 07:11 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Constantijn_VII_&_Romanus_I.jpg|Constantijn_VII_&_Romanus_I.jpg]]" <em>(Gestileerde bustes van Constantijn VII en Romanus I. Bron: Classical Numismatic Group, Inc. (CNG))</em></li> <li>2 mei 2004 02:30 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Peace_sign.jpg|Peace_sign.jpg]]" <em>(Zelf getekend vredesteken, ik hoop dat het genoeg lijkt, vervang het anders vooral. GNU FDL)</em></li> <li>1 mei 2004 20:45 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Amfiteatern_i_Pola.jpg|Amfiteatern_i_Pola.jpg]]" <em>(Van sv: wiki Den fjõttrade ankan (20990 bytes) (FrÕn Nordisk familjebok) )</em></li> <li>1 mei 2004 14:40 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:GamalNasser.jpg|GamalNasser.jpg]]" <em>(En: wikipedia)</em></li> <li>1 mei 2004 14:35 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Rubtovajk.jpg|Rubtovajk.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 14:24 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bikova.jpg|Bikova.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 14:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Chiburjk.jpg|Chiburjk.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 14:08 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Egypt_HosniMubarak.01.jpg|Egypt_HosniMubarak.01.jpg]]" <em>(En: wikipedia)</em></li> <li>1 mei 2004 14:07 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Rudenkojk.jpg|Rudenkojk.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 13:42 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Klavecimbel_Pen.png|Klavecimbel_Pen.png]]" <em>(Pen van een klavecimbel; van Wikipedia.en; vertaald door mij &#123;&#123;msg:GFDL}})</em></li> <li>1 mei 2004 13:39 [[Gebruiker:Willemdd|Willemdd]] heeft ge-upload: "[[:Afbeelding:HRvissershaven.jpg|HRvissershaven.jpg]]" <em>(eigen foto, visser Njivice)</em></li> <li>1 mei 2004 13:31 [[Gebruiker:Willemdd|Willemdd]] heeft ge-upload: "[[:Afbeelding:Krk.jpg|Krk.jpg]]" <em>(Van De, kaart Krk)</em></li> <li>1 mei 2004 13:24 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Xiejun.jpg|Xiejun.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 13:22 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Witte_dovenetel_closeup.jpg|Witte_dovenetel_closeup.jpg]]" <em>(zelfgemaakte foto: closeup van de bloemen van de witte dovenetel)</em></li> <li>1 mei 2004 13:12 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Witte_bes_onderstandig_vruchtbeginsel.jpg|Witte_bes_onderstandig_vruchtbeginsel.jpg]]" <em>(zelfgemaakte foto:witte bes met onderstandig vruchtbeginsel)</em></li> <li>1 mei 2004 12:44 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_stuttgart_in_deutschland.png|Karte_stuttgart_in_deutschland.png]]" <em>(duitse wiki: Karte Stuttgart in Deutschland)</em></li> <li>1 mei 2004 12:38 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_frankfurt_am_main_in_deutschland.png|Karte_frankfurt_am_main_in_deutschland.png]]" <em>(duitse wiki: Karte Frankfurt am Main in Deutschland)</em></li> <li>1 mei 2004 12:29 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_trier_in_deutschland.png|Karte_trier_in_deutschland.png]]" <em>(duitse wiki: Karte Trier in Deutschland)</em></li> <li>1 mei 2004 12:25 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_koeln_in_deutschland.png|Karte_koeln_in_deutschland.png]]" <em>(duitse wiki: Karte Köln in Deutschland)</em></li> <li>1 mei 2004 12:12 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_dresden_in_deutschland.png|Karte_dresden_in_deutschland.png]]" <em>(duitse wiki: Karte Dresden in Deutschland)</em></li> <li>1 mei 2004 12:08 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_halle_an_der_saale_in_deutschland.png|Karte_halle_an_der_saale_in_deutschland.png]]" <em>(duitse wiki: Karte Halle an der Saale in Deutschland)</em></li> <li>1 mei 2004 12:06 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_erfurt_in_deutschland.png|Karte_erfurt_in_deutschland.png]]" <em>(duitse wiki: Karte Erfurt in Deutschland)</em></li> <li>1 mei 2004 12:01 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_dortmund_in_deutschland.png|Karte_dortmund_in_deutschland.png]]" <em>(duitse wiki: Karte Dortmund in Deutschland)</em></li> <li>1 mei 2004 11:51 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_berlin_in_deutschland.png|Karte_berlin_in_deutschland.png]]" <em>(duitse wiki: Karte Berlin in Deutschland (deelstaat = stad))</em></li> <li>1 mei 2004 11:47 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_potsdam_in_deutschland.png|Karte_potsdam_in_deutschland.png]]" <em>(duitse wiki: Karte Potsdam in Deutschland)</em></li> <li>1 mei 2004 11:35 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_magdeburg_in_deutschland.png|Karte_magdeburg_in_deutschland.png]]" <em>(duitse wiki: Karte Magdeburg Berlin in Deutschland)</em></li> <li>1 mei 2004 11:30 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_osnabrueck_in_deutschland.png|Karte_osnabrueck_in_deutschland.png]]" <em>(duitse wiki: Karte Osnabrück in Deutschland)</em></li> <li>1 mei 2004 11:24 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_hamburg_in_deutschland.png|Karte_hamburg_in_deutschland.png]]" <em>(duitse wiki: Karte Hamburg in Deutschland)</em></li> <li>1 mei 2004 11:21 [[Gebruiker:Willemdd|Willemdd]] heeft ge-upload: "[[:Afbeelding:CroatiaGradZagreb.png|CroatiaGradZagreb.png]]" <em>(Zagreb)</em></li> <li>1 mei 2004 11:20 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_wismar_in_deutschland.png|Karte_wismar_in_deutschland.png]]" <em>(duitse wiki: Karte Wismar in Deutschland)</em></li> <li>1 mei 2004 11:15 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_hannover_in_deutschland.png|Karte_hannover_in_deutschland.png]]" <em>(duitse wiki: Karte Hannover in Deutschland)</em></li> <li>1 mei 2004 10:56 [[Gebruiker:Willemdd|Willemdd]] heeft ge-upload: "[[:Afbeelding:CroatiaProv.png|CroatiaProv.png]]" <em>(van Wiki En)</em></li> <li>1 mei 2004 10:09 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Borspasjk.jpg|Borspasjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>1 mei 2004 09:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Borisjk.jpg|Borisjk.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 09:21 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Keresjvdk.jpg|Keresjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>1 mei 2004 09:10 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Keresjk.jpg|Keresjk.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 09:06 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Botjvdk.jpg|Botjvdk.jpg]]" <em>(Fritz8 - print)</em></li> <li>1 mei 2004 08:53 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Botwinnikjk.jpg|Botwinnikjk.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 08:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Croatia-Dalmatia.png|Croatia-Dalmatia.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Croatia with Dalmatia highlighted &#91;&#91;en:Image:Croatia-Dalmatia.png]])</em></li> <li>1 mei 2004 08:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Large_Dallas_Landsat.jpg|Large_Dallas_Landsat.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Large Landsat of Dallas A simulated-color satellite image of Dallas and Fort Worth, Texas, taken by &#91;&#91;NASA]]&#39;s &#91;&#91;Landsat 7]] satellite. Dallas makes up the right half of the urbanized area. &#123;&#123;msg:unverified}} &#91;&#91;en:Image:Large Dallas Landsat.jpg]])</em></li> <li>1 mei 2004 08:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Us-tx-da.png|Us-tx-da.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Dallas, Texas Flag. Image made by Blas Delgado. Image from http&#58;//fotw.vexillum.com/flags/us-tx-da.html &#91;&#91;en:Image:Us-tx-da.png]])</em></li> <li>1 mei 2004 08:41 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dallas6.jpg|Dallas6.jpg]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Dallas6.jpg]])</em></li> <li>1 mei 2004 08:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dalai_Lama1.jpg|Dalai_Lama1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Der Dalai Lama &#91;&#91;de:Bild:Dalai Lama1.jpg]])</em></li> <li>1 mei 2004 08:31 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Petrosianjk.jpg|Petrosianjk.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 08:25 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Nimzojk.jpg|Nimzojk.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 08:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Nimzo2jvk.jpg|Nimzo2jvk.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 08:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Rapsfeld.jpg|Rapsfeld.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Blühendes Rapsfeld *Fotograf: Walter J. Pilsak, Waldsassen *Copyright Status: **&#91;&#91;GNU Freie Dokumentationslizenz]] &#91;&#91;de:Bild:Rapsfeld.jpg]])</em></li> <li>1 mei 2004 08:15 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Raps.jpg|Raps.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Photo taken by the Swedish minitry of agriculture &#91;&#91;en:Image:raps.jpg]])</em></li> <li>1 mei 2004 07:59 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Clovis.jpg|Clovis.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: &#61;= Description == Baptême de Clovis Ier Photo d&#39;un extrait de la peinture, &#39;&#39;Le baptême de Clovis&#39;&#39;, du peintre français Saint-Gilles, actuellement au National Gallery of Art, Washington (http&#58;//www.kfki.hu/~arthp/html/m/master/stgilles/). &#91;&#91;Utilisateur:Yann&#124;Yann]] 26 jul 2003 à 22:01 (CEST) &#61;= Source == * http&#58;//www.kfki.hu/~arthp/html/m/master/stgilles/ &#61;= Licence == &#91;&#91;Fair use]] pour illustrer l&#39;article sur &#91;&#91;Clovis Ier]] &#91;&#91;fr:Image:Clovis.jpg]])</em></li> <li>1 mei 2004 07:59 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Laskerjk.jpg|Laskerjk.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 07:57 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CLOVISRoydeFrance.JPG|CLOVISRoydeFrance.JPG]]" <em>(Vanaf Engelse wikpeida &#91;&#91;en:Image:CLOVISRoydeFrance.JPG]])</em></li> <li>1 mei 2004 07:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Smyslovjk.jpg|Smyslovjk.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 07:37 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Menchikjk.jpg|Menchikjk.jpg]]" <em>(postzegel)</em></li> <li>1 mei 2004 00:17 [[Gebruiker:Branko|Branko]] heeft ge-upload: "[[:Afbeelding:Hennepplanten.jpg|Hennepplanten.jpg]]" <em>(Om GIF-versie te vervangen.)</em></li> <li>1 mei 2004 00:14 [[Gebruiker:Branko|Branko]] heeft ge-upload: "[[:Afbeelding:Marihuanaproducten.jpg|Marihuanaproducten.jpg]]" <em>(Om GIF-versie te vervangen)</em></li> <li>30 apr 2004 23:54 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Cyclotron.png|Cyclotron.png]]" <em>(Schematische weergave van een cyclotron; overgenomen van Wikipedia.de; vertaald door mij &#123;&#123;msg:GFDL}})</em></li> <li>30 apr 2004 23:08 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Karte_luebeck_in_deutschland.png|Karte_luebeck_in_deutschland.png]]" <em>(duitse wiki: Karte Lübeck in Deutschland)</em></li> <li>30 apr 2004 22:52 [[Gebruiker:James|James]] heeft ge-upload: "[[:Afbeelding:Jubilee_Line_train_stopped_at_Canary_Wharf_underground_station_-_London_-_240404.jpg|Jubilee_Line_train_stopped_at_Canary_Wharf_underground_station_-_London_-_240404.jpg]]" <em>(Deze afbeelding is gevonden op de Engelstalige pagina over de Jubilee Line, te vinden op http&#58;//en.wikipedia.org/wiki/Jubilee_Line)</em></li> <li>30 apr 2004 22:51 [[Gebruiker:James|James]] heeft ge-upload: "[[:Afbeelding:Jubilee_Line_train_rushes_through_Canary_Wharf_underground_station_-_London_-_240404.jpg|Jubilee_Line_train_rushes_through_Canary_Wharf_underground_station_-_London_-_240404.jpg]]" <em>(Deze afbeelding is gevonden op de Engelstalige pagina over de Jubilee Line, te vinden op http&#58;//en.wikipedia.org/wiki/Jubilee_Line)</em></li> <li>30 apr 2004 22:33 [[Gebruiker:Amarant|Amarant]] heeft ge-upload: "[[:Afbeelding:Canadese_kano_2.jpg|Canadese_kano_2.jpg]]" <em>(eigen opname Gebruiker Amarant . Foto vrij onder de GNU/FDL)</em></li> <li>30 apr 2004 22:33 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Lorenzo_de_Medici.jpg|Lorenzo_de_Medici.jpg]]" <em>(van zweedse pagina: Legend: (nuvarande) = detta är den nuvarande bilden, (ta bort) = ta bort den gamla version, (Ã¥tergÃ¥) = Ã¥tergÃ¥ till en gammal version. )</em></li> <li>30 apr 2004 22:14 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:LuebeckHolstentor.jpg|LuebeckHolstentor.jpg]]" <em>(Lubeck Holstentor stadspoort, Duitse wiki)</em></li> <li>30 apr 2004 22:14 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Tor.jpg|Tor.jpg]]" <em>(wat aangepast)</em></li> <li>30 apr 2004 21:02 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Ljubljana_parliament.jpg|Ljubljana_parliament.jpg]]" <em>(Van en: wiki Matthewmayer (13244 bytes) (reupload) Ljubljana parliament, photo taken by me. )</em></li> <li>30 apr 2004 20:59 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Lachgas.png|Lachgas.png]]" <em>(Van de: wiki Beschreibung: Strukturformel Lachgas N2O Quelle: ChemSketch Fotograf oder Zeichner: MarkusZi Andere Versionen: - Lizenzstatus: GNU FDL)</em></li> <li>30 apr 2004 20:56 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Crusade_damietta.JPG|Crusade_damietta.JPG]]" <em>(Van en: wiki Isis (31068 bytes) (louis ix of france leading the crusaders against damietta, egypt) )</em></li> <li>30 apr 2004 20:55 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Cross.png|Cross.png]]" <em>(Van en: wiki Nixdorf (5415 bytes) (A better &#91;&#91;cross]] illustration) A cross image. )</em></li> <li>30 apr 2004 20:53 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:UkraineCrimea.png|UkraineCrimea.png]]" <em>(Van en: wiki GNU FDL Morwen (17344 bytes) )</em></li> <li>30 apr 2004 20:52 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Vuurtoren_Urk.jpg|Vuurtoren_Urk.jpg]]" <em>(groter formaat)</em></li> <li>30 apr 2004 20:51 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Urk.jpg|Urk.jpg]]" <em>(Urk (andere foto en groter), eigen foto, &#123;&#123;msg:PD}})</em></li> <li>30 apr 2004 20:50 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Dampfma_kl.jpg|Dampfma_kl.jpg]]" <em>(Van de: wiki Ulrich.fuchs (39715 Byte) (Watt&#39;sche Niederdruck-Dampfmaschine (klein) aus dem alten Meyers-Lexikon) )</em></li> <li>30 apr 2004 20:48 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Tor.jpg|Tor.jpg]]" <em>(Van pl: wiki . Tsca (23520 bajt&amp;#9500;&amp;#9474;w) (tor kolejowy) Zdj&amp;#9472;&amp;#214;cie przedstawia tor kolejowy &amp;#9516;&amp;#174; 2003 by Tomasz Sienicki tsca#sdf.lonestar.org Licencja: GNU Free Documentation License -tsca 01:00, 25 lut 2004 (CET) )</em></li> <li>30 apr 2004 20:46 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Sleipner.jpg|Sleipner.jpg]]" <em>(Van da: stub-wiki Malene (33014 bytes) (Foto af Sleipner pÕ en Gotlandsk runesten))</em></li> <li>30 apr 2004 20:44 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Scorpius_constellation_map_small.png|Scorpius_constellation_map_small.png]]" <em>(Van ja: wiki Modeha (32032 &amp;#210;&amp;#226;&amp;#201;&amp;#210;&amp;#233;&amp;#241;&amp;#210;&amp;#226;&amp;#234;) (&amp;#210;&amp;#252;&amp;#242;&amp;#210;&amp;#252;&amp;#216;&amp;#210;&amp;#233;&amp;#232;&amp;#213;&amp;#9553;&amp;#186;&amp;#180;&amp;#9565;&amp;#234;&amp;#213;&amp;#9617;&amp;#197;&amp;#180;&amp;#9565;&amp;#235;&amp;#210;&amp;#199;&amp;#233;&amp;#222;&amp;#239;&amp;#9618;&amp;#222;&amp;#172;&amp;#215;&amp;#254;&amp;#235;&amp;#234;&amp;#210;&amp;#233;&amp;#234;&amp;#210;&amp;#233;&amp;#232;) )</em></li> <li>30 apr 2004 20:42 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Satyr_replica_small.jpg|Satyr_replica_small.jpg]]" <em>(Van en: wiki Jk (7111 bytes) (Replica of some Satyr statue) Cheap replica of some Satyr statue, about 10 cm in height, probably from some trashy Greek souvenir store, photographed on my window sill. )</em></li> <li>30 apr 2004 20:40 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:LocationVietnamHoChiMinh.png|LocationVietnamHoChiMinh.png]]" <em>(Van vi: wiki Mxn (33496 bytes) (Location map for Vietnam&#39;s Ho Chi Minh City muncipality; transferred from en:) Location map for Vietnam&#39;s Ho Chi Minh City muncipality. Originally uploaded to en: by en:User:Vardion (also at vi:); transferred by Minh Nguy&amp;#223;&amp;#9559;&amp;#224;n (talk, blog). )</em></li> <li>30 apr 2004 20:33 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Latin_alphabet_Nn.png|Latin_alphabet_Nn.png]]" <em>(Van en: wiki Nate Silva (1946 bytes) (Latin alphabet Nn in Helvetica 55 and Times LT Regular))</em></li> <li>30 apr 2004 20:30 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Homeo_taza.png|Homeo_taza.png]]" <em>(Van es: wiki Moriel (27098 bytes) (copiado de EL para el articulo TopologÃa) )</em></li> <li>30 apr 2004 20:06 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Vuurtoren_Urk.jpg|Vuurtoren_Urk.jpg]]" <em>(De vuurtoren van Urk, eigen foto &#123;&#123;msg:PD}})</em></li> <li>30 apr 2004 20:04 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Urk.jpg|Urk.jpg]]" <em>(op Urk, eigen foto &#123;&#123;msg:PD}})</em></li> <li>30 apr 2004 19:59 [[Gebruiker:Denkertje|Denkertje]] heeft ge-upload: "[[:Afbeelding:Dome_ofthe_rock_small.jpg|Dome_ofthe_rock_small.jpg]]" <em>(Rotskoepel Jeruzalem, afkomstig van Wikipedia EN)</em></li> <li>30 apr 2004 14:33 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Constable.cornfield.jpg|Constable.cornfield.jpg]]" <em>(John Constable, “The Cornfieldâ€, painted 1826. Size: 56 by 48 inches (143 by 122 cm). National Gallery, London (UK). )</em></li> <li>30 apr 2004 13:44 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Berenike_II.jpg|Berenike_II.jpg]]" <em>(Portret van Berenice II. Bron: Classical Numismatic Group, Inc. (CNG))</em></li> <li>30 apr 2004 13:29 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Smysjk.jpg|Smysjk.jpg]]" <em>(postzegel)</em></li> <li>30 apr 2004 13:24 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Andersjk.jpg|Andersjk.jpg]]" <em>(postzegel)</em></li> <li>30 apr 2004 13:16 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Spinozahuisje_Rijnsburg.jpg|Spinozahuisje_Rijnsburg.jpg]]" <em>(Spinozahuisje, Spinozalaan, Rijnsburg. Foto genomen op 17 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 13:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Botjk.jpg|Botjk.jpg]]" <em>(postzegel)</em></li> <li>30 apr 2004 13:12 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Aljechin.jpg|Aljechin.jpg]]" <em>(postzegel)</em></li> <li>30 apr 2004 13:10 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Vroenhof_Warmond.jpg|Vroenhof_Warmond.jpg]]" <em>(Vroenhof, Herenweg, Warmond. Foto genomen op 17 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 13:10 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Ptolemaeus_III.jpg|Ptolemaeus_III.jpg]]" <em>(Portret van Ptolemeüs III Euergetes I. Bron: Classical Numismatic Group, Inc. (CNG))</em></li> <li>30 apr 2004 13:07 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Huis_te_Warmond.jpg|Huis_te_Warmond.jpg]]" <em>(Huis te Warmond, Herenweg, Warmond. Ten tijde van de foto was het gebouw eigendom van de gelijknamige stichting en bewoond door particulieren. Foto genomen op 17 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 13:06 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Aljechin.jpg|Aljechin.jpg]]" <em>(postzegel)</em></li> <li>30 apr 2004 13:02 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Oud_Poelgeest_Oegstgeest.jpg|Oud_Poelgeest_Oegstgeest.jpg]]" <em>(Oud Poelgeest, Laan van Oud Poelgeest, Oegstgeest. Foto genomen op 17 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 13:00 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Najdorfjk.jpg|Najdorfjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>30 apr 2004 12:52 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Morphyjk.jpg|Morphyjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>30 apr 2004 12:48 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Milesjk.jpg|Milesjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>30 apr 2004 12:45 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Mikenas.jpg|Mikenas.jpg]]" <em>(Fritz8 - print)</em></li> <li>30 apr 2004 12:39 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Miesesjk.jpg|Miesesjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>30 apr 2004 12:36 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Ptolemaeus_IV.jpg|Ptolemaeus_IV.jpg]]" <em>(Portret van Ptolemeüs IV Philopator. Bron: Classical Numismatic Group, Inc. (CNG))</em></li> <li>30 apr 2004 12:35 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Cuneratoren_Rhenen.jpg|Cuneratoren_Rhenen.jpg]]" <em>(Cuneratoren, Rhenen. Foto genomen op 11 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 12:33 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Erebegraafplaats_Rhenen.jpg|Erebegraafplaats_Rhenen.jpg]]" <em>(Militaire erebegraafplaats op de Grebbeberg, Grebbeweg 123 in Rhenen. Foto genomen op 11 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 12:31 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Marshalljk.jpg|Marshalljk.jpg]]" <em>(Fritz8 - print)</em></li> <li>30 apr 2004 12:28 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Raadhuis_Maarn.jpg|Raadhuis_Maarn.jpg]]" <em>(Raadhuis, Raadhuisplein 1, Maarn. Foto genomen op 11 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 12:24 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Marocjk.jpg|Marocjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>30 apr 2004 12:23 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Sparrendaal_Driebergen.jpg|Sparrendaal_Driebergen.jpg]]" <em>(Sparrendaal, Hoofdstraat 87-91, Driebergen. Foto genomen op 11 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 12:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gufeld.jpg|Gufeld.jpg]]" <em>(Fritz8 - print)</em></li> <li>30 apr 2004 12:06 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Kern_splijting.png|Kern_splijting.png]]" <em>(Splijtingsreactie van uraan-235; overgenomen van Wikipedia.en door Evanherk; vertaald door mij)</em></li> <li>30 apr 2004 11:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Capajk.jpg|Capajk.jpg]]" <em>(postzegel)</em></li> <li>30 apr 2004 09:32 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gufeldweb.jpg|Gufeldweb.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>30 apr 2004 09:28 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Bernagie-bloem-kl.jpg|Bernagie-bloem-kl.jpg]]" <em>(eigen foto 27-04-2004, uit de serie eigen tuin, hierbij toestemming publicatie onder gnu/fdl)</em></li> <li>30 apr 2004 09:28 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Bernagie-bloem-hr.jpg|Bernagie-bloem-hr.jpg]]" <em>(eigen foto 27-04-2004, uit de serie eigen tuin, hierbij toestemming publicatie onder gnu/fdl)</em></li> <li>30 apr 2004 09:26 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Bernagie-overz-kl.jpg|Bernagie-overz-kl.jpg]]" <em>(eigen foto 27-04-2004, uit de serie eigen tuin, hierbij toestemming publicatie onder gnu/fdl)</em></li> <li>30 apr 2004 09:26 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Bernagie-bloem-kl.JPG|Bernagie-bloem-kl.JPG]]" <em>(eigen foto 27-04-2004, uit de serie eigen tuin, hierbij toestemming publicatie onder gnu/fdl)</em></li> <li>30 apr 2004 09:22 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:1942Jeep.jpg|1942Jeep.jpg]]" <em>(En: wikipedia)</em></li> <li>30 apr 2004 09:12 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Quarry8093.JPG|Quarry8093.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Quarry: Coquina, SC Image taken by me, released under GFDL &#91;&#91;User:Pollinator&#124;Pollinator]] 05:40, 21 Mar 2004 (UTC) (&#123;&#123;msg:GFDL}}) &#91;&#91;en:Image:Quarry8093.JPG]])</em></li> <li>30 apr 2004 09:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bernini-a-d.jpg|Bernini-a-d.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Apollo and Daphne by Bernini &#91;&#91;en:Image:bernini-a-d.jpg]])</em></li> <li>30 apr 2004 09:02 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:IcarusandDaedalus.jpg|IcarusandDaedalus.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Icarus and Daedalus, Oil on canvas, 19th century painting by Charles-Paul Landon &#91;&#91;en:Image:IcarusandDaedalus.jpg]])</em></li> <li>30 apr 2004 08:52 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Dattelpalme.jpg|Dattelpalme.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Date Palm, Sinai, Egypt 2003 &#123;&#123;msg:Unverified}} &#91;&#91;en:Image:Dattelpalme.jpg]])</em></li> <li>30 apr 2004 08:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Fingerprintonpaper.jpg|Fingerprintonpaper.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A &#91;&#91;fingerprint]] on paper. Done with a &#91;&#91;felt-tip pin]] and scanned, so the quality isn&#39;t very good. Released under &#91;&#91;GFDL]]. &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:fingerprintonpaper.jpg]])</em></li> <li>30 apr 2004 08:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Fingerprintonfinger.JPG|Fingerprintonfinger.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A &#91;&#91;fingerprint]] on a &#91;&#91;finger]]. Hopefully this doesn&#39;t cause me too much trouble if i fly to the US again! Released under &#91;&#91;GFDL]]. &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:fingerprintonfinger.JPG]])</em></li> <li>30 apr 2004 08:19 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Ptolemaeus_VI.jpg|Ptolemaeus_VI.jpg]]" <em>(Portret van Ptolemeüs VI. Bron: Classical Numismatic Group, Inc. (CNG))</em></li> <li>30 apr 2004 08:17 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:LawrenceCyclotronDees.jpg|LawrenceCyclotronDees.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Cyclotron Dees at Lawrence Hall of Science. Copyleft by the photographer (Wiki ID: Leonard G.) &#91;&#91;en:Image:LawrenceCyclotronDees.jpg]])</em></li> <li>30 apr 2004 08:15 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:LawrenceCyclotronMagnet.jpg|LawrenceCyclotronMagnet.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Cyclotron Magnet at Lawrence Hall of Science Copyleft by the photographer (Wiki ID: Leonard G.) &#91;&#91;en:Image:LawrenceCyclotronMagnet.jpg]])</em></li> <li>30 apr 2004 08:10 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Polgar.jpg|Polgar.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>30 apr 2004 08:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:GreeceCyclades.png|GreeceCyclades.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: map &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:GreeceCyclades.png]])</em></li> <li>30 apr 2004 07:57 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:50Cent.jpg|50Cent.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: publicity photo from official site, upped as fair use &#91;&#91;en:Image:50Cent.jpg]])</em></li> <li>30 apr 2004 07:43 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Ptolemaeus_V.jpg|Ptolemaeus_V.jpg]]" <em>(Portret van Ptolemeus V. Foto met permissie Classical Numismatic Group, Inc. (CNG))</em></li> <li>30 apr 2004 07:28 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Stikmatjk.jpg|Stikmatjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>30 apr 2004 07:28 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Sparrenheuvel_Zeist.jpg|Sparrenheuvel_Zeist.jpg]]" <em>(Sparrenheuvel, Driebergseweg 3, Zeist. Foto genomen op 11 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 07:25 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:De_Brink_Zeist.jpg|De_Brink_Zeist.jpg]]" <em>(De Brink, Utrechtseweg 82, Zeist. Ten tijde van de foto werd het gebouw gebruikt als kantoor door Bakkenist en Emmens NV. Foto genomen op 11 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 07:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ghbrundtland.jpg|Ghbrundtland.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Gro Harlem Brundtland &#91;&#91;en:Image:Ghbrundtland.jpg]])</em></li> <li>30 apr 2004 07:21 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Achterzijde_Slot_Zeist.jpg|Achterzijde_Slot_Zeist.jpg]]" <em>(Achterzijde Slot Zeist, Zinzendorflaan 1, Zeist. Foto genomen op 11 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 07:18 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Raadhuis_Zeist.jpg|Raadhuis_Zeist.jpg]]" <em>(Gemeentehuis, Het Rond 1, Zeist. Foto genomen op 11 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 07:12 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Voormalig_Raadhuis_Bunnik.jpg|Voormalig_Raadhuis_Bunnik.jpg]]" <em>(Voormalig raadhuis, Langstraat 2, Bunnik. Ten tijde van de foto was dit in gebruik als kantoor. Uiterst links de Hervormde kerk. Foto genomen op 11 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 07:09 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Oud_Amelisweerd_Bunnik.jpg|Oud_Amelisweerd_Bunnik.jpg]]" <em>(Oud Amelisweerd, Koningslaan 9, Bunnik. Op de voorgrond de Kromme Rijn. Foto genomen op 11 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 07:06 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:De_Beesde_Bunnik.jpg|De_Beesde_Bunnik.jpg]]" <em>(De Beesde of &quot;Cammingha&quot;, Camminghalaan 36, Bunnik. Op de voorgrond de Kromme Rijn. Foto genomen op 11 april 2004 en geupload door maker.)</em></li> <li>30 apr 2004 05:54 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Sathya_Sai_Organisation_official_logo.jpg|Sathya_Sai_Organisation_official_logo.jpg]]" <em>(En: wikipedia)</em></li> <li>29 apr 2004 22:30 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Amiga.computer.750pix.jpg|Amiga.computer.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: From its launch in 1987, marketed as a games machine, the Amiga A500 was an amazing success for Commodore, reviving the ailing sales of its hardware. It was equipped with a 7.14MHz Motorola 68000 processor.&lt;br&gt; At the time, it was the only domestically-priced machine capable of displaying up to 4,096 colours on a display simultaneously, and was also capable of managing a 8-bit 4-track audio output at 22KHz.&lt;br&gt; Photographed by Adrian Pingstone in England in 1988 and released to the public domain. &#91;&#91;en:Image:amiga.computer.750pix.jpg]])</em></li> <li>29 apr 2004 21:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:SkyAltocumulusClouds.jpg|SkyAltocumulusClouds.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Altocumulus clouds&lt;br&gt;&lt;br&gt;http&#58;//geekphilosopher.com/MainPage/bkgAbout.htm&lt;br&gt;&lt;br&gt;&#123;&#123;msg:PD}} &#91;&#91;en:Image:skyAltocumulusClouds.jpg]])</em></li> <li>29 apr 2004 21:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Altocumulus_clouds_large.jpg|Altocumulus_clouds_large.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Larger altocumulus cloud image, taken by &#91;&#91;User:Ex1le&#124;Ex1le]]. &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:Altocumulus clouds large.jpg]])</em></li> <li>29 apr 2004 21:26 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Braque.woman.400pix.jpg|Braque.woman.400pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Braque: Woman with a guitar, painted 1913, in the Mus&amp;eacute;e Nationale d&amp;#8217;Art Moderne, Centre Georges Pompidou, Paris, France. Oil and charcoal on canvas, 51 by 29 inches (130 by 73 cms).&lt;br&gt; Source: http&#58;//artchive.com/ftp_site.htm &lt;br&gt; Picture prepared for Wikipedia by Adrian Pingstone in April 2003. &#91;&#91;en:Image:braque.woman.400pix.jpg]])</em></li> <li>29 apr 2004 21:20 [[Gebruiker:Marga|Marga]] heeft ge-upload: "[[:Afbeelding:Kea.jpg|Kea.jpg]]" <em>(zelfgemaakte foto)</em></li> <li>29 apr 2004 21:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CricketWicket.jpg|CricketWicket.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Cricket Wicket &#91;&#91;de:Bild:CricketWicket.jpg]])</em></li> <li>29 apr 2004 21:09 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CricketBall.jpg|CricketBall.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Cricket Ball &#91;&#91;de:Bild:CricketBall.jpg]])</em></li> <li>29 apr 2004 21:08 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CricketBat.jpg|CricketBat.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Cricket Bat &#91;&#91;de:Bild:CricketBat.jpg]])</em></li> <li>29 apr 2004 21:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CricketField.JPG|CricketField.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Cricket Field &#91;&#91;de:Bild:CricketField.JPG]])</em></li> <li>29 apr 2004 21:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:IndiaBowling.jpg|IndiaBowling.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: India Bowling &#91;&#91;de:Bild:IndiaBowling.jpg]])</em></li> <li>29 apr 2004 21:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:EngBatsman.jpg|EngBatsman.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Englische Batsman &#91;&#91;de:Bild:EngBatsman.jpg]])</em></li> <li>29 apr 2004 21:05 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:EngAus.jpg|EngAus.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: EngAus &#91;&#91;de:Bild:EngAus.jpg]])</em></li> <li>29 apr 2004 20:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cowboy.jpg|Cowboy.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Cowboy circa 1887 Free Public Domain Image from http&#58;//www.pdimages.com/web6.htm &#91;&#91;en:Image:Cowboy.jpg]])</em></li> <li>29 apr 2004 20:35 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Qantas.a330-201.vh-eba.250pix.jpg|Qantas.a330-201.vh-eba.250pix.jpg]]" <em>(Een tekening van kuifje met de Qantas naam (ter verwijdering))</em></li> <li>29 apr 2004 20:33 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Ptolemaeus_II&Arsinoë.jpg|Ptolemaeus_II&Arsinoë.jpg]]" <em>(Ptolemaeus II &amp; Arsinoë. Met permissie Classical Numismatic Group, Inc. (CNG))</em></li> <li>29 apr 2004 20:29 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:PtolemaeusII&Arsinoë.jpg|PtolemaeusII&Arsinoë.jpg]]" <em>(Ptolemaeus II &amp; Arsinoë. Met permissie Classical Numismatic Group, Inc. (CNG))</em></li> <li>29 apr 2004 20:27 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Ptolemaeus_I&Berenike_I.jpg|Ptolemaeus_I&Berenike_I.jpg]]" <em>(Ptolemaeus I &amp; Berenike I. Met permissie Classical Numismatic Group, Inc. (CNG))</em></li> <li>29 apr 2004 20:23 [[Gebruiker:Diederik|Diederik]] heeft ge-upload: "[[:Afbeelding:Sophie.jpg|Sophie.jpg]]" <em>(Foto sophie)</em></li> <li>29 apr 2004 19:14 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Meidoornbloesem.jpg|Meidoornbloesem.jpg]]" <em>(zelfgemaakte foto van eenstijlige meidoorn meind april)</em></li> <li>29 apr 2004 19:11 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Meidoornstruik.jpg|Meidoornstruik.jpg]]" <em>(zelfgemaakte foto van meidoornstruik eind april)</em></li> <li>29 apr 2004 19:02 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Gemeentehuis_Breukelen.jpg|Gemeentehuis_Breukelen.jpg]]" <em>(Hoofdgebouw (&quot;Boom en Bosch&quot;) van het gemeentehuis van Breukelen, Markt 13. Foto genomen op 6 maart 2004 en geupload door maker.)</em></li> <li>29 apr 2004 18:59 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Gunterstein_Breukelen.jpg|Gunterstein_Breukelen.jpg]]" <em>(Gunterstein, Zandpad 48, Breukelen. Foto genomen op 6 maart 2004 en geupload door maker.)</em></li> <li>29 apr 2004 18:58 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Pierre_de_Fermat.jpg|Pierre_de_Fermat.jpg]]" <em>(En: wikipedia)</em></li> <li>29 apr 2004 18:57 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Nijenrode.jpg|Nijenrode.jpg]]" <em>(Kasteel Nijenrode, Straatweg 25, Breukelen. Ten tijde van de foto was hier Universiteit Nyenrode (The Netherlands Business School) gevestigd. Foto genomen op 6 maart 2004 en geupload door maker.)</em></li> <li>29 apr 2004 18:53 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Poortgebouw_Nijenrode.jpg|Poortgebouw_Nijenrode.jpg]]" <em>(Poortgebouw van kasteel Nijenrode, Straatweg 25, Breukelen. Foto genomen op 6 maart 2004 en geupload door maker.)</em></li> <li>29 apr 2004 18:51 [[Gebruiker:Wolk|Wolk]] heeft ge-upload: "[[:Afbeelding:Gemeentehuis_Abcoude.jpg|Gemeentehuis_Abcoude.jpg]]" <em>(Gemeentehuis annex politiebureau Abcoude, Raadhuisplein 3. Foto genomen op 6 maart 2004 en geupload door maker.)</em></li> <li>29 apr 2004 17:53 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Vulpecula_constellation_map_small.png|Vulpecula_constellation_map_small.png]]" <em>(Van ja: wiki Modeha (23994 &amp;#210;&amp;#226;&amp;#201;&amp;#210;&amp;#233;&amp;#241;&amp;#210;&amp;#226;&amp;#234;) (&amp;#210;&amp;#252;&amp;#244;&amp;#210;&amp;#252;&amp;#196;&amp;#210;&amp;#252;&amp;#241;&amp;#210;&amp;#252;&amp;#161;&amp;#213;&amp;#9553;&amp;#186;&amp;#180;&amp;#9565;&amp;#234;&amp;#213;&amp;#9617;&amp;#197;&amp;#180;&amp;#9565;&amp;#235;&amp;#210;&amp;#199;&amp;#233;&amp;#222;&amp;#239;&amp;#9618;&amp;#222;&amp;#172;&amp;#215;&amp;#254;&amp;#235;&amp;#234;&amp;#210;&amp;#233;&amp;#234;&amp;#210;&amp;#233;&amp;#232;) )</em></li> <li>29 apr 2004 17:52 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Babyloniskt_tempeltorn.jpg|Babyloniskt_tempeltorn.jpg]]" <em>(Van sv: Den fjõttrade ankan (31024 bytes) (FrÕn Nordisk familjebok) )</em></li> <li>29 apr 2004 17:49 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Tongtester.jpg|Tongtester.jpg]]" <em>(Van en: wiki This is an original photograph by Andrew Alder, taken on 11 November 2003. Permission is granted to copy, distribute and/or modify under the GFDL, version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts.)</em></li> <li>29 apr 2004 17:47 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:S100e59581.jpg|S100e59581.jpg]]" <em>(Van pl: wiki (bie&amp;#9532;&amp;#9565;) 13:30, 22 lis 2002 . . (Automated conversion) (25082 bajt&amp;#9500;&amp;#9474;w) (Nie ma jeszcze artyku&amp;#9532;&amp;#233;u o tym tytule. Wybierz Edytuj by go rozpocz&amp;#9472;&amp;#224;&amp;#9472;&amp;#231;.) )</em></li> <li>29 apr 2004 17:44 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Rosas.png|Rosas.png]]" <em>(Van en: wiki Muriel Gottrop (42561 bytes) (Simplified family tree of the Wars of the Roses )</em></li> <li>29 apr 2004 17:42 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Ruderausbildung.jpg|Ruderausbildung.jpg]]" <em>(Van de: wiki JeLuF (11978 Byte) (Ruderausbildung im Skiff.) )</em></li> <li>29 apr 2004 17:40 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Gemeine_Kiefer.jpg|Gemeine_Kiefer.jpg]]" <em>(Van de: wiki Aglarech (27166 Byte) (Gemeine Kiefer) )</em></li> <li>29 apr 2004 17:39 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Peyote2.jpg|Peyote2.jpg]]" <em>(Van de: wiki Head (16170 Byte) (Peyotl) Quelle: http&#58;//www.drugs.indiana.edu/prevention/iprcpics.html )</em></li> <li>29 apr 2004 17:37 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Palestine_flag_medium.png|Palestine_flag_medium.png]]" <em>(Van ja: wiki . Oxhop (396 &amp;#210;&amp;#226;&amp;#201;&amp;#210;&amp;#233;&amp;#241;&amp;#210;&amp;#226;&amp;#234;) (&amp;#210;&amp;#226;&amp;#230;&amp;#210;&amp;#226;&amp;#188;&amp;#210;&amp;#233;&amp;#9571;&amp;#210;&amp;#226;&amp;#252;&amp;#210;&amp;#226;&amp;#232;&amp;#210;&amp;#252;&amp;#171;&amp;#181;&amp;#249;&amp;#249; - &amp;#181;&amp;#239;&amp;#214;&amp;#245;&amp;#162;&amp;#163;) )</em></li> <li>29 apr 2004 17:36 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Masada01-400.jpg|Masada01-400.jpg]]" <em>(Van en: wiki Eloquence (419671 bytes) (Dovecote at Masada, was grotere versie, (FDL-licensed; &#91;http&#58;//eli-nati.com Elizabeth Thomas], eli at eli-nati dot com, December 2002)) GNU FDL)</em></li> <li>29 apr 2004 17:33 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Agris.png|Agris.png]]" <em>(Van fr: wiki Fphilibert (45990 octets) (Casque celte d&#39;Agris, en Charente (IIe &amp;#9500;&amp;#243;ge du fer)) Description: Casque celte d&#39;apparat en fer, bronze, or, argent et corail. IVe si&amp;#9500;&amp;#191;cle avant notre &amp;#9500;&amp;#191;re. D&amp;#9500;&amp;#174;couvert &amp;#9500;&amp;#225; Agris, en Charente et conserv&amp;#9500;&amp;#174; au mus&amp;#9500;&amp;#174;e d&#39;Angoul&amp;#9500;&amp;#172;me (IIe &amp;#9500;&amp;#243;ge du fer) Origine: Photocomposition r&amp;#9500;&amp;#174;alis&amp;#9500;&amp;#174;e avec the Gimp License: Cette image est plac&amp;#9500;&amp;#174;e sous licence GNU FDL )</em></li> <li>29 apr 2004 17:31 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Kar_map2.jpg|Kar_map2.jpg]]" <em>(Van en: wiki Lalakis? (20460 bytes) (Map of Karpathos and Kassos))</em></li> <li>29 apr 2004 17:28 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Joburg.iss.400pix.jpg|Joburg.iss.400pix.jpg]]" <em>(Van en: wiki Arpingstone (52062 bytes) (Johannesburg from the ISS) )</em></li> <li>29 apr 2004 17:26 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Jabber.JPG|Jabber.JPG]]" <em>(Van en: wiki YaronSh? (3903 bytes) (The Jabber Logo) )</em></li> <li>29 apr 2004 17:24 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Habsbourg_Flag.png|Habsbourg_Flag.png]]" <em>(Van en: wiki via fr: wiki Cham (2135 octets) (http&#58;//en.wikipedia.org/upload/1/1c/Habsburg_Flag.png) )</em></li> <li>29 apr 2004 17:23 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:VitamineB9.png|VitamineB9.png]]" <em>(Van fr: wiki Yohan (6375 octets) (Structure de la vitamine B9) Source : Cr&amp;#9500;&amp;#174;e avec MarvinSketch Licence : GFLD )</em></li> <li>29 apr 2004 17:21 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Faust2.gif|Faust2.gif]]" <em>(Van pl: wiki Niki K (14311 bajt&amp;#9500;&amp;#9474;w) (Faust i Mefisto) )</em></li> <li>29 apr 2004 17:20 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Estonia_flag_medium.png|Estonia_flag_medium.png]]" <em>(Van en: wiki . Scipius (410 bytes) (Medium flag of Estonia) Image originally derived from the public domain flags of the CIA World Factbook. Als iemand een toepasselijkere afbeelding voor de taal heeft, graag vervangen/aanvullen)</em></li> <li>29 apr 2004 17:18 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:GreeceDodecanese.png|GreeceDodecanese.png]]" <em>(Van en: wiki 23:14, 8 Feb 2004 . . Morwen (28507 bytes) (map) GNU FDL)</em></li> <li>29 apr 2004 17:17 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Dill.jpg|Dill.jpg]]" <em>(Van en: wiki Dmsar (57886 bytes) (Dill plant) )</em></li> <li>29 apr 2004 17:15 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Bjerg_i_alaska.jpg|Bjerg_i_alaska.jpg]]" <em>(Van da: stub-wiki Glenn (99885 bytes) (Public domain billede fra &#91;http&#58;//images.fws.gov/default.cfm?fuseaction=records.display&amp;CFID=3964099&amp;CFTOKEN=30434891&amp;id=U.S. Fish and Wildlife Service: Becharof National Wildlife Refuge,Alaska].) Public domain billede fra U.S. Fish and Wildlife Service: Becharof National Wildlife Refuge,Alaska)</em></li> <li>29 apr 2004 17:13 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Antiferro.png|Antiferro.png]]" <em>(Van ja: wiki Ozuma (1635 &amp;#210;&amp;#226;&amp;#201;&amp;#210;&amp;#233;&amp;#241;&amp;#210;&amp;#226;&amp;#234;) (&amp;#213;&amp;#197;&amp;#236;&amp;#213;&amp;#9565;&amp;#192;&amp;#254;&amp;#250;&amp;#252;&amp;#181;&amp;#199;&amp;#186;&amp;#181;&amp;#191;&amp;#237;&amp;#213;&amp;#9565;&amp;#197;&amp;#213;&amp;#248;&amp;#9474;))</em></li> <li>29 apr 2004 15:53 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Vlag_de_Marne.jpg|Vlag_de_Marne.jpg]]" <em>(Beperkte toestemming)</em></li> <li>29 apr 2004 15:49 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Gemeentewapen_De_Marne.jpg|Gemeentewapen_De_Marne.jpg]]" <em>(Toestemming beperkt)</em></li> <li>29 apr 2004 15:35 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Swatch.jpg|Swatch.jpg]]" <em>(Eigen foto)</em></li> <li>29 apr 2004 14:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Herder.jpg|Herder.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 apr 2004 13:58 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Korjk.jpg|Korjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 apr 2004 13:11 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Levenjk.jpg|Levenjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 apr 2004 13:02 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Spaanjk.jpg|Spaanjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 apr 2004 12:53 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Lasjk.jpg|Lasjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 apr 2004 12:47 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Larsenjk.jpg|Larsenjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 apr 2004 12:42 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Langjk.jpg|Langjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 apr 2004 12:35 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kramjk.jpg|Kramjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 apr 2004 12:26 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kortjk.jpg|Kortjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 apr 2004 12:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kortjk.jpg|Kortjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 apr 2004 12:11 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Topajk.jpg|Topajk.jpg]]" <em>(Fritz8 - print)</em></li> <li>29 apr 2004 10:52 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Kaiser_Wilhelm_I_.jpg|Kaiser_Wilhelm_I_.jpg]]"</li> <li>29 apr 2004 10:24 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Frederik_Willem_van_Brandenburg.jpg|Frederik_Willem_van_Brandenburg.jpg]]" <em>(Frederik Willem van Brandenburg (van Duitse Wiki))</em></li> <li>29 apr 2004 10:20 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Adler_Deutsches-Reich.gif|Adler_Deutsches-Reich.gif]]"</li> <li>29 apr 2004 10:11 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Deutsches_Reich_1871-1918_small.gif|Deutsches_Reich_1871-1918_small.gif]]"</li> <li>29 apr 2004 10:10 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Germany_flag_empire.png|Germany_flag_empire.png]]"</li> <li>29 apr 2004 10:08 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Deutsches_Reich_1871-1918_.gif|Deutsches_Reich_1871-1918_.gif]]"</li> <li>29 apr 2004 10:02 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Triangulum_australe_constellation_map.png|Triangulum_australe_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Triangulum Australe, the Southern Triangle. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/09/08. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 15.7 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Triangulum australe constellation map.png]])</em></li> <li>29 apr 2004 10:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cygnus_constellation_map.png|Cygnus_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Cygnus, the Swan Copyright &amp;copy; 2003 &#91;mailto:bronger@physik.rwth-aachen.de Torsten Bronger]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 18/02/1003. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the azimuthal equidistant projection (the azimuth being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 9.4 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Cygnus constellation map.png]])</em></li> <li>29 apr 2004 09:57 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lupus_constellation_map.png|Lupus_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Lupus, the Wolf. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/30. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Lupus constellation map.png]])</em></li> <li>29 apr 2004 09:56 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Norma_constellation_map_small.png|Norma_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Norma constellation map small.png]])</em></li> <li>29 apr 2004 09:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Libra_constellation_map_small.png|Libra_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Libra constellation map small.png]])</em></li> <li>29 apr 2004 09:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Vulpecula_constellation_map_small.png|Vulpecula_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Vulpecula constellation map small.png]])</em></li> <li>29 apr 2004 09:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Volans_constellation_map.png|Volans_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Volans, the Flying Fish. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/11/10. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &quot;LMC&quot; is the Large Magellanic Cloud. &#91;&#91;en:Image:Volans constellation map.png]])</em></li> <li>29 apr 2004 09:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Vela_constellation_map_small.png|Vela_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Vela constellation map small.png]])</em></li> <li>29 apr 2004 09:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Telescopium_constellation_map.png|Telescopium_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Telescopium, the Telescope. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/09/07. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Telescopium constellation map.png]])</em></li> <li>29 apr 2004 09:29 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Taurus_constellation_map_small.png|Taurus_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Taurus constellation map small.png]])</em></li> <li>29 apr 2004 09:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Sextans_constellation_map.png|Sextans_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Sextans, the Sextant. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/09/03. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Sextans constellation map.png]])</em></li> <li>29 apr 2004 09:19 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Scutum_constellation_map.png|Scutum_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Scutum, the Shield. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/20. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 15.7 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Scutum constellation map.png]])</em></li> <li>29 apr 2004 09:15 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Sagitta_constellation_map.png|Sagitta_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Sagitta, the Arrow. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/09/03. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Sagitta constellation map.png]])</em></li> <li>29 apr 2004 09:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Plei_scheme.jpg|Plei_scheme.jpg]]" <em>(Vanaf Duitse wikipedia &#91;&#91;de:Bild:plei scheme.jpg]])</em></li> <li>29 apr 2004 09:09 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Pleiades.arp.300pix.jpg|Pleiades.arp.300pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The Pleiades star cluster, M45, is one of the brightest star clusters visible in the northern hemisphere. It consists of many bright, hot stars that were all formed at the same time within a large cloud of interstellar dust and gas. The blue haze that accompanies them is due to very fine dust which still remains and preferentially reflects the blue light from the stars.&lt;br&gt; &#39;&#39;&#39;CREDIT:&#39;&#39;&#39; Mount Wilson Observatory.&lt;br&gt; &#39;&#39;&#39;SOURCE:&#39;&#39;&#39; http&#58;//antwrp.gsfc.nasa.gov/apod/ap950620.html &lt;br&gt; &#39;&#39;&#39;COPYRIGHT:&#39;&#39;&#39; No copyright statement can be found on the source website (Mount Wilson) at www.mtwilson.edu but “Astronomy Picture of the Day†(my source for this photo) indicates there are no special copyright requirements.&lt;br&gt; &#39;&#39;&#39;PREPARED BY&#39;&#39;&#39; Adrian Pingstone in December 2003. &#91;&#91;en:Image:pleiades.arp.300pix.jpg]])</em></li> <li>29 apr 2004 09:02 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Topalov.jpg|Topalov.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>29 apr 2004 08:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Piscis_austrinus_constellation_map.png|Piscis_austrinus_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Piscis Austrinus, the Southern Fish. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/29. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Piscis austrinus constellation map.png]])</em></li> <li>29 apr 2004 08:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Pisces_constellation_map_small.png|Pisces_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Pisces constellation map small.png]])</em></li> <li>29 apr 2004 08:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Pictor_constellation_map.png|Pictor_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Pictor. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/27. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Pictor constellation map.png]])</em></li> <li>29 apr 2004 08:18 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Ftachnik.jpg|Ftachnik.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>29 apr 2004 08:12 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Phoenix_constellation_map.png|Phoenix_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Phoenix. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/26. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 9.4 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Phoenix constellation map.png]])</em></li> <li>29 apr 2004 08:08 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Pegasus_constellation_map_small.png|Pegasus_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Pegasus constellation map small.png]])</em></li> <li>29 apr 2004 08:03 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Pavo_constellation_map_small.png|Pavo_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Pavo constellation map small.png]])</em></li> <li>29 apr 2004 07:53 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Ftachnik.jpg|Ftachnik.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>29 apr 2004 07:41 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ophiuchus_constellation_map_small.png|Ophiuchus_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Ophiuchus constellation map small.png]])</em></li> <li>29 apr 2004 07:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Octans_constellation_map.png|Octans_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Octans, the Octant. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/29. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). SMC is the Small Magellanic Cloud. &#91;&#91;en:Image:Octans constellation map.png]])</em></li> <li>29 apr 2004 07:24 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Musca_constellation_map.png|Musca_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Musca, the Fly. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/11/10. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Musca constellation map.png]])</em></li> <li>29 apr 2004 06:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Microscopium_constellation_map.png|Microscopium_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Microscopium. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/27. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 15.7 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Microscopium constellation map.png]])</em></li> <li>29 apr 2004 06:52 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Mensa_constellation_map.png|Mensa_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Dorado, the Table Mountain. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/10/11. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &quot;LMC&quot; is the Large Magellanic Cloud. &#91;&#91;en:Image:Mensa constellation map.png]])</em></li> <li>29 apr 2004 06:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Virgo_constellation_map_small.png|Virgo_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia, &#91;&#91;en:Image:Virgo constellation map small.png]])</em></li> <li>29 apr 2004 06:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Virgo_constellation_map.png|Virgo_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: ;description: Carte pour la constellation &#91;&#91;Vierge (constellation)&#124;Vierge]] ;source: produite à l&#39;aide du logiciel &#91;http&#58;//pp3.sourceforge.net/ PP3] de &#91;&#91;w:en:User:Bronger]] ;copyright: &#91;&#91;GFDL]] &#91;&#91;fr:Image:Virgo constellation map.png]])</em></li> <li>29 apr 2004 06:28 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Hemerocallis_zweefvliegen.jpg|Hemerocallis_zweefvliegen.jpg]]" <em>(zelfgemaakte foto van zweefvliegen op Hemerocallis stuifmeeldraden)</em></li> <li>29 apr 2004 06:27 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lyra_constellation_map.png|Lyra_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Lyra, the Lyre. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/30. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 15.7 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Lyra constellation map.png]])</em></li> <li>29 apr 2004 06:22 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Leo_minor_constellation_map.png|Leo_minor_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Leo Minor, the Small Lion. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/31. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Leo minor constellation map.png]])</em></li> <li>29 apr 2004 06:17 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Indus_constellation_map.png|Indus_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Indus, the Indian. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/29. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Indus constellation map.png]])</em></li> <li>29 apr 2004 05:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Tinwhistles.jpg|Tinwhistles.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Tinwhistles: Overton aluminum D by Colin Goldie, Tony Dixon PVC D, Feadog brass D, all cylindrical; Clarke &quot;Sweetone&quot; D, conical; Generation nickel low Bb and high G; Howard low D. &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:Tinwhistles.jpg]])</em></li> <li>29 apr 2004 04:20 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Forfour3.JPG|Forfour3.JPG]]" <em>(Toestemming fotograaf)</em></li> <li>29 apr 2004 04:20 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Forfour2.JPG|Forfour2.JPG]]" <em>(Toestemming fotograaf)</em></li> <li>29 apr 2004 04:19 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Forfour1.JPG|Forfour1.JPG]]" <em>(Toestemming fotograaf)</em></li> <li>29 apr 2004 03:53 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Smart_fortwo.JPG|Smart_fortwo.JPG]]" <em>(Eigen foto)</em></li> <li>29 apr 2004 02:19 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Fat.png|Fat.png]]" <em>(Van pl: wiki 13:30, 22 lis 2002 . . (Automated conversion) (2320 bajt&amp;#9500;&amp;#9474;w) )</em></li> <li>29 apr 2004 02:17 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Label-two-horses.png|Label-two-horses.png]]" <em>(Van en: wiki . Greenmountainboy (33558 bytes) (From user talk:MyRedDice), &quot;Yes, all my images are in public domain. I will indicate the date of the photo from now on. Thank you for being concerned.&quot; -- Greenmountainboy 18:01, 13 Dec 2003 (UTC))</em></li> <li>29 apr 2004 02:15 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Sorbitol.png|Sorbitol.png]]" <em>(Van en: wiki (Automated conversion) (1206 bytes) Brion VIBBER (1292 bytes) (Resaved image; might work in IE now?))</em></li> <li>29 apr 2004 02:14 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Australian-Pelicans-s.jpg|Australian-Pelicans-s.jpg]]" <em>(Van en: wiki Tannin (16094 bytes) (My own picture - thumbnail) )</em></li> <li>29 apr 2004 02:11 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Papyrus.jpg|Papyrus.jpg]]" <em>(Eerdere versie van Jcwf terug, per ongeluk overschreven)</em></li> <li>29 apr 2004 02:08 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Papyrus.jpg|Papyrus.jpg]]" <em>(Van fr: wiki . Treanna (10555 octets) )</em></li> <li>29 apr 2004 02:06 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Mercury_Capsule.png|Mercury_Capsule.png]]" <em>(Van en: wiki Audin (11081 bytes) (Mercury Spacecraft) his image has been released into the public domain by the author, or its copyright has expired. This applies worldwide. this is a cropped and rotated version of NASA image S62-04976.jpg.)</em></li> <li>29 apr 2004 02:02 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Moden1912.jpg|Moden1912.jpg]]" <em>(Van da: stub-wiki)</em></li> <li>29 apr 2004 02:00 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Eurasian_lynx.jpg|Eurasian_lynx.jpg]]" <em>(Van ja: wiki Yahoooh (35969 ÒâÉÒéñÒâê) (eng site))</em></li> <li>29 apr 2004 01:57 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Bandwidth.gif|Bandwidth.gif]]" <em>(Van en: wiki Waveguy (4126 bytes) (bandwitdth as filter frequency response ) )</em></li> <li>29 apr 2004 01:54 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Herringuwe.jpg|Herringuwe.jpg]]" <em>(Van en: wiki Kils (4317 bytes) (herring) herring photo Uwe Kils)</em></li> <li>28 apr 2004 22:01 [[Gebruiker:David Eerdmans|David Eerdmans]] heeft ge-upload: "[[:Afbeelding:BOOGERD.jpg|BOOGERD.jpg]]" <em>(Eigen foto)</em></li> <li>28 apr 2004 21:35 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:WBrakman.jpg|WBrakman.jpg]]" <em>(Schrijver Willem Brakman, publiek domein, internet.)</em></li> <li>28 apr 2004 21:12 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Dryden.jpg|Dryden.jpg]]" <em>(van engelse pagina over john dryden)</em></li> <li>28 apr 2004 20:40 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:LogoLB.png|LogoLB.png]]" <em>(paar kleine wijzigingetjes)</em></li> <li>28 apr 2004 20:23 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:LogoLB.png|LogoLB.png]]" <em>(oeps)</em></li> <li>28 apr 2004 20:21 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:LogoLB.png|LogoLB.png]]" <em>(Een Combino met 230.000 kilometer op de teller...)</em></li> <li>28 apr 2004 19:45 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Karte_weimar_in_deutschland.png|Karte_weimar_in_deutschland.png]]" <em>(Van de: wiki (4019 Byte) (Karte von Weimar in Deutschland , selbstgezeichnet, &#91;&#91;GNU Freie Dokumentationslizenz&#124;GNU FDL]]) dankeschoen Stefan)</em></li> <li>28 apr 2004 19:43 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Wilno_widok_ogolny22.jpg|Wilno_widok_ogolny22.jpg]]" <em>(Van pl: wiki Kpjas (16202 bajt&amp;#9500;&amp;#9474;w) (Wilno (PD)) )</em></li> <li>28 apr 2004 19:42 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Securitycouncil.jpg|Securitycouncil.jpg]]" <em>(Van en: wiki J.J. (30470 bytes) (UN Secuirty Council from UN site) )</em></li> <li>28 apr 2004 19:41 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Tucana_constellation_map.png|Tucana_constellation_map.png]]" <em>(Van jp: wiki, help ik kan het Japans niet lezen . Suisui (15626 &amp;#210;&amp;#226;&amp;#201;&amp;#210;&amp;#233;&amp;#241;&amp;#210;&amp;#226;&amp;#234;) (&amp;#210;&amp;#252;&amp;#236;&amp;#210;&amp;#233;&amp;#231;&amp;#210;&amp;#252;&amp;#249;&amp;#210;&amp;#252;&amp;#237;&amp;#210;&amp;#233;&amp;#231;&amp;#210;&amp;#252;&amp;#229;&amp;#213;&amp;#9553;&amp;#186;&amp;#210;&amp;#199;&amp;#199;&amp;#181;&amp;#255;&amp;#402;&amp;#213;&amp;#248;&amp;#9474;&amp;#210;&amp;#199;&amp;#199;&amp;#213;&amp;#241;&amp;#186;&amp;#210;&amp;#199;&amp;#199;&amp;#222;&amp;#239;&amp;#9618;&amp;#222;&amp;#172;&amp;#215;&amp;#254;&amp;#235;&amp;#234;&amp;#210;&amp;#233;&amp;#234;&amp;#210;&amp;#233;&amp;#232;) )</em></li> <li>28 apr 2004 19:38 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Karte-tirol-NSO.png|Karte-tirol-NSO.png]]" <em>(Van de: wiki Jensens (3775 Byte) (Tirol (Schema: Nord, Sued, Ost)) )</em></li> <li>28 apr 2004 19:36 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:GreeceThessalonika.png|GreeceThessalonika.png]]" <em>(Van en: wiki)</em></li> <li>28 apr 2004 19:35 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Mole.jpg|Mole.jpg]]" <em>(Van en: wiki Donarreiskoffer (8084 bytes) (European Mole))</em></li> <li>28 apr 2004 19:32 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Tabun.png|Tabun.png]]" <em>(Van en: wiki Iorsh (3437 bytes) (Tabun structural diagram) Created by Maxim Iorsh with xymtex)</em></li> <li>28 apr 2004 19:31 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Sculptor_constellation_map.png|Sculptor_constellation_map.png]]" <em>(Van jp: wiki, help, ik kan het Japans niet lezen, Modeha (13773 &amp;#210;&amp;#226;&amp;#201;&amp;#210;&amp;#233;&amp;#241;&amp;#210;&amp;#226;&amp;#234;) (&amp;#210;&amp;#252;&amp;#237;&amp;#210;&amp;#233;&amp;#231;&amp;#210;&amp;#252;&amp;#229;&amp;#210;&amp;#252;&amp;#244;&amp;#210;&amp;#252;&amp;#197;&amp;#210;&amp;#252;&amp;#249;&amp;#210;&amp;#252;&amp;#241;&amp;#213;&amp;#9553;&amp;#186;&amp;#210;&amp;#199;&amp;#233;&amp;#222;&amp;#239;&amp;#9618;&amp;#222;&amp;#172;&amp;#215;&amp;#254;&amp;#235;&amp;#234;&amp;#210;&amp;#233;&amp;#234;&amp;#210;&amp;#233;&amp;#232;) )</em></li> <li>28 apr 2004 19:29 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Omskiftere.jpg|Omskiftere.jpg]]" <em>(Van da: stub-wiki (Billede af elektriske omskiftere. Fra venstre: Enkeltpolet vippeomskifter. Enpolet mikroswitch. PrintmotÚrbar enkeltpolet omskifter. 2 stk flerpolede)</em></li> <li>28 apr 2004 19:27 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Pyridin.png|Pyridin.png]]" <em>(Van de: wiki Thomasgl (559 Byte) (selbstgezeichnete Strukuturformel von Pyridin) mit chemischen Zeichenprogramm selbstgezeichnete Strukuturformel von Pyridin, als .gif gespeichert und dann unter Linux mit xv nachbearbeitet und als .png abgespeichert (von thomasgl))</em></li> <li>28 apr 2004 19:24 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:JezykiProgPasc.png|JezykiProgPasc.png]]" <em>( Borkowsk (22127 bajt&amp;#9500;&amp;#9474;w) (Drzewo genealogiczne j&amp;#9472;&amp;#214;zyk&amp;#9500;&amp;#9474;w programowania - rodzina Algolu i Fortranu) Van pl: wiki)</em></li> <li>28 apr 2004 19:23 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Polio.jpg|Polio.jpg]]" <em>(Van en: wiki Public domain image, from http&#58;//www.epa.gov/ )</em></li> <li>28 apr 2004 19:20 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Gb-nthum.JPG|Gb-nthum.JPG]]" <em>(Van en: wiki Grinner? (5037 bytes) (Northumbrian Flag) )</em></li> <li>28 apr 2004 19:18 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Bonobo.jpg|Bonobo.jpg]]" <em>(Van de: wiki Head (14954 Byte) (Bonobo) )</em></li> <li>28 apr 2004 19:15 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:00866r_kl.jpg|00866r_kl.jpg]]" <em>(Van de: stub-wiki Stefan K³hn (10948 Byte) (kleinere Version) )</em></li> <li>28 apr 2004 19:11 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Turmeric.jpg|Turmeric.jpg]]" <em>(Van en: wiki WormRunner (12 bytes) (picture of turmeric rhizomes from http&#58;//www.cdfa.ca.gov/phpps/pe/page65.jpg))</em></li> <li>28 apr 2004 19:09 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:ChannelIslands.png|ChannelIslands.png]]" <em>(Van it: wiki Snowdog (10395 bytes) (Mappa delle Isole del Canale) )</em></li> <li>28 apr 2004 19:05 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Hammer_small.jpg|Hammer_small.jpg]]" <em>(Van en: wiki TakuyaMurata (8521 bytes) (from &#91;&#91;openphoto.net]]))</em></li> <li>28 apr 2004 19:04 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Samoa_flag_medium.png|Samoa_flag_medium.png]]" <em>(samoa)</em></li> <li>28 apr 2004 19:04 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:San_marino_flag_medium.png|San_marino_flag_medium.png]]" <em>(san marino)</em></li> <li>28 apr 2004 19:04 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Saudi_arabia_flag_medium.png|Saudi_arabia_flag_medium.png]]" <em>(saudi-arab)</em></li> <li>28 apr 2004 19:03 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Senegal_flag_medium.png|Senegal_flag_medium.png]]" <em>(senegal)</em></li> <li>28 apr 2004 19:03 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Seychelles_flag_medium.png|Seychelles_flag_medium.png]]" <em>(seychellen)</em></li> <li>28 apr 2004 19:03 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Sierra_leone_flag_medium.png|Sierra_leone_flag_medium.png]]" <em>(sierra leone)</em></li> <li>28 apr 2004 19:02 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Singapore_flag_medium.png|Singapore_flag_medium.png]]" <em>(singapore)</em></li> <li>28 apr 2004 19:02 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Slovenia_flag_medium.png|Slovenia_flag_medium.png]]" <em>(slovenie)</em></li> <li>28 apr 2004 19:01 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Solomon_islands_flag_medium.png|Solomon_islands_flag_medium.png]]" <em>(solomon)</em></li> <li>28 apr 2004 19:01 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Wecandoit.jpg|Wecandoit.jpg]]" <em>(Joaotg (26724 bytes) (imagem da wiki de l&amp;#9500;&amp;#161;ngua inglesa mmo nome) van pt: wiki, vreemd, de en: wiki afbeelding werd kennelijk niet gevonden)</em></li> <li>28 apr 2004 19:01 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:South_africa_flag_medium.png|South_africa_flag_medium.png]]" <em>(zd afrika)</em></li> <li>28 apr 2004 19:01 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:South_korea_flag_medium.png|South_korea_flag_medium.png]]" <em>(zd korea)</em></li> <li>28 apr 2004 19:01 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Sri_lanka_flag_medium.png|Sri_lanka_flag_medium.png]]" <em>(sri lanka)</em></li> <li>28 apr 2004 19:00 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:St_helena_flag_medium.png|St_helena_flag_medium.png]]" <em>(helena)</em></li> <li>28 apr 2004 19:00 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:St_kitts_and_nevis_flag_medium.png|St_kitts_and_nevis_flag_medium.png]]" <em>(kitts)</em></li> <li>28 apr 2004 19:00 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:St_lucia_flag_medium.png|St_lucia_flag_medium.png]]" <em>(lucia)</em></li> <li>28 apr 2004 18:59 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:St_vincent_grenadines_flag_medium.png|St_vincent_grenadines_flag_medium.png]]" <em>(vincent)</em></li> <li>28 apr 2004 18:59 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Suriname_flag_medium.png|Suriname_flag_medium.png]]" <em>(surin)</em></li> <li>28 apr 2004 18:59 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Engel.JPG|Engel.JPG]]" <em>(Van de: wiki Alex Anlicker (48578 Byte) (Engel) Engel, k³nstlerische Darstellung in der weit verbreiteten Form eines kleinen Jungen mit Fl³geln, Keramik mit Goldlack)</em></li> <li>28 apr 2004 18:59 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Swaziland_flag_medium.png|Swaziland_flag_medium.png]]" <em>(swazi)</em></li> <li>28 apr 2004 18:58 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Sweden_flag_medium.png|Sweden_flag_medium.png]]" <em>(zweden)</em></li> <li>28 apr 2004 18:58 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Switzerland_flag_medium.png|Switzerland_flag_medium.png]]" <em>(zwit)</em></li> <li>28 apr 2004 18:58 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Taiwan_flag_medium.png|Taiwan_flag_medium.png]]" <em>(taiwan)</em></li> <li>28 apr 2004 18:57 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Tajikistan_flag_medium.png|Tajikistan_flag_medium.png]]" <em>(tadj)</em></li> <li>28 apr 2004 18:57 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Sparganium.jpg|Sparganium.jpg]]" <em>(Van fr: wiki Jeffdelonge (28521 octets) (rubanier photo perso) )</em></li> <li>28 apr 2004 18:57 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Tanzania_flag_medium.png|Tanzania_flag_medium.png]]" <em>(tanz)</em></li> <li>28 apr 2004 18:55 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:IC_EPROM_2716.jpg|IC_EPROM_2716.jpg]]" <em>(Van da: stub-wiki (78485 bytes) (Billedet viser en EPROM chip med typenummeret 2716 (16 kbit) fremstillet i 49 uge Õr 1979.) )</em></li> <li>28 apr 2004 18:51 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Togo_flag_medium.png|Togo_flag_medium.png]]" <em>(togo)</em></li> <li>28 apr 2004 18:51 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Tonga_flag_medium.png|Tonga_flag_medium.png]]" <em>(tonga)</em></li> <li>28 apr 2004 18:51 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:B2.spirit.2.300pix.jpg|B2.spirit.2.300pix.jpg]]" <em>(Van en: wiki Arpingstone (11016 bytes) (B-2 Spirit) )</em></li> <li>28 apr 2004 18:51 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Trinidad_and_tobago_flag_medium.png|Trinidad_and_tobago_flag_medium.png]]" <em>(trinidad)</em></li> <li>28 apr 2004 18:50 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Tunisia_flag_medium.png|Tunisia_flag_medium.png]]" <em>(tunesia)</em></li> <li>28 apr 2004 18:50 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Turkmenistan_flag_medium.png|Turkmenistan_flag_medium.png]]" <em>(turkmenistan)</em></li> <li>28 apr 2004 18:50 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Turks_and_caicos_flag_medium.png|Turks_and_caicos_flag_medium.png]]" <em>(turks)</em></li> <li>28 apr 2004 18:49 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Tuvalu_flag_medium.png|Tuvalu_flag_medium.png]]" <em>(tuvalu)</em></li> <li>28 apr 2004 18:49 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Uae_flag_medium.png|Uae_flag_medium.png]]" <em>(uae)</em></li> <li>28 apr 2004 18:48 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Uganda_flag_medium.png|Uganda_flag_medium.png]]" <em>(uganda)</em></li> <li>28 apr 2004 18:48 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Uk_flag_medium.png|Uk_flag_medium.png]]" <em>(uk)</em></li> <li>28 apr 2004 18:48 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Uruguay_flag_medium.png|Uruguay_flag_medium.png]]" <em>(uruguay)</em></li> <li>28 apr 2004 18:48 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Us_flag_medium.png|Us_flag_medium.png]]" <em>(us)</em></li> <li>28 apr 2004 18:47 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Us_virgin_islands_flag_medium.png|Us_virgin_islands_flag_medium.png]]" <em>(us virgin)</em></li> <li>28 apr 2004 18:47 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Vanuatu_flag_medium.png|Vanuatu_flag_medium.png]]" <em>(vanatu)</em></li> <li>28 apr 2004 18:47 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Vatican_flag_medium.png|Vatican_flag_medium.png]]" <em>(vatikaan)</em></li> <li>28 apr 2004 18:47 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Boethius.jpg|Boethius.jpg]]" <em>(Van ru: wiki . Ctac (21905 &amp;#240;&amp;#9618;&amp;#240;&amp;#9617;&amp;#240;&amp;#9571;&amp;#208;&amp;#233;(&amp;#240;&amp;#165;&amp;#240;&amp;#9619;)) (&amp;#240;&amp;#230;&amp;#240;&amp;#165;&amp;#208;&amp;#236;&amp;#208;&amp;#229;&amp;#240;&amp;#169;&amp;#240;&amp;#9571;) )</em></li> <li>28 apr 2004 18:46 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Vietnam_flag_medium.png|Vietnam_flag_medium.png]]" <em>(vietnam)</em></li> <li>28 apr 2004 18:46 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Vlaanderenvlag_image.png|Vlaanderenvlag_image.png]]" <em>(vlaanderen)</em></li> <li>28 apr 2004 18:46 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Wallonievlag_image.png|Wallonievlag_image.png]]" <em>(wallonie)</em></li> <li>28 apr 2004 18:46 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Yemen_flag_medium.png|Yemen_flag_medium.png]]" <em>(jemen)</em></li> <li>28 apr 2004 18:45 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Yugoslavia_flag_medium.png|Yugoslavia_flag_medium.png]]" <em>(yugo)</em></li> <li>28 apr 2004 18:45 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Zambia_flag_medium.png|Zambia_flag_medium.png]]" <em>(zambia)</em></li> <li>28 apr 2004 18:44 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Zimbabwe_flag_medium.png|Zimbabwe_flag_medium.png]]" <em>(zim)</em></li> <li>28 apr 2004 18:16 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Akcja_Parowoz_m.jpg|Akcja_Parowoz_m.jpg]]" <em>(Van pl: wiki Topory (26150 bajt&amp;#9500;&amp;#9474;w) )</em></li> <li>28 apr 2004 17:54 [[Gebruiker:Dick Bos|Dick Bos]] heeft ge-upload: "[[:Afbeelding:GierzwaluwZweden250888.jpg|GierzwaluwZweden250888.jpg]]" <em>(Gierzwaluw, postzegel Zweden 1988)</em></li> <li>28 apr 2004 16:45 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Egyptevlag_image.png|Egyptevlag_image.png]]" <em>(Vlag Egypte)</em></li> <li>28 apr 2004 16:38 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Tsjaadvlag_image.png|Tsjaadvlag_image.png]]" <em>(Vlag Tsjaad)</em></li> <li>28 apr 2004 16:36 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Ivoorkustvlag_image.jpg|Ivoorkustvlag_image.jpg]]" <em>(Vlag van Ivoorkust)</em></li> <li>28 apr 2004 16:30 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Cameroenvlag_image.png|Cameroenvlag_image.png]]" <em>(Vlag van Ivoorkust)</em></li> <li>28 apr 2004 16:20 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Cameroenvlag_image.png|Cameroenvlag_image.png]]" <em>(Vlag Cameroen)</em></li> <li>28 apr 2004 16:15 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Tricolore_image.png|Tricolore_image.png]]" <em>(Tricolore)</em></li> <li>28 apr 2004 15:53 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Logo_Protestantse_Kerk.jpg|Logo_Protestantse_Kerk.jpg]]" <em>(Toestemming wordt gevraagd)</em></li> <li>28 apr 2004 14:26 [[Gebruiker:SanderSpek|SanderSpek]] heeft ge-upload: "[[:Afbeelding:Vraagenaanbod.png|Vraagenaanbod.png]]" <em>(Gemaakt door Sander Spek.)</em></li> <li>28 apr 2004 13:58 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Rijkswegenkaart.png|Rijkswegenkaart.png]]" <em>(Bestandsgrootte teruggebracht.)</em></li> <li>28 apr 2004 13:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Keresjk.jpg|Keresjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 13:40 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Keenejk.jpg|Keenejk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 13:33 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Rijkswegenkaart.png|Rijkswegenkaart.png]]" <em>(rijkswegenkaart, eigen werk, &#123;&#123;msg:PD}})</em></li> <li>28 apr 2004 13:32 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kasparjk.jpg|Kasparjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 13:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Karpovjk.jpg|Karpovjk.jpg]]" <em>(friso)</em></li> <li>28 apr 2004 13:02 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kamskyjk.jpg|Kamskyjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 12:56 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Jungjk.jpg|Jungjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 12:51 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Ptolemy_I_of_Egypt.jpg|Ptolemy_I_of_Egypt.jpg]]" <em>(En: wikipedia)</em></li> <li>28 apr 2004 12:51 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Jaenischjk.jpg|Jaenischjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 12:47 [[Gebruiker:Rm|Rm]] heeft ge-upload: "[[:Afbeelding:Kleurpotloden.jpg|Kleurpotloden.jpg]]" <em>(Eigen foto)</em></li> <li>28 apr 2004 12:46 [[Gebruiker:Rm|Rm]] heeft ge-upload: "[[:Afbeelding:Grafietpotloden.jpg|Grafietpotloden.jpg]]" <em>(Eigen foto)</em></li> <li>28 apr 2004 12:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Hubnerjk.jpg|Hubnerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 12:40 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Hortjk.jpg|Hortjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 12:37 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Wilgstruik2.JPG|Wilgstruik2.JPG]]" <em>(Eigen foto)</em></li> <li>28 apr 2004 12:36 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Grunjk.jpg|Grunjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 12:32 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gligojk.jpg|Gligojk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 12:25 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Flohrjk.jpg|Flohrjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 12:15 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Fischerjk.jpg|Fischerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 12:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Finejk.jpg|Finejk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 12:00 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Falkjk.jpg|Falkjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 11:55 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Evansjk.jpg|Evansjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 11:48 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Cunjk.jpg|Cunjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 11:41 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Collejk.jpg|Collejk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 11:37 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Cochjk.jpg|Cochjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 11:33 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Chigorinjk.jpg|Chigorinjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 11:33 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Irakvlag5_image.gif|Irakvlag5_image.gif]]" <em>(5e vlag Irak)</em></li> <li>28 apr 2004 11:32 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Irakvlag4_image.png|Irakvlag4_image.png]]" <em>(4e vlag irak)</em></li> <li>28 apr 2004 11:32 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Irakvlag3_image.png|Irakvlag3_image.png]]" <em>(3e vlag Irak)</em></li> <li>28 apr 2004 11:32 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Irakvlag2_image.gif|Irakvlag2_image.gif]]" <em>(2e vlag Irak)</em></li> <li>28 apr 2004 11:31 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Irakvlag1_image.gif|Irakvlag1_image.gif]]" <em>(1e Vlag Irak)</em></li> <li>28 apr 2004 11:28 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Doorjk.jpg|Doorjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 09:22 [[Gebruiker:ChAoZ|ChAoZ]] heeft ge-upload: "[[:Afbeelding:Galvihara.jpg|Galvihara.jpg]]" <em>(eigen gemaakte foto van een van de beelden van de Gal Vihara in Polonnaruwa, Sri Lanka)</em></li> <li>28 apr 2004 09:18 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Goudzoeker.jpg|Goudzoeker.jpg]]" <em>(zonet verkeerde versie)</em></li> <li>28 apr 2004 09:16 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Goudzoeker.jpg|Goudzoeker.jpg]]" <em>(licht aangepast)</em></li> <li>28 apr 2004 09:06 [[Gebruiker:Mirjam678|Mirjam678]] heeft ge-upload: "[[:Afbeelding:Coverboekbeter.jpg|Coverboekbeter.jpg]]" <em>(Cover Verlaten Hotel)</em></li> <li>28 apr 2004 07:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bronjk.jpg|Bronjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 06:59 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Breyerjk.jpg|Breyerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 06:54 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Botjk.jpg|Botjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 06:47 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bolesjk.jpg|Bolesjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>28 apr 2004 06:46 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Jules_vernes_octopus.bmp|Jules_vernes_octopus.bmp]]" <em>(Uit het boek 20.000 mijlen onder zee)</em></li> <li>28 apr 2004 06:35 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Viola_tricolor_Jan_Wesenberg01_05.jpg|Viola_tricolor_Jan_Wesenberg01_05.jpg]]" <em>(foto afkomstig van Duitse Wikipedia gemaakt door Jan Wesenberg)</em></li> <li>28 apr 2004 05:34 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bosanemoon_slootberm.jpg|Bosanemoon_slootberm.jpg]]" <em>(zelfgemaakte foto van bosanemoon op noordkant van sloot)</em></li> <li>28 apr 2004 02:03 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Provmap-on.png|Provmap-on.png]]" <em>(Van en: wiki Montrealais (20707 bytes) (Locator map for Ontario - drawn by montrealais) )</em></li> <li>28 apr 2004 01:56 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Chess_latvian_gambit.png|Chess_latvian_gambit.png]]" <em>(Van en: wiki (Automated conversion) (5193 bytes))</em></li> <li>28 apr 2004 01:27 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Holbein_danse_macabre.png|Holbein_danse_macabre.png]]" <em>(Van en: wiki Ihcoyc (36344 bytes) (From the Dance of &#91;&#91;Death]] by &#91;&#91;Hans Holbein]] (&#91;&#91;1491]])))</em></li> <li>27 apr 2004 23:02 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Horologium_constellation_map.png|Horologium_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Horologium, the Pendulum Clock. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/10/03. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Horologium constellation map.png]])</em></li> <li>27 apr 2004 23:01 [[Gebruiker:Rm|Rm]] heeft ge-upload: "[[:Afbeelding:Martinitoren_groningen.jpg|Martinitoren_groningen.jpg]]" <em>(Eigen foto vanaf dak AzG)</em></li> <li>27 apr 2004 22:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Grus_constellation_map.png|Grus_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Grus, the Crane. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/28. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Grus constellation map.png]])</em></li> <li>27 apr 2004 22:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Hercules_constellation_map_small.png|Hercules_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Hercules constellation map small.png]])</em></li> <li>27 apr 2004 22:52 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Gemini_constellation_map_small.png|Gemini_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia, &#91;&#91;en:Image:Gemini constellation map small.png]])</em></li> <li>27 apr 2004 22:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Sternkarte_Gemini.png|Sternkarte_Gemini.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Dies ist eine Sternkarte des Sternbildes Gemini, die Zwillinge. Copyright &amp;copy; 2004 &#91;mailto:bronger@physik.rwth-aachen.de Torsten Bronger]. Sie wurde von &#91;&#91;Benutzer:Bronger&#124;Torsten Bronger]] unter Benutzung von &#91;http&#58;//pp3.sourceforge.net PP3] am 2004/03/21 erstellt. Die gelben gestrichelten Linien sind die Sternbildgrenzen, die rote Linie ist die Ekliptik, und die Blaubabstufenungen sind unterschiedlich intensive Gebiete der Milchstraße. Die Karte enthält alle Messier-Objekte, außer bei Überlappungen. Die zugrunde liegende Datenbank enthält alle Sterne heller als 6.5m. Alle Koordinaten beziehen sich auf 2000.0. Die Karte ist in der äquidistanten Azimuthalprojektion berechnet, mit dem Azimuth in der Kartenmitte. Dementsprechend kommt es zum Kartenrand hin zu einer leichten Vergrößerung und Verzerrung. Die Nordrichtung weist nach oben. Die Deklinationslinien sind alle 10° gezeichnet, die Rektaszensionslinien für jede volle Stunde. &#91;Dies ist nur ein experimentelles Hochladen; es ist noch nicht klar, wie die Sternkarten für die deutsche Wikipedia letztenendes gemacht werden.] &#91;&#91;en:Image:Gemini constellation map.png]] &#91;&#91;de:Bild: Sternkarte Gemini.png]])</em></li> <li>27 apr 2004 22:45 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Fornax_constellation_map.png|Fornax_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Fornax, the Chemical Oven. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/26. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Fornax constellation map.png]])</em></li> <li>27 apr 2004 22:43 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Eridanus_constellation_map_small.png|Eridanus_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Eridanus constellation map small.png]])</em></li> <li>27 apr 2004 22:40 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Equuleus_constellation_map.png|Equuleus_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Equuleus, the Little Horse. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/31. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 15.7 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Equuleus constellation map.png]])</em></li> <li>27 apr 2004 22:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Monoceros_constellation_map.png|Monoceros_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Monoceros, the Unicorn. Copyright &amp;copy; 2003 &#91;mailto:bronger@physik.rwth-aachen.de Torsten Bronger]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 15/02/1003. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line isx the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the azimuthal equidistant projection (the azimuth being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). : Part of Orion was cropped to make image better fit the table. (the rendering with my browser and screen settings did not make sense.) &#91;&#91;User:Caid Raspa&#124;Caid Raspa]] 12:43 15 Jul 2003 (UTC) &#91;&#91;en:Image:Monoceros constellation map.png]])</em></li> <li>27 apr 2004 22:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Triangulum_constellation_map.png|Triangulum_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Triangulum, the Triangle. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/31. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Triangulum constellation map.png]])</em></li> <li>27 apr 2004 22:29 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Draco_constellation_map.png|Draco_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Draco, the Dragon. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/21. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 9.4 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Draco constellation map.png]])</em></li> <li>27 apr 2004 22:26 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Delphinus_constellation_map_small.png|Delphinus_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Delphinus constellation map small.png]])</em></li> <li>27 apr 2004 22:20 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Crux_constellation_map.png|Crux_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Crux, the Southern Cross. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 22/02/1003. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the azimuthal equidistant projection (the azimuth being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Crux constellation map.png]])</em></li> <li>27 apr 2004 22:19 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Neutron_proton_verhouding.png|Neutron_proton_verhouding.png]]" <em>(Overgenomen van Wikipedia.en door Evanherk; vertaald door mij &#123;&#123;msg:GFDL}})</em></li> <li>27 apr 2004 22:17 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Corvus_constellation_map_small.png|Corvus_constellation_map_small.png]]" <em>(Give a description for the image:Vanaf Engelse wikipedia &#91;&#91;en:Image:Corvus constellation map small.png]])</em></li> <li>27 apr 2004 22:13 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Camelopardalis_constellation_map_small.png|Camelopardalis_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Camelopardalis constellation map small.png]])</em></li> <li>27 apr 2004 22:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Sagittarius_constellation_map_small.png|Sagittarius_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Sagittarius constellation map small.png]])</em></li> <li>27 apr 2004 22:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Crater_constellation_map.png|Crater_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Crater, the Cup. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/09/05. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Crater constellation map.png]])</em></li> <li>27 apr 2004 22:07 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Schauffelradbagger.jpg|Schauffelradbagger.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: **Schauffelradbagger in Ferropolis *Quelle: **Fotografiert im Juni 2000 *Fotograf oder Zeichner: **&#91;&#91;Benutzer:Stefan Kühn&#124;Stefan Kühn]] *Andere Versionen: **&#91;&#91;Media:Schauffelradbagger_kl.jpg&#124;kleinere Version]] (&#91;&#91;:Bild:Schauffelradbagger_kl.jpg&#124;Info]]) *Copyright Status: **&#91;&#91;GNU Freie Dokumentationslizenz]] &#91;&#91;de:Bild:Schauffelradbagger.jpg]])</em></li> <li>27 apr 2004 22:04 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Auriga_constellation_map_small.png|Auriga_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia, &#91;&#91;en:Image:Auriga constellation map small.png]])</em></li> <li>27 apr 2004 22:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Aries_constellation_map_small.png|Aries_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Aries_constellation_map_small.png]])</em></li> <li>27 apr 2004 21:54 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Aquila_constellation_map_small.png|Aquila_constellation_map_small.png]]" <em>(Give a description for the image: &#91;&#91;en:Image:Aquila_constellation_map_small.png]] vanaf Engelse wikipedia)</em></li> <li>27 apr 2004 21:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Puppis_constellation_map.png|Puppis_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: ;description: Carte pour la constellation &#91;&#91;Poupe (constellation)&#124;Poupe]] ;source: produite à l&#39;aide du logiciel &#91;http&#58;//pp3.sourceforge.net/ PP3] de &#91;&#91;w:en:User:Bronger]] ;copyright: &#123;&#123;msg:GFDL}} &#91;&#91;fr:Image:Puppis constellation map.png]])</em></li> <li>27 apr 2004 21:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Corona_borealis_constellation_map.png|Corona_borealis_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Corona Borealis, the Northern Crown. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/09/04. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Corona borealis constellation map.png]])</em></li> <li>27 apr 2004 21:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Corona_australis_constellation_map.png|Corona_australis_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Corona Australis, the Southern Crown. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/09/07. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 15.7 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Corona australis constellation map.png]])</em></li> <li>27 apr 2004 21:14 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Nokia-mobilephoneearpiece010.jpg|Nokia-mobilephoneearpiece010.jpg]]" <em>(Van en: wiki LarryGilbert (16270 bytes) (<nowiki>&#123;&#123;msg:CopyrightedFreeUseProvided}} the terms of the &#91;http&#58;//www.freeimages.co.uk/terms.htm Freeimages User License] are followed) See the terms on the site of freeimages)</em></li> <li>27 apr 2004 20:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:MarilynMonroe.jpg|MarilynMonroe.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Marilyn Monroe from cover of &#39;&#39;&#91;&#91;Marilyn Monroe (book)&#124;Marilyn Monroe]]&#39;&#39; by &#91;&#91;Barbara Leaming]] &#91;&#91;en:Image:MarilynMonroe.jpg]])</em></li> <li>27 apr 2004 20:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Maison_carree_side.jpg|Maison_carree_side.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Side view of the Maison Carrée, Nimes Image by &#91;&#91;User:ChrisO&#124;ChrisO]] &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:Maison carree side.jpg]])</em></li> <li>27 apr 2004 20:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Corinth_Temple_of_Apollon.jpg|Corinth_Temple_of_Apollon.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Large version of the Apollon Temple in Ancient Corinth, taken by &lt;mdoege@compuserve.com&gt; &#91;&#91;en:Image: Corinth Temple of Apollon.jpg]])</em></li> <li>27 apr 2004 20:24 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:GreeceCorinth.png|GreeceCorinth.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: map &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:GreeceCorinth.png]])</em></li> <li>27 apr 2004 20:23 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Nagasaki_bei_Nacht.jpg|Nagasaki_bei_Nacht.jpg]]" <em>(Van en: wiki TakuyaMurata (25455 bytes) (copyright-free) )</em></li> <li>27 apr 2004 20:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:GreeceCorinth.png|GreeceCorinth.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: map &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:GreeceCorinth.png]] 1)</em></li> <li>27 apr 2004 20:22 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Corinthische_zuil.jpg|Corinthische_zuil.jpg]]" <em>(Corinthische zuil, vertaald vanaf Poolse wikipedia, &#91;&#91;pl:Grafika:Porz&amp;#261;dek koryncki popr.JPG]])</em></li> <li>27 apr 2004 20:08 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:GreeceCorfu.png|GreeceCorfu.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: map &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:GreeceCorfu.png]])</em></li> <li>27 apr 2004 20:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Karte_Korfu.png|Karte_Korfu.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Karte der griechischen Insel Krofu, stark verfremdete Vorlage von einer inzwischen nicht mehr erreichbaren Touristikseite, neue Farben, andere Orte, weniger Orte, Pictogramm zum Flughafen entfernt, Schalgschatten gestaltet. Bearbeitet Sep. 03 von Bodo Wiska. &#91;&#91;de:Bild:Karte Korfu.png]])</em></li> <li>27 apr 2004 20:04 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bild_Korfu.png|Bild_Korfu.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Bild Korfu 2000 von Bodo Wiska, eigene Aufnahme von Strand von Glyfada, nachbearbeitet 2003 für WIKI &#91;&#91;Benutzer:Wiska Bodo&#124;Bo]] 03:06, 26. Jul 2003 (CEST) &#91;&#91;de:Bild:Bild Korfu.png]])</em></li> <li>27 apr 2004 19:59 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Fuji_mt_s.jpg|Fuji_mt_s.jpg]]" <em>(Van en: wiki copyright-free from http&#58;//www.mars.dti.ne.jp/~blues/pps/index-photo.html#landscape_1 TakuyaMurata (12359 bytes) (small version) )</em></li> <li>27 apr 2004 19:46 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:VitamineB2.png|VitamineB2.png]]" <em>(Van fr: wiki . Yohan (5084 octets) (Structure de la vitamine B2) Auteur : Yohan Source : Cr&amp;#9500;&amp;#174;e avec MarvinSketch Licence : GFLD )</em></li> <li>27 apr 2004 19:36 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Beke_image.jpg|Beke_image.jpg]]" <em>(Frank Beke)</em></li> <li>27 apr 2004 19:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Hamburg_Hafen_Containerterminal.jpg|Hamburg_Hafen_Containerterminal.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Containerterminal im Hafen Hamburg Selbst fotografiert am 02. Januar 2004. Das Foto unterliegt der GFDL. &#91;&#91;de:Bild:Hamburg Hafen Containerterminal.jpg]])</em></li> <li>27 apr 2004 19:21 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Freya_image.jpg|Freya_image.jpg]]" <em>(Freya Van den Bossche)</em></li> <li>27 apr 2004 19:18 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:250px-Iraq-flag.gif|250px-Iraq-flag.gif]]" <em>(van en: wikipedia)</em></li> <li>27 apr 2004 19:18 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:150px-Iraq-flag.gif|150px-Iraq-flag.gif]]" <em>(van en: wikipedia)</em></li> <li>27 apr 2004 19:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Container_ship_loading-700px.jpg|Container_ship_loading-700px.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Photo of container ship loading at Copenhagen, taken August 2003 by Stan Shebs and licensed under GFDL, 700px across &#91;&#91;en:Image:Container ship loading-700px.jpg]])</em></li> <li>27 apr 2004 19:04 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Carte_Localisation_Région_France_Alsace.png|Carte_Localisation_Région_France_Alsace.png]]" <em>(Van fr: wiki Rinaldum (17766 octets) (\Carte_Localisation_R&amp;#9500;&amp;#174;gion_France_Auvergne licence GPL) Source:Cr&amp;#9500;&amp;#174;e par Rinaldum a partir d&#39;un image libre de droits de l&#39;IGN a cette adresse icence: GFDL )</em></li> <li>27 apr 2004 18:56 [[Gebruiker:Maartentje|Maartentje]] heeft ge-upload: "[[:Afbeelding:Voskenslaan_image.jpg|Voskenslaan_image.jpg]]" <em>(Voskenslaan)</em></li> <li>27 apr 2004 18:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Gemeine_Kiefer.jpg|Gemeine_Kiefer.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Gemeine Kiefer aus englischer Wikipedia: selbst fotographiert von Ramin Nakisa (siehe dessen Benutzerdiskussion) &#91;&#91;de:Bild:Gemeine Kiefer.jpg]])</em></li> <li>27 apr 2004 18:52 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Douglas_fir_malecone_reduced.jpg|Douglas_fir_malecone_reduced.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Douglas-fir (&#39;&#39;Pseudotsuga&#39;&#39;) branch close up. Taken by Eric Guiinther and released under the GNU Free Documentation License. Reduced version of photo at &#91;&#91;:Image:Douglas_fir_malecone.jpg]]. &#91;&#91;en:Image:Douglas fir malecone reduced.jpg]])</em></li> <li>27 apr 2004 18:47 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:LocationDRCongo.png|LocationDRCongo.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Location map for the Democratic Republic of the Congo &#91;&#91;en:Image:LocationDRCongo.png]])</em></li> <li>27 apr 2004 18:39 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Fanglomerate-above_Mesquite_Springs_in_Death_Valley_NP.JPG|Fanglomerate-above_Mesquite_Springs_in_Death_Valley_NP.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Photo by &#91;&#91;user:maveric149&#124;Daniel Mayer]]. Released under terms of the &#91;&#91;GNU FDL]] &#91;&#91;en:Image:Fanglomerate-above Mesquite Springs in Death Valley NP.JPG]])</em></li> <li>27 apr 2004 18:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Variable_kondensatorer.jpg|Variable_kondensatorer.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-da. De beschrijving daar was: Fra venstre; trimmekondensatorer ke-, luft-, folie-, folie-, ke-, glimmer-, folie-, folie-kondensator. Den sidste er en afstemningskondensator. Billedet er udgivet under GFDL. &#91;&#91;da:Billede:Variable kondensatorer.jpg]])</em></li> <li>27 apr 2004 18:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Tantalkondensatorer.jpg|Tantalkondensatorer.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-da. De beschrijving daar was: Billede af tantalkondensatorer. &#91;&#91;da:Billede:tantalkondensatorer.jpg]])</em></li> <li>27 apr 2004 18:33 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Elektrolytkondensatorer.jpg|Elektrolytkondensatorer.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-da. De beschrijving daar was: Billede af elektrolytkondensatorer. &#91;&#91;da:Billede:elektrolytkondensatorer.jpg]])</em></li> <li>27 apr 2004 18:26 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Keramiske_kondensatorer.jpg|Keramiske_kondensatorer.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-da. De beschrijving daar was: Billede af keramiske kondensatorer. &#91;&#91;da:Billede:keramiske kondensatorer.jpg]])</em></li> <li>27 apr 2004 18:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Principtegning_af_elektrisk_kondensator.jpg|Principtegning_af_elektrisk_kondensator.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-da. De beschrijving daar was: Hjemmelavet computergrafik der viser en elektrisk kondensators principielle opbygning.&lt;BR&gt; Udarbejdet af &#91;&#91;Bruger:Peo&#124;Peo]] 26/10-2003, prim&amp;aelig;rt ved hj&amp;aelig;l af programmet &amp;quot;Persistence of Vision Raytracer&amp;quot;. &lt;B&gt;BEM&amp;AElig;RK&lt;/B&gt;: Ved en fejl &amp;quot;lykkedes&amp;quot; det mig at uploade et billede magen til under navnet &amp;quot;Principtegning af lektrisk kondensator.jpg&amp;quot; (f&amp;oslash;rste &amp;quot;e&amp;quot; udeladt i ordet &amp;quot;elektrisk&amp;quot;). Kunne en administrator med beh&amp;oslash;rige rettigheder v&amp;aelig;re rar at slette billedet med det fejlgtige navn &amp;quot;Principtegning af en lektrisk kondensator&amp;quot;? &#91;&#91;da:Billede:Principtegning af elektrisk kondensator.jpg]])</em></li> <li>27 apr 2004 18:22 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Condensators.JPG|Condensators.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Capacitors/Condensators from German wiki &#91;&#91;en:Image:Condensators.JPG]])</em></li> <li>27 apr 2004 18:19 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Kondensator.png|Kondensator.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Kondensator &#91;&#91;de:Bild:Kondensator.png]])</em></li> <li>27 apr 2004 18:06 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Diag_phase_eau.png|Diag_phase_eau.png]]" <em>(Van fr: wiki, . Cdang (2747 octets) (Diagramme de phase de l&#39;eau pour des pression et temp&amp;#9500;&amp;#174;ratures terrestres) in de afbeelding enkel vertaald in het Nederlands)</em></li> <li>27 apr 2004 17:56 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Tennyson.jpg|Tennyson.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Public domain image from http&#58;//www.lib.utexas.edu/photodraw/portraits/ Cropped and resized. Original source:&lt;br&gt;Duyckinick, Evert A. &#39;&#39;Portrait Gallery of Eminent Men and Women in Europe and America&#39;&#39;. New York: Johnson, Wilson &amp; Company, 1873. &#91;&#91;en:Image:tennyson.jpg]])</em></li> <li>27 apr 2004 17:54 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:120px-Iraq-flag.gif|120px-Iraq-flag.gif]]" <em>(van en:wikipedia)</em></li> <li>27 apr 2004 17:30 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Harvestman-lg.jpg|Harvestman-lg.jpg]]" <em>(Van en: wiki CatherineMunro (79011 bytes) (Harvestman/Opiliones, large) )</em></li> <li>27 apr 2004 16:31 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Interferens_bag_dobbeltspalte.jpg|Interferens_bag_dobbeltspalte.jpg]]" <em>(Van da: wiki Peo (13207 bytes) (Viser b°lger der passerer en dobbeltspalte, med angivelse af alle relevante mÕl, vinkler og ordener) Lavet af Peo torsdag den 29. januar 2004, ved hjµlp af POV-Ray. )</em></li> <li>27 apr 2004 14:10 [[Gebruiker:Kafr9333|Kafr9333]] heeft ge-upload: "[[:Afbeelding:Koperen_Tuin.doc|Koperen_Tuin.doc]]" <em>(Bespreking &quot;Koperen Tuin&quot; van Simon Vestdijk)</em></li> <li>27 apr 2004 13:50 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Test.gif|Test.gif]]" <em>(Tijdelijk bestand, voldoet NIET aan GNU/FDL)</em></li> <li>27 apr 2004 13:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bogojk.jpg|Bogojk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 13:39 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Blackjk.jpg|Blackjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 13:34 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Birdjk.jpg|Birdjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 13:29 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Benkojk.jpg|Benkojk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 13:22 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Damejk.jpg|Damejk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 13:18 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Byrnejk.jpg|Byrnejk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 13:11 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Awerjk.jpg|Awerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 13:05 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Hugorm-Ravnsholt-Kattehale-040424.jpg|Hugorm-Ravnsholt-Kattehale-040424.jpg]]" <em>(da: wikipedia)</em></li> <li>27 apr 2004 13:05 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Alljk.jpg|Alljk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 13:00 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Aljechinjk.jpg|Aljechinjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 12:57 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Albinjk.jpg|Albinjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 12:52 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Water_hyacinth.jpg|Water_hyacinth.jpg]]" <em>(En: wikipedia)</em></li> <li>27 apr 2004 12:51 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Alapinjk.jpg|Alapinjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 12:39 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gellerjk.jpg|Gellerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 12:29 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Landaujk.jpg|Landaujk.jpg]]" <em>(Fritz8 - print)</em></li> <li>27 apr 2004 11:49 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Munnikezijlsterriet3.JPG|Munnikezijlsterriet3.JPG]]" <em>(Eigen foto)</em></li> <li>27 apr 2004 11:49 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Munnikezijlsterriet2.JPG|Munnikezijlsterriet2.JPG]]" <em>(Eigen foto)</em></li> <li>27 apr 2004 11:48 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Munnikezijlsterriet1.JPG|Munnikezijlsterriet1.JPG]]" <em>(Eigen foto)</em></li> <li>27 apr 2004 08:43 [[Gebruiker:Bontenbal|Bontenbal]] heeft ge-upload: "[[:Afbeelding:Margot_wallstrom.jpg|Margot_wallstrom.jpg]]" <em>(Website EU, mag voor niet commerciele doeleinden gebruikt worden)</em></li> <li>27 apr 2004 07:07 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Reitdiep_2.JPG|Reitdiep_2.JPG]]" <em>(Eigen foto)</em></li> <li>27 apr 2004 07:07 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Reitdiep_1.JPG|Reitdiep_1.JPG]]" <em>(Eigen foto)</em></li> <li>27 apr 2004 06:34 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Lapwing352.jpg|Lapwing352.jpg]]" <em>(En: wikipedia)</em></li> <li>27 apr 2004 06:27 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Klein_kruiskruid_plant.jpg|Klein_kruiskruid_plant.jpg]]" <em>(zelfgemaakte foto; klein kruiskruid plant eind april)</em></li> <li>27 apr 2004 06:22 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Klein_kruiskruid_closeup.jpg|Klein_kruiskruid_closeup.jpg]]" <em>(zelfgemaakte foto; klein kruiskruid bloemhoofdje met zaadpluis)</em></li> <li>27 apr 2004 05:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Pd3.jpg|Pd3.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Renderbild aus AutoCAD &#91;&#91;de:Bild:Pd3.jpg]])</em></li> <li>27 apr 2004 05:24 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lautsprecher_gr.jpg|Lautsprecher_gr.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Lautsprecher mit dem CAD-Programm CATIA V5 erstellt Quelle: selbst Lizenz: GNU Freie Dokumentationslizenz &#91;&#91;de:Bild:Lautsprecher gr.jpg]])</em></li> <li>27 apr 2004 05:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Qcad_gr.jpg|Qcad_gr.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: CAD Programm QCad - Darstellung einer Schraube Quelle: selbst / Lizenz: GNU Freie Dokumentationslizenz &#91;&#91;de:Bild:Qcad gr.jpg]])</em></li> <li>27 apr 2004 03:44 [[Gebruiker:Jcwf|Jcwf]] heeft ge-upload: "[[:Afbeelding:Pommerenriet.jpg|Pommerenriet.jpg]]" <em>(eigen foto mrt toestemming eigenaars instrumenten, pommers met rieten)</em></li> <li>27 apr 2004 02:37 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Gaskessel_kl.jpg|Gaskessel_kl.jpg]]" <em>(Van de: wiki Igelball (15539 Byte) (Gaskessel (kleines Bild)) )</em></li> <li>27 apr 2004 01:13 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Nipkow-scheibe.png|Nipkow-scheibe.png]]" <em>(Van de: wiki Hzeller (14010 Byte) (Schematische Darstellung einer)</em></li> <li>27 apr 2004 00:14 [[Gebruiker:Nobody.de|Nobody.de]] heeft ge-upload: "[[:Afbeelding:200px-Brancusi.JPG|200px-Brancusi.JPG]]"</li> <li>26 apr 2004 22:01 [[Gebruiker:Nobody.de|Nobody.de]] heeft ge-upload: "[[:Afbeelding:Eishockey_Eisbaeren_gegen_Capitals.jpg|Eishockey_Eisbaeren_gegen_Capitals.jpg]]" <em>(David Herrmann (mit Genehmigung des EHC Eisbären))</em></li> <li>26 apr 2004 21:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ba.concorde.g-boac.719pix.jpg|Ba.concorde.g-boac.719pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: British Airways Concorde G-BOAC&lt;br&gt; Photographed by Derek Pedley and used with his permission.&lt;br&gt; Picture prepared for this site in March 2003 by Adrian Pingstone. &#91;&#91;en:Image:ba.concorde.g-boac.719pix.jpg]])</em></li> <li>26 apr 2004 21:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Concorde_crash.jpg|Concorde_crash.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A picture of the concorde moments before the crash. Taken by an ameteur photographer Photo from BBC news &#61;=Enternal Links== &#91;http&#58;//news.bbc.co.uk/1/hi/world/europe/851119.stm This is the page where this image comes from.] &#91;&#91;en:Image:Concorde crash.jpg]])</em></li> <li>26 apr 2004 21:48 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Concorde.lastflight.arp.750pix.jpg|Concorde.lastflight.arp.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Concorde 216 (G-BOAF) passes over the A38 road on the final ever Concorde landing at Filton, Bristol, England.&lt;br&gt; Taken by Adrian Pingstone on 26th November 2003 and placed in the public domain. &#91;&#91;en:Image:concorde.lastflight.arp.750pix.jpg]])</em></li> <li>26 apr 2004 21:21 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CD-ROM.jpg|CD-ROM.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Eine CD zur Illustration bei &#91;&#91;Information]]. Von http&#58;//www.sxc.hu/browse.phtml?f=view&amp;id=66755 - &quot;There are no usage restrictions for this photo&quot; &#91;&#91;de:Bild:Information.jpg]])</em></li> <li>26 apr 2004 21:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:LakeComoFromTheSky.jpg|LakeComoFromTheSky.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A view of the &#91;&#91;Lake of Como]] from the sky taken by &#91;&#91;User:LazLong&#124;Laz]] on June 15, 2003 &#91;&#91;en:Image:LakeComoFromTheSky.jpg]])</em></li> <li>26 apr 2004 21:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Communist-manifesto.png|Communist-manifesto.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: the cover of communist-manifesto, from www.marxists.org, under Free Documentation License &#91;&#91;en:Image:communist-manifesto.png]])</em></li> <li>26 apr 2004 21:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Hmrsckl.png|Hmrsckl.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Hammer and sickle, symbol representing Communism, Communist parties, Communist countries, etc. &#91;&#91;en:Image:hmrsckl.png]])</em></li> <li>26 apr 2004 20:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:MOS_Technologies.jpg|MOS_Technologies.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Image of circuits from &#91;&#91;MOS Technologies]]. Taken by myself, placed under the &#91;&#91;GNU FDL]]. &#91;&#91;User:Nixdorf&#124;Nixdorf]] 19:51, 4 Feb 2004 (UTC) &#91;&#91;en:Image:MOS Technologies.jpg]])</em></li> <li>26 apr 2004 20:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Coma_berenices_constellation_map.png|Coma_berenices_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Coma Berenices, Berenice&#39;s Hair. Copyright &amp;copy; 2003 &#91;mailto:bronger@physik.rwth-aachen.de Torsten Bronger]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 15/02/1003. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line isx the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the azimuthal equidistant projection (the azimuth being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Coma berenices constellation map.png]])</em></li> <li>26 apr 2004 20:45 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:RMOV0020.rm|RMOV0020.rm]]" <em>(test)</em></li> <li>26 apr 2004 20:43 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Columba_constellation_map.png|Columba_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Columba, the Dove. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/09/06. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Columba constellation map.png]])</em></li> <li>26 apr 2004 20:42 [[Gebruiker:Snoop|Snoop]] heeft ge-upload: "[[:Afbeelding:ClarkGable.jpg|ClarkGable.jpg]]" <em>(Clark Gable van Spaanse wiki)</em></li> <li>26 apr 2004 20:37 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:RMOV0020.rm|RMOV0020.rm]]" <em>(test4, nu als rm)</em></li> <li>26 apr 2004 20:36 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Colisee.jpg|Colisee.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Copyright: Arnaud Gaillard (arnaud at amarys.com) Cette image est sous license &#39;&#39;&#39;Creative common Attribution-ShareAlike License&#39;&#39;&#39; &#91;&#91;http&#58;//creativecommons.org/licenses/by-sa/1.0/]] &#91;&#91;fr:Image:Colisee.jpg]])</em></li> <li>26 apr 2004 20:35 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Colisee-romain.png|Colisee-romain.png]]" <em>(Vanaf Franse wikipedia &#91;&#91;fr:Image:colisee-romain.png]])</em></li> <li>26 apr 2004 20:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Corn_production_in_Colorado.jpg|Corn_production_in_Colorado.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Image Number K4250-8 Corn production in Colorado. Photo by Scott Bauer. &#39;&#39;&#39;Source&#39;&#39;&#39;: http&#58;//www.ars.usda.gov/is/graphics/photos/k4250-8.htm ---- &#123;&#123;msg:PD}} &#91;&#91;en:Image:Corn production in Colorado.jpg]])</em></li> <li>26 apr 2004 20:22 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Longs_Peak.jpg|Longs_Peak.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Image Number K7679-3 Snowpack accumulation at 14,255 ft. on Longs Peak in Rocky Mountain National Park, Colorado. Photo by Scott Bauer. &#39;&#39;&#39;Source&#39;&#39;&#39;: http&#58;//www.ars.usda.gov/is/graphics/photos/k7679-3.htm ---- &#123;&#123;msg:PD}} &#91;&#91;en:Image:Longs Peak.jpg]])</em></li> <li>26 apr 2004 20:20 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Coloradostateseal.jpg|Coloradostateseal.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: from www.usembassy.de &#91;&#91;en:Image:Coloradostateseal.jpg]])</em></li> <li>26 apr 2004 20:19 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Us-co.png|Us-co.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: converting gif to png and uploading from metawikipedia &#91;&#91;en:Image:us-co.png]])</em></li> <li>26 apr 2004 20:10 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Bluequail05.jpg|Bluequail05.jpg]]" <em>(Van en: wiki Jimfbleak (27393 bytes) (Blue-breasted Quail, my photo) )</em></li> <li>26 apr 2004 20:05 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Latin_alphabet_Xx.png|Latin_alphabet_Xx.png]]" <em>(Van en: wiki Nate Silva (2182 bytes) (Latin alphabet Xx in Helvetica 55 and Times LT Regular))</em></li> <li>26 apr 2004 19:59 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Coleman_Hawkins.jpg|Coleman_Hawkins.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: from www.cs.princeton.edu/ ~ken/gallery.html &#123;&#123;msg:unverified}} &#91;&#91;en:Image:Hawkins2.jpg]])</em></li> <li>26 apr 2004 19:53 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:RMOV0024.AVI|RMOV0024.AVI]]" <em>(test2)</em></li> <li>26 apr 2004 19:52 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Codeine.jpg|Codeine.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: http&#58;//www.drugs.indiana.edu/prevention/iprcpics.html &#91;&#91;en:Image:Codeine.jpg]])</em></li> <li>26 apr 2004 19:51 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Bevolkingsdichtheid.jpg|Bevolkingsdichtheid.jpg]]" <em>(Vergat het jaartal erbij te zetten)</em></li> <li>26 apr 2004 19:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Kokosinseln.jpg|Kokosinseln.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Karte der Kokosinseln, public domain aus dem CIA World Factbook &#91;&#91;de:Bild:Kokosinseln.jpg]])</em></li> <li>26 apr 2004 19:47 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Bevolkingsdichtheid.jpg|Bevolkingsdichtheid.jpg]]" <em>(Van de: wiki (Weltkarte: Bev÷lkerungsdichte, Stand 1994) created by: The National Center for Geographic Information and Analysis (NCGIA) http&#58;//www.ncgia.ucsb.edu/ enkel vertaald in het Nederlands)</em></li> <li>26 apr 2004 19:34 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Ferromagnetism.png|Ferromagnetism.png]]" <em>(Van jp: wiki, help, ik kan het Japans niet lezen)</em></li> <li>26 apr 2004 19:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cocaine.png|Cocaine.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: molécule de cocaine Copyright: Arnaud Gaillard (arnaud at amarys.com) Cette image est sous license &#39;&#39;&#39;Creative common Attribution-ShareAlike License&#39;&#39;&#39; &#91;&#91;http&#58;//creativecommons.org/licenses/by-sa/1.0/]] &#91;&#91;fr:Image:cocaine.png]])</em></li> <li>26 apr 2004 19:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cocaine3.jpg|Cocaine3.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Cocaine powder &#91;&#91;en:Image:Cocaine3.jpg]])</em></li> <li>26 apr 2004 19:08 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Guy_Verhofstadt.jpg|Guy_Verhofstadt.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Guy Verhofstadt &#61;= Quelle == http&#58;//www.france.diplomatie.fr/photos/diplo/partenair/belgique15.html#photo Französisches Außenministerium, Abteilung Fotografien ministère des Affaires étrangères/Service photographique &#61;= Lizenz == &#39;&#39;Les &quot;Instantanés diplomatiques&quot; sont libres de droits et peuvent être reproduits avec mention obligatoire &quot;ministère des Affaires étrangères/Service photographique&quot;. Pour tout usage exclusivement professionnel, des duplicatas sont disponibles sur demande auprès du service photographique du ministère des Affaires étrangères.&#39;&#39; (&#39;&#39;Die &quot;Schnappschüsse diplomatischer Begegnungen&quot; sind copyrightfrei, sie dürfen mit dem Vermerk &quot;Französisches Außenministerium, Abteilung Fotografien&quot; reproduziert werden. Für rein kommerzielle Verwendungszwecke sind auf Anfrage bei der Abteilung Fotografien im französischen Außenministerium Kopien erhältlich.&#39;&#39;) &#61;= Originalbeschreibung == &#39;&#39;Accueil de M. Guy Verhofstadt, Premier ministre belge, par M. Jacques Chirac, président de la République (perron de l&#39;Elysée). 10 septembre 2002.&#39;&#39; &#91;&#91;de:Bild:Guy Verhofstadt.jpg]])</em></li> <li>26 apr 2004 19:06 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Gallapfel2.jpg|Gallapfel2.jpg]]" <em>(Van de: wiki Thomasgl (5961 Byte) (Makroaufnahme eines Gallapfels) Makroaufnahme eines Gallapfels, aufgenommen mit einer Digitalkamera von Thomasgl, am 12.10.2003 Der Durchmesser des Objektes betrõgt knapp 1 cm)</em></li> <li>26 apr 2004 18:56 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Kernfusie_dt_reactie.png|Kernfusie_dt_reactie.png]]" <em>(Deuterium fusie-reactie; Bron: Wikipedia.en; geupload door Kristof vt, vertaald door mij; &#123;&#123;msg:GFDL}})</em></li> <li>26 apr 2004 18:47 [[Gebruiker:Nobody.de|Nobody.de]] heeft ge-upload: "[[:Afbeelding:Tors_strid_med_jättarna_av_MÃ¥rten_Eskil_Winge.jpg|Tors_strid_med_jättarna_av_MÃ¥rten_Eskil_Winge.jpg]]" <em>(Ã¥tergÃ¥ till en gammal version)</em></li> <li>26 apr 2004 18:04 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Human-woman.png|Human-woman.png]]" <em>(Van en: wiki Sverdrup (8081 bytes) (Cropped from &#91;&#91;Image:Human.png]]) Detail from Pioneer 11 spacecraft picture, showing a man and a woman. Derived from a public domain NASA image GNU FDL Modemac (15724 bytes) )</em></li> <li>26 apr 2004 17:59 [[Gebruiker:Evanherk|Evanherk]] heeft ge-upload: "[[:Afbeelding:Neutron_proton_ratio.gif|Neutron_proton_ratio.gif]]" <em>(Overgenomen uit engelse wiki)</em></li> <li>26 apr 2004 17:57 [[Gebruiker:Evanherk|Evanherk]] heeft ge-upload: "[[:Afbeelding:Nuclear_fission.gif|Nuclear_fission.gif]]" <em>(overgenomen uit engelse wiki)</em></li> <li>26 apr 2004 17:34 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Chnum.jpg|Chnum.jpg]]" <em>(Van en: wiki RickK (3820 bytes) (Chnum) )</em></li> <li>26 apr 2004 17:23 [[Gebruiker:Nobody.de|Nobody.de]] heeft ge-upload: "[[:Afbeelding:Karte_gelsenkirchen_in_deutschland.png|Karte_gelsenkirchen_in_deutschland.png]]" <em>(GNU free)</em></li> <li>26 apr 2004 17:22 [[Gebruiker:Nobody.de|Nobody.de]] heeft ge-upload: "[[:Afbeelding:Gelsenkirchen-wappen_kl.jpg|Gelsenkirchen-wappen_kl.jpg]]" <em>(GNU free)</em></li> <li>26 apr 2004 14:40 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Ferdinand_i_twosicilies.jpeg.jpeg|Ferdinand_i_twosicilies.jpeg.jpeg]]" <em>(Ferdinand I der Beide Siciliën (van Engelse Wiki))</em></li> <li>26 apr 2004 11:48 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Pconcorde.jpg|Pconcorde.jpg]]" <em>(Place de la Concorde, Parijs, in de richting van de Madeleine-kerk. Foto: &#91;http&#58;//www.sxc.hu/browse.phtml?f=profile&amp;l=holson Jake Holson]. Vrij te gebruiken.)</em></li> <li>26 apr 2004 11:02 [[Gebruiker:Roepersbot|Roepersbot]] heeft ge-upload: "[[:Afbeelding:Wien_hundertwasserhaus.jpg|Wien_hundertwasserhaus.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Wien, Hundertwasserhaus, 2002-09-17 / selbstfotografiert / der GNU-Lizenz unterstellt &#91;&#91;de:Bild:Wien hundertwasserhaus.jpg]] &#123;&#123;msg:GFDL}})</em></li> <li>26 apr 2004 10:49 [[Gebruiker:Nobody.de|Nobody.de]] heeft ge-upload: "[[:Afbeelding:FCSchalke04.png|FCSchalke04.png]]" <em>(from http&#58;//www.hqfl.dk (free to use as long credits remain).&quot;))</em></li> <li>26 apr 2004 10:45 [[Gebruiker:Nobody.de|Nobody.de]] heeft ge-upload: "[[:Afbeelding:Schalke_04.png|Schalke_04.png]]" <em>(from http&#58;//www.hqfl.dk (free to use as long credits remain).&quot;))</em></li> <li>26 apr 2004 10:43 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Vierkant2.jpg|Vierkant2.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 apr 2004 10:31 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Schalke_04.png|Schalke_04.png]]" <em>(Ik dacht slim te zijn...)</em></li> <li>26 apr 2004 10:30 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Schalke_04.png|Schalke_04.png]]" <em>(&#91;&#91;en:Image:Schalke 04.png]] Afbeelding van de Engelse wiki: &quot;Symbol of &#91;&#91;soccer]] team &#91;&#91;FC Schalke 04]], from http&#58;//www.hqfl.dk (free to use as long credits remain).&quot;)</em></li> <li>26 apr 2004 10:07 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Vierkant2.jpg|Vierkant2.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 apr 2004 10:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Vierkant1.jpg|Vierkant1.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 apr 2004 09:40 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Meranerjk.jpg|Meranerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>26 apr 2004 09:35 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Dreev.jpg|Dreev.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>26 apr 2004 09:32 [[Gebruiker:SanderSpek|SanderSpek]] heeft ge-upload: "[[:Afbeelding:Enci2.JPG|Enci2.JPG]]" <em>(ENCI in Maastricht. Eigen foto.)</em></li> <li>26 apr 2004 09:32 [[Gebruiker:SanderSpek|SanderSpek]] heeft ge-upload: "[[:Afbeelding:Enci1.JPG|Enci1.JPG]]" <em>(ENCI in Maastricht. Eigen foto.)</em></li> <li>26 apr 2004 07:52 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Georg_Victor_II.bmp|Georg_Victor_II.bmp]]" <em>(Uit boekje over Koningin Emma)</em></li> <li>26 apr 2004 07:47 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:GreeceCrete.png|GreeceCrete.png]]" <em>(Van en: wiki Morwen (21914 bytes) (map of greek prefecture) GNU FDL)</em></li> <li>26 apr 2004 07:27 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Friedrich_Waldeck_Pyrmont_1_.jpg|Friedrich_Waldeck_Pyrmont_1_.jpg]]" <em>(Afkomstig van http&#58;//www.deutsche-schutzgebiete.de/fuerstentum_waldeck.htm)</em></li> <li>26 apr 2004 03:52 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Ecliptica.png|Ecliptica.png]]" <em>(xfig vervormde het plaatje, ik heb er een eigen versie van gemaakt)</em></li> <li>26 apr 2004 03:32 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Ecliptica.png|Ecliptica.png]]" <em>(Van de: wiki G.Piezinger (4436 Byte) Quelle: Selber schnell mit AppleWorks zusammengeklickt Autor: Gerhard Piezinger Lizenzstatus: GNU FDL Enkel vertaald in het Nederlands in de afbeelding)</em></li> <li>26 apr 2004 03:11 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GewoneVogelmelk-plant-hr.jpg|GewoneVogelmelk-plant-hr.jpg]]" <em>(eigen foto, laan van eik en duinen den haag)</em></li> <li>26 apr 2004 03:06 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GewoneVogelmelk-bloem-hr.jpg|GewoneVogelmelk-bloem-hr.jpg]]" <em>(eigen foto, laan van eik en duinen den haag)</em></li> <li>26 apr 2004 02:48 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Pireuslejonet.jpg|Pireuslejonet.jpg]]" <em>(Van sv: wiki . Den fjõttrade ankan (26485 bytes) (PD-bild))</em></li> <li>26 apr 2004 01:23 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Ribosome.png|Ribosome.png]]" <em>(Van en: wiki http&#58;//www.nupedia.com/newsystem/upload_file/869/ribosome.png Dominus 06:18 Apr 20, 2003 (UTC) Dominus (2252 bytes) (Operation of ribosome) )</em></li> <li>26 apr 2004 01:20 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:American-Bison-s.jpg|American-Bison-s.jpg]]" <em>(Van en: wiki Tannin (8225 bytes) (cropped version of American_bison_thumbnail.jpg) )</em></li> <li>26 apr 2004 00:16 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Sextant.gif|Sextant.gif]]" <em>(sextant van wiki-en (lijkt me oud genoeg))</em></li> <li>26 apr 2004 00:10 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Maulwurf.jpg|Maulwurf.jpg]]" <em>( Anne Simon: heeft toegestemd dat foto gebruikt wordt mits copyright vermeld wordt.)</em></li> <li>25 apr 2004 23:38 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladluis_kerstroos.jpg|Bladluis_kerstroos.jpg]]" <em>(zelfgemaakte foto; kolonie bladluizen op kerstroos (volwassen en jonge bladluizen)</em></li> <li>25 apr 2004 22:24 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:Lambang_sahara_barat.png|Lambang_sahara_barat.png]]" <em>(Wapen van Westelijke Sahara - overgenomen van en:Wikipedia)</em></li> <li>25 apr 2004 21:15 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:UtrechtLocatie.png|UtrechtLocatie.png]]" <em>(Slordig opgeslagen. Bestandsgrootte gevierendeeld.)</em></li> <li>25 apr 2004 21:09 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:FlevolandLocatie.png|FlevolandLocatie.png]]" <em>(Slordig opgeslagen. Bestandsgrootte gevierendeeld.)</em></li> <li>25 apr 2004 21:08 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:FlevolandLocatie.png|FlevolandLocatie.png]]" <em>(Slordig opgeslagen. Bestandsgrootte gevierendeeld.)</em></li> <li>25 apr 2004 21:02 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:NoordBrabantLocatie.png|NoordBrabantLocatie.png]]" <em>(Slordig opgeslagen. Bestandsgrootte gevierendeeld.)</em></li> <li>25 apr 2004 20:15 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Pentium.jpg|Pentium.jpg]]" <em>(Foto Pentium CPU-World)</em></li> <li>25 apr 2004 19:12 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Coca-Cola.jpg|Coca-Cola.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Coca-Cola-Dosen &#61;= Quelle == PixelQuelle.de &#91;http&#58;//www.pixelquelle.de/download.php?image_id=196] &#61;= Fotograf == Markus Hein &#61;= Lizenz == Alle PixelQuelle.de Fotos dürfen ohne weitere Kosten für kommerzielle und nicht kommerzielle Projekte/Werke genutzt werden. Ausgeschlossen hiervon sind Bilddatenbanken, Bildkataloge oder ähnliche, bei denen PixelQuelle.de Fotos zum Download oder Verkauf angeboten werden. Bei jeglicher Verwendung von PixelQuelle.de Fotos ist im Impressum PixelQuelle.de als Bildquelle anzugeben. Die pornographische, diffamierend, verleumderische oder anderweitig gesetzwidrige Verwendung der PixelQuelle.de Fotos ist nicht gestattet und wird gegebenenfalls strafrechtlich verfolgt. &#91;&#91;de:Bild:Coca-Cola.jpg]])</em></li> <li>25 apr 2004 19:12 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cokebottle.jpg|Cokebottle.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: http&#58;//www.cdf.org/cdf/atissue/vol2_2/cocacola/cocacola.html &#91;&#91;en:Image:Cokebottle.jpg]])</em></li> <li>25 apr 2004 19:01 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Kongo-Kinshasa_med_Katanga.png|Kongo-Kinshasa_med_Katanga.png]]" <em>(Van en: wiki Morwen (15949 bytes) (locator map showing a province of the &#91;&#91;Democratic)</em></li> <li>25 apr 2004 18:54 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Rockeye.jpg|Rockeye.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Marquardt CBU Mark 20 &quot;Rockeye II&quot; Cluster Bomb Quelle: http&#58;//www.hill.af.mil/museum/photos/coldwar/coldwar.htm public domain &#91;&#91;de:Bild:Rockeye.jpg]])</em></li> <li>25 apr 2004 18:47 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Faeroer-briefmarke-europa-2002.jpg|Faeroer-briefmarke-europa-2002.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: Europa-Marke 2002 der &#91;&#91;Färöer]] zum Thema &#91;&#91;Zirkus]] *Künstlerin: &#39;&#39;&#39;Anna Katrina Olsen&#39;&#39;&#39; (damals 13 Jahre alt) *Lizenz: &#91;&#91;Public Domain]] &#91;&#91;de:Bild:Faeroer-briefmarke-europa-2002.jpg]])</em></li> <li>25 apr 2004 18:47 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Betonning.jpg|Betonning.jpg]]" <em>(Betonning langs de IJssel bij Wijhe, eigen foto, &#123;&#123;msg:PD}})</em></li> <li>25 apr 2004 18:34 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Pope-paul3.jpg|Pope-paul3.jpg]]" <em>(En: wikipedia)</em></li> <li>25 apr 2004 18:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Filmed_cleopatra_plays.JPG|Filmed_cleopatra_plays.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: videotape covers for shaw &amp; shakespeare plays about cleopatra &#91;&#91;en:Image:filmed cleopatra plays.JPG]])</em></li> <li>25 apr 2004 18:31 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ac.cleopatra.jpg|Ac.cleopatra.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Cleopatra &#91;&#91;en:Image:ac.cleopatra.jpg]])</em></li> <li>25 apr 2004 18:27 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Flemish_harpsichord_Small.jpg|Flemish_harpsichord_Small.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Smaller version of User:Gerard&#39;s Flemish harpsichord image &#91;&#91;en:Image:Flemish harpsichord Small.jpg]])</em></li> <li>25 apr 2004 18:12 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:ClaraHughes-cycle.jpg|ClaraHughes-cycle.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Clara Huges image (cropped)from: http&#58;//www.nlc-bnc.ca/olympians/h15-114-e.html From the National Library and Archives of Canada : &quot;&#39;&#39;Images contributed to this database by the Canadian Olympic Committee (COC) may be reproduced for non-commercial purposes without asking permission from the COC or paying copyright royalty&#39;&#39;.&quot; &#123;&#123;msg:noncommercial}} &#91;&#91;en:Image: ClaraHughes-cycle.jpg]])</em></li> <li>25 apr 2004 18:11 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:ClaraHughes-skate.jpg|ClaraHughes-skate.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Image from: http&#58;//www.nlc-bnc.ca/olympians/h15-114-e.html From the National Library and Archives of Canada : &quot;&#39;&#39;Images contributed to this database by the Canadian Olympic Committee (COC) may be reproduced for non-commercial purposes without asking permission from the COC or paying copyright royalty&#39;&#39;.&quot; &#123;&#123;msg:noncommercial}} &#91;&#91;en:Image: ClaraHughes-skate.jpg]])</em></li> <li>25 apr 2004 18:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:ClaraHughes-skate.jpg|ClaraHughes-skate.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Image from: http&#58;//www.nlc-bnc.ca/olympians/h15-114-e.html From the National Library and Archives of Canada : &quot;&#39;&#39;Images contributed to this database by the Canadian Olympic Committee (COC) may be reproduced for non-commercial purposes without asking permission from the COC or paying copyright royalty&#39;&#39;.&quot; &#123;&#123;msg:noncommercial}} &#91;&#91;en:Image: ClaraHughes-skate.jpg]])</em></li> <li>25 apr 2004 18:08 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Citrus_fruits_thumbnail.jpg|Citrus_fruits_thumbnail.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Citrus fruits thumbnail from http&#58;//www.ars.usda.gov/is/graphics/photos/&lt;br&gt; &#91;&#91;:Image:Citrus fruits.jpg&#124;Larger citrus fruits]] Image Number K7226-29 More than 70 percent of all citrus fruits grown in the United States are varieties developed by the ARS citrus breeding program. In Florida, we&#39;ve come up with citrus varieties that are higher yielding with increased disease resistance, better color, and longer shelf life. A major success story is Ambersweet, a cold-hardy citrus that&#39;s been approved for use in orange juice products. Because it withstands Florida&#39;s occasional cold snaps that can ruin most citrus, Ambersweet is being widely planted in the Sunshine State. It took 20 years of patient breeding to develop it, but the payoff is huge. If there&#39;s usually a grapefruit in your shopping cart, you may already have met up with a favorite ARS-created variety. It&#39;s a red-fleshed, thin-skinned, seedless grapefruit that was developed and released in 1987. Since then, over 4 million Flame nursery trees have been propagated in Florida. No other grapefruit variety has ever been so widely accepted and planted. Orange sections can now be prepared by a patented ARS process that uses commercially available food-grade enzymes. The process also removes the bitter white portion of grapefruit peel, eliminating hand-peeling and allowing more precise portion control. And the prepeeled fruit is ideal for school lunch programs and restaurants. Keeping oranges fresh is another citrus-oriented task we&#39;ve taken on. Oranges that have been covered with our specially designed coating will stay fresh for up to 3 weeks at room temperature. In that time, fruit treated with the usual grocer&#39;s coatings will look shrunken and discolored. Photo by Scott Bauer. &#91;&#91;en:Image:Citrus fruits thumbnail.jpg]])</em></li> <li>25 apr 2004 18:04 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lemon_8FruitAndFlower_wb.jpg|Lemon_8FruitAndFlower_wb.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;&#39;Lemon fruit and flower&#39;&#39;&#39; Taken by &#91;&#91;User:Elf&#124;Elf]] &#124; &#91;&#91;User talk:Elf&#124;Talk]] Apr 15, 2004, San Jose, California &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:Lemon 8FruitAndFlower wb.jpg]])</em></li> <li>25 apr 2004 18:03 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lemon-fruit.jpg|Lemon-fruit.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A complete lemon, and a half lemon showing the flesh. From &lt;code&gt;&#91;http&#58;//sxc.hu/browse.phtml?f=view&amp;id=32619 http&#58;//sxc.hu/browse.phtml?f=view&amp;id=32619]&lt;/code&gt;, 2003-07-02: &quot;There are no usage restrictions for this photo.&quot; &#91;&#91;en:Image:Lemon-fruit.jpg]])</em></li> <li>25 apr 2004 18:03 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Reticulum_constellation_map.png|Reticulum_constellation_map.png]]" <em>(Van en: wiki Bronger (13280 bytes) (Constellation map of Reticulum) )</em></li> <li>25 apr 2004 17:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:LordByron.jpg|LordByron.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: public domain-copy of painting &#91;&#91;en:Image:LordByron.jpg]])</em></li> <li>25 apr 2004 17:28 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Alchemy.jpg|Alchemy.jpg]]" <em>(Van jp: wiki, kan iemand het Japans lezen? Ikkenie)</em></li> <li>25 apr 2004 17:27 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Chemistry_view_01.jpg|Chemistry_view_01.jpg]]" <em>(Van jp: wiki, kan iemand het Japans lezen? Ikkenie)</em></li> <li>25 apr 2004 17:05 [[Gebruiker:Willemdd|Willemdd]] heeft ge-upload: "[[:Afbeelding:BloemenC.jpg|BloemenC.jpg]]" <em>(Eigen foto / bloemencorso)</em></li> <li>25 apr 2004 16:00 [[Gebruiker:Opa|Opa]] heeft ge-upload: "[[:Afbeelding:|Afbeelding:]]" <em>(kind dat zong: &quot;Mijn eigen opa, niemand zo aardig als hij.&quot;)</em></li> <li>25 apr 2004 15:54 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Babyleatherbackseaturtle.jpg|Babyleatherbackseaturtle.jpg]]" <em>(Van en: wiki Karen Johnson (22094 bytes) (Newly hatched baby leatherback &#91;&#91;sea turtle]],)</em></li> <li>25 apr 2004 14:45 [[Gebruiker:Willemdd|Willemdd]] heeft ge-upload: "[[:Afbeelding:Phspaak.jpg|Phspaak.jpg]]" <em>(Van Engelse wiki)</em></li> <li>25 apr 2004 13:43 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Maag2.png|Maag2.png]]" <em>(De maag; vertaling van een upload van Lennart Bolks (Estomago2.jpg))</em></li> <li>25 apr 2004 13:14 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Duerer-paulus.jpg|Duerer-paulus.jpg]]" <em>(Van de: wiki Irmgard (10621 Byte) (Apostel Paulus von D³rer) )</em></li> <li>25 apr 2004 13:05 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GewoneVogelmelk-plant2-kl.jpg|GewoneVogelmelk-plant2-kl.jpg]]" <em>(eigen foto, laan van eik en duinen den haag)</em></li> <li>25 apr 2004 13:04 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GewoneVogelmelk-plant-kl.jpg|GewoneVogelmelk-plant-kl.jpg]]" <em>(eigen foto, laan van eik en duinen den haag)</em></li> <li>25 apr 2004 13:04 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GewoneVogelmelk-overz-kl.jpg|GewoneVogelmelk-overz-kl.jpg]]" <em>(eigen foto, laan van eik en duinen den haag)</em></li> <li>25 apr 2004 13:03 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GewoneVogelmelk-bloem-kl.jpg|GewoneVogelmelk-bloem-kl.jpg]]" <em>(eigen foto, laan van eik en duinen den haag)</em></li> <li>25 apr 2004 12:50 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Ac.bengurion.jpg|Ac.bengurion.jpg]]" <em>(David Ben-Gurion in gesprek met Harry Truman; van Wikipedia.en; &#123;&#123;msg:GFDL}})</em></li> <li>25 apr 2004 12:49 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Dben-gurion.jpg|Dben-gurion.jpg]]" <em>(David Ben-Gurion; van Wikipedia.en &#123;&#123;msg:GFDL}})</em></li> <li>25 apr 2004 12:43 [[Gebruiker:Willemdd|Willemdd]] heeft ge-upload: "[[:Afbeelding:Guyves.jpg|Guyves.jpg]]" <em>(Van Engelse wiki)</em></li> <li>25 apr 2004 10:04 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:PopeInnocentX.jpg|PopeInnocentX.jpg]]" <em>(En: wikipedia)</em></li> <li>25 apr 2004 09:30 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Img0007.jpg|Img0007.jpg]]" <em>(Van en: wiki Charalampos? (45640 bytes) (One monastery from the 20 on Mount Athos) )</em></li> <li>25 apr 2004 09:22 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:MyanmarYangon.png|MyanmarYangon.png]]" <em>(Van en: wiki Morwen (20549 bytes) (&#123;&#123;msg:GFDL}}) )</em></li> <li>25 apr 2004 09:17 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Antlia_small.png|Antlia_small.png]]" <em>(Van en: wiki, (C) Bronger, maar Torsten Bronger heeft het zelf geupload daar, ik zal meer info toevoegen zo)</em></li> <li>25 apr 2004 09:12 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Riesenschildkröte_kl.jpg|Riesenschildkröte_kl.jpg]]" <em>(Van de: wiki Igelball (9852 Byte) (Riesenschildkr÷te (kleineres Bild)) )</em></li> <li>25 apr 2004 09:01 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Kompas2_s.jpg|Kompas2_s.jpg]]" <em>(Van pl: wiki Topory (16720 bajt&amp;#9500;&amp;#9474;w) )</em></li> <li>25 apr 2004 08:50 [[Gebruiker:Moose1960|Moose1960]] heeft ge-upload: "[[:Afbeelding:GraafWillemIV.jpg|GraafWillemIV.jpg]]"</li> <li>25 apr 2004 08:48 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Greatbustard54.jpg|Greatbustard54.jpg]]" <em>(En: wikipedia)</em></li> <li>25 apr 2004 08:33 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Davidhume.png|Davidhume.png]]" <em>((Hume van de Engelse wiki: &quot;David Hume&quot;))</em></li> <li>25 apr 2004 08:23 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:1O20.jpg|1O20.jpg]]" <em>(Van en: wiki . (Automated conversion) (34680 bytes) )</em></li> <li>25 apr 2004 06:33 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Jeker4.JPG|Jeker4.JPG]]" <em>(Eigen foto)</em></li> <li>25 apr 2004 06:30 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Jeker3.JPG|Jeker3.JPG]]" <em>(Eigen foto)</em></li> <li>25 apr 2004 06:29 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Jeker2.JPG|Jeker2.JPG]]" <em>(Eigen foto)</em></li> <li>25 apr 2004 06:29 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Jeker1.JPG|Jeker1.JPG]]" <em>(Eigen foto)</em></li> <li>25 apr 2004 00:07 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Leo_III.jpg|Leo_III.jpg]]" <em>(&#91;&#91;Paus Leo III&#124;Leo III]] legt de eed af. Fragment van een muurschildering van &#91;&#91;Rafael]].)</em></li> <li>24 apr 2004 23:18 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:MicronesiaLocatie.png|MicronesiaLocatie.png]]" <em>(Locatie van Micronesia (Location map for the Federated States of Micronesia) gemaakt door &#91;&#91;:en:User:Vardion]].)</em></li> <li>24 apr 2004 23:14 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Alexander_I.jpg|Alexander_I.jpg]]" <em>(Tweede poging)</em></li> <li>24 apr 2004 23:12 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Alexander_I.jpg|Alexander_I.jpg]]" <em>(&#91;&#91;Paus Alexander I]], wandschildering in de &#91;&#91;Sixtijnse kapel]].)</em></li> <li>24 apr 2004 23:04 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Evaristus.jpg|Evaristus.jpg]]" <em>(Paus Evaristus. Muurschildering uit de &#91;&#91;Sixtijnse kapel]].)</em></li> <li>24 apr 2004 23:00 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:GoldaMeir.jpg|GoldaMeir.jpg]]" <em>(Golda Meir; Bron: Wikipedia.en &#123;&#123;msg:GFDL}})</em></li> <li>24 apr 2004 22:54 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Clemens_I.jpg|Clemens_I.jpg]]" <em>(Paus Clemens I. Van een muurschilderij in het klooster Sveti Kliment, Ohrid, Macedoni%EB, 1295.)</em></li> <li>24 apr 2004 22:43 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Anacletus.jpg|Anacletus.jpg]]" <em>(Paus Anacletus I. Fragment van een wandschildering in de &#91;&#91;Sixtijnse kapel]] (diverse Italiaanse meesters uit de 15e eeuw).)</em></li> <li>24 apr 2004 22:30 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Petrus.jpg|Petrus.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Apostel Petrus von Dürer &#91;&#91;de:Bild:petrus.jpg]] &#123;&#123;msg:PD}})</em></li> <li>24 apr 2004 21:58 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Aarde_Saturnus.png|Aarde_Saturnus.png]]" <em>(Grootteverhouding Aarde en Saturnus; door Christiaan; geconverteerd tot PNG door mij &#123;&#123;msg:GFDL}})</em></li> <li>24 apr 2004 21:34 [[Gebruiker:Diddle 1988|Diddle 1988]] heeft ge-upload: "[[:Afbeelding:Rotation_of_DSC00012.JPG|Rotation_of_DSC00012.JPG]]" <em>(Jk en Marjolein)</em></li> <li>24 apr 2004 21:22 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:WildeHyacint-bloem-hr.jpg|WildeHyacint-bloem-hr.jpg]]" <em>(eigen foto, 24-0404 in scheveningse duinen, blauwe variant)</em></li> <li>24 apr 2004 21:20 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:WildeHyacint-bloem-kl.jpg|WildeHyacint-bloem-kl.jpg]]" <em>(eigen foto, 24-0404 in scheveningse duinen, blauwe variant)</em></li> <li>24 apr 2004 21:15 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:WildeHyacint-overz-hr.jpg|WildeHyacint-overz-hr.jpg]]" <em>(eigen foto, 24-0404 in scheveningse duinen, roze variant)</em></li> <li>24 apr 2004 21:13 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:WildeHyacint-overz-kl.jpg|WildeHyacint-overz-kl.jpg]]" <em>(eigen foto, 24-0404 in scheveningse duinen, roze variant)</em></li> <li>24 apr 2004 21:11 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Saturnus_ringenstelsel.jpg|Saturnus_ringenstelsel.jpg]]" <em>(Afbeelding PIA01531 uit NASA/JPL Planetary Photojournal)</em></li> <li>24 apr 2004 19:24 [[Gebruiker:Dick Bos|Dick Bos]] heeft ge-upload: "[[:Afbeelding:VriesBoomklever2.jpg|VriesBoomklever2.jpg]]" <em>(voorzijde omslag boekje Anne de Vries - De boomklever)</em></li> <li>24 apr 2004 16:48 [[Gebruiker:GuakBot|GuakBot]] heeft ge-upload: "[[:Afbeelding:Sofia_Magdalena,_Gustav_III_och_Adolf_Fredrik_Munck.jpg|Sofia_Magdalena,_Gustav_III_och_Adolf_Fredrik_Munck.jpg]]"</li> <li>24 apr 2004 16:47 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Julius_Caesar.jpg|Julius_Caesar.jpg]]" <em>(Julius Caesar in generaals-pose; Bron: website VRoma.org; geplaatst met toestemming van de auteur, onder voorwaarde van bronvermelding &#123;&#123;msg:PD}})</em></li> <li>24 apr 2004 16:24 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Verendael_bloemenstilleven.jpg|Verendael_bloemenstilleven.jpg]]" <em>(Verendael, Nicolaes van (Flemish, 1640-1691), Een tulp, anjer en andere bloemen in een vaas, vanaf CGFA http&#58;//cgfa.sunsite.dk/v/index.html#verendael, overname van een beperkt aantal afbeeldingen is toegestaan)</em></li> <li>24 apr 2004 16:10 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Tulpenvelden2.JPG|Tulpenvelden2.JPG]]" <em>(Eigen foto)</em></li> <li>24 apr 2004 16:10 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Julius_Caesar.jpg|Julius_Caesar.jpg]]" <em>(Van website VRoma.org; geplaatst met toestemming van de auteur &#123;&#123;msg:PD}})</em></li> <li>24 apr 2004 16:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:SouthAfricaBantustanCiskei.png|SouthAfricaBantustanCiskei.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:SouthAfricaBantustanCiskei.png]])</em></li> <li>24 apr 2004 16:03 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cirrus_clouds.jpg|Cirrus_clouds.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: By &lt;mdoege@compuserve.com&gt; on 2001-06-04 &#91;&#91;en:Image:Cirrus clouds.jpg]])</em></li> <li>24 apr 2004 15:59 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Vogelen.JPG|Vogelen.JPG]]" <em>(Eigen foto)</em></li> <li>24 apr 2004 15:54 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Sawspin.gif|Sawspin.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: animated circular saw icon &#91;&#91;en:Image:Sawspin.gif]])</em></li> <li>24 apr 2004 15:50 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:CD_en_lezer.png|CD_en_lezer.png]]" <em>(Schematische afbeelding van het uitlezen van een CD; uit het octrooi Optisch uitleesbare informatieschijf, werkwijze voor de vervaardiging ervan alsmede een inrichting voor het uitvoeren van deze werkwijze.&quot; van Philips, nr NL7904113, uit 1981 &#123;&#123;msg:PD}})</em></li> <li>24 apr 2004 15:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Circinus_constellation_map.png|Circinus_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Circinus, the Pair of Compasses. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/11/10. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Circinus constellation map.png]])</em></li> <li>24 apr 2004 15:48 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Sierkers_closeup_gevuldbloemig.jpg|Sierkers_closeup_gevuldbloemig.jpg]]" <em>(zelfgemaakte foto van een japanse sierkers met gevulde bloemen)</em></li> <li>24 apr 2004 15:43 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Soli_byz_mosaic_01.jpg|Soli_byz_mosaic_01.jpg]]" <em>(Mozaiek te Soli, van Engelse wiki)</em></li> <li>24 apr 2004 15:38 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Perenboom_bloei.jpg|Perenboom_bloei.jpg]]" <em>(zelfgemaakte foto van een perenboom)</em></li> <li>24 apr 2004 15:33 [[Gebruiker:Henricus|Henricus]] heeft ge-upload: "[[:Afbeelding:North_rhine_w_kle.png|North_rhine_w_kle.png]]" <em>(Kaart van Kleef (uit en: wiki))</em></li> <li>24 apr 2004 15:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Schweiz_Flagge_be.png|Schweiz_Flagge_be.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Flagge des Kantons Zürich; selbsgezeichnet &#91;&#91;de:Bild:Schweiz Flagge be.png]])</em></li> <li>24 apr 2004 15:31 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ch_wh_be.png|Ch_wh_be.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Map showing the location of the canton of Berne; drawn myself. &#91;&#91;en:Image:Ch wh be.png]])</em></li> <li>24 apr 2004 15:24 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Peer_bloem.jpg|Peer_bloem.jpg]]" <em>(zelfgemaakte foto van een perebloem)</em></li> <li>24 apr 2004 15:11 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Hosta_witblad.jpg|Hosta_witblad.jpg]]" <em>(zelfgemaakte foto van een zelfgekweekte Hosta met bijna witblad)</em></li> <li>24 apr 2004 14:20 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Magen_David_in_Double_lines_black.jpg|Magen_David_in_Double_lines_black.jpg]]" <em>(Van en: wiki IZAK (3967 bytes) (Magen David black double lines) )</em></li> <li>24 apr 2004 14:19 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Abraham_and_Isaac_small.jpg|Abraham_and_Isaac_small.jpg]]" <em>(This image has been released into the public domain by the author, or its copyright has expired. This applies worldwide. See Copyright. Oil painting, Marc Chagall, 1960-1965, Sacrifice of Isaac (small), from http&#58;//www.hum.huji.ac.il/cja/Index_pres/Chagall.htm Van en: wiki)</em></li> <li>24 apr 2004 14:06 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Shelley.jpg|Shelley.jpg]]" <em>(van engelse pagina)</em></li> <li>24 apr 2004 14:05 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Fur-elise-preview.png|Fur-elise-preview.png]]" <em>(Van de: wiki Head (6309 Byte) (Notation des Anfangs von Beethovens F³r)</em></li> <li>24 apr 2004 14:01 [[Gebruiker:AdaM|AdaM]] heeft ge-upload: "[[:Afbeelding:Geul_4.JPG|Geul_4.JPG]]" <em>(Eigen foto)</em></li> <li>24 apr 2004 14:01 [[Gebruiker:AdaM|AdaM]] heeft ge-upload: "[[:Afbeelding:Geul_3.JPG|Geul_3.JPG]]" <em>(Eigen foto)</em></li> <li>24 apr 2004 13:56 [[Gebruiker:AdaM|AdaM]] heeft ge-upload: "[[:Afbeelding:Geul_1_.JPG|Geul_1_.JPG]]" <em>(Eigen foto)</em></li> <li>24 apr 2004 13:56 [[Gebruiker:AdaM|AdaM]] heeft ge-upload: "[[:Afbeelding:Geul_2.JPG|Geul_2.JPG]]" <em>(Eigen foto)</em></li> <li>24 apr 2004 13:46 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Pallaswarbler.jpg|Pallaswarbler.jpg]]" <em>(Van en: wiki Pallas&#39;s warbler from the usual 1905 german source Jimfbleak (20269 bytes) (pallas&#39;s warbler) )</em></li> <li>24 apr 2004 13:40 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Podmnozica.png|Podmnozica.png]]" <em>(Van sl: wiki, met fig gemaakt, Romanm (1702 bitov) (X je podmno&amp;#9532;&amp;#165;ica Y) )</em></li> <li>24 apr 2004 13:36 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Masked-Lapwing-331.jpg|Masked-Lapwing-331.jpg]]" <em>(Van en: wiki Tannin (28132 bytes) (My own picture) )</em></li> <li>24 apr 2004 13:05 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Lepus_constellation_map.png|Lepus_constellation_map.png]]" <em>(Van en: wiki This is a celestial map of the constellation Lepus, the Hare. )</em></li> <li>24 apr 2004 12:59 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Bieszczady.jpg|Bieszczady.jpg]]" <em>(Van en: wiki 11:49, 20 Jul 2002 . . (Automated conversion) (18046 bytes) )</em></li> <li>24 apr 2004 12:53 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Sack_of_jerusalem.JPG|Sack_of_jerusalem.JPG]]" <em>(Van en: wiki Isis (58272 bytes) (sack of jerusalem on inside wall ot arch of titus in rome,)</em></li> <li>24 apr 2004 12:30 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Keats.JPG|Keats.JPG]]" <em>(van engelse pagina)</em></li> <li>24 apr 2004 12:08 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Californiangullimm.jpg|Californiangullimm.jpg]]" <em>(Van en: wiki Californian Gull public domain USFWS Jimfbleak (42785 bytes) (Californian Gull) )</em></li> <li>24 apr 2004 11:42 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Jamaciajudge.jpg|Jamaciajudge.jpg]]" <em>(Van en: wiki J.J. (20816 bytes) (A Jamaican wig-wearing judge, used with permission) )</em></li> <li>24 apr 2004 11:35 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Paralaksa_ani.gif|Paralaksa_ani.gif]]" <em>(Van pl: wiki, zeer mooie animated plaatje! Pixel (16334 bajt&amp;#9500;&amp;#9474;w) (animka paralaksy (szczegolnie astronomia)) )</em></li> <li>24 apr 2004 11:22 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:FlorDeLis.png|FlorDeLis.png]]" <em>(Van es: wiki melo (2385 bytes) (flor de lis :: sÃmbolo de los scouts) symbool van padvinders)</em></li> <li>24 apr 2004 11:13 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Rusty_fence.jpg|Rusty_fence.jpg]]" <em>(van en: wiki Dori (22913 bytes) (&#91;&#91;rust]]y, &#91;&#91;barbed wire]] &#91;&#91;fence]] &#123;&#123;msg:GFDL}}) )</em></li> <li>24 apr 2004 11:06 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:CarnisseGrienden002.jpg|CarnisseGrienden002.jpg]]" <em>(vegetatie: eigen foto)</em></li> <li>24 apr 2004 10:45 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Wale.jpg|Wale.jpg]]" <em>(van de: wiki US National Marine Fishery Service, National Ocean and Atmospheric Administration &#91;1] )</em></li> <li>24 apr 2004 10:34 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Oostfriesland.jpg|Kaart_Oostfriesland.jpg]]" <em>(Kopie de: Wikipedia)</em></li> <li>24 apr 2004 10:33 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Aum.png|Aum.png]]" <em>(Van sv: wiki, E23 (4093 bytes) (Aum-tecknet i sanskrit) )</em></li> <li>24 apr 2004 10:22 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Wapen_Oostfriesland.png|Wapen_Oostfriesland.png]]" <em>(Kopie de: Wikipedia)</em></li> <li>24 apr 2004 10:06 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:ICQ_Logo.gif|ICQ_Logo.gif]]" <em>(van en: wiki YaronSh? (1270 bytes) (The ICQ Logo) )</em></li> <li>24 apr 2004 10:06 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:IndonesieNoord-Molukken.png|IndonesieNoord-Molukken.png]]" <em>(Slordig aangemaakt bestand factor 5 in bestandsgrootte omlaag gebracht.)</em></li> <li>24 apr 2004 10:05 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Tabla.jpg|Tabla.jpg]]" <em>(uit de Engelse Wikipedia)</em></li> <li>24 apr 2004 10:02 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:AKW-LeibstadtCH.jpg|AKW-LeibstadtCH.jpg]]" <em>(van en: wiki Alphadynamico? (20084 bytes) (Nuclear power plant) )</em></li> <li>24 apr 2004 09:59 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Wolin.png|Wolin.png]]" <em>(Van pl: wiki Kpjas (6994 bajt&amp;#9500;&amp;#9474;w) (Wolin) )</em></li> <li>24 apr 2004 09:59 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Defirmian.jpg|Defirmian.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>24 apr 2004 09:53 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Aa_med.jpg|Aa_med.jpg]]" <em>(Van en: wiki Small photo of aa lava taken from USGS website http&#58;//volcanoes.usgs.gov/Products/Pglossary/aa.html Bryan Derksen (26172 bytes) )</em></li> <li>24 apr 2004 09:48 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:CarnisseGrienden001.jpg|CarnisseGrienden001.jpg]]" <em>(eigen foto bij vloed)</em></li> <li>24 apr 2004 09:40 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:IndonesieNoord-Molukken.png|IndonesieNoord-Molukken.png]]" <em>(Kaart van provincie Noord-Molukken in Indonesië (van en.wikipedia))</em></li> <li>24 apr 2004 09:30 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Flyingbot.jpg|Flyingbot.jpg]]" <em>(Ill. voor Flyingbot, zelf gemaakt)</em></li> <li>24 apr 2004 09:29 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:HostilianSest01.jpg|HostilianSest01.jpg]]" <em>(Portret van Hostilianus op een sestertie. Bron: wcnconline)</em></li> <li>24 apr 2004 09:26 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Midi.png|Midi.png]]" <em>(van pl: wiki Jonasz (11333 bajt&amp;#9500;&amp;#9474;w) )</em></li> <li>24 apr 2004 09:13 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Latin_alphabet_Gg.png|Latin_alphabet_Gg.png]]" <em>(Van en: wiki Nate Silva (2936 bytes) (Latin alphabet Gg in Helvetica 55 and Times LT)</em></li> <li>24 apr 2004 09:00 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Bus.png|Bus.png]]" <em>(databus van ja: wiki, oeps, ik kan de ja: tekens niet lezen %-()</em></li> <li>24 apr 2004 08:48 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:ASTP_Soyuz_Spacecraft.jpg|ASTP_Soyuz_Spacecraft.jpg]]" <em>(beschrijving volgt zo)</em></li> <li>24 apr 2004 08:39 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Piciformes.jpg|Piciformes.jpg]]" <em>(Van pl: wiki . Radomil (57337 bajt&amp;#9500;&amp;#9474;w) (z enWiki) )</em></li> <li>24 apr 2004 08:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Speelman.jpg|Speelman.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>24 apr 2004 08:02 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Thoth.jpg|Thoth.jpg]]" <em>(beschrijving volgt zo)</em></li> <li>24 apr 2004 07:55 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:MSX-SonyHB-F1XDJ_2.jpg|MSX-SonyHB-F1XDJ_2.jpg]]" <em>(van es: wiki Bitvision (38568 bytes) (Ejemplo Hardware MSX2+) )</em></li> <li>24 apr 2004 07:49 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Gnostic_cross.png|Gnostic_cross.png]]" <em>(beschrijving volgt zo)</em></li> <li>24 apr 2004 07:45 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Stomach_diagram.gif|Stomach_diagram.gif]]" <em>(Nederlandse vertaling)</em></li> <li>24 apr 2004 07:40 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Stomach_diagram.gif|Stomach_diagram.gif]]" <em>(beschr. volgt zo)</em></li> <li>24 apr 2004 07:38 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Estomago2.jpg|Estomago2.jpg]]" <em>(beschrijving volgt zo)</em></li> <li>24 apr 2004 07:35 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Serveurs.jpg|Serveurs.jpg]]" <em>(beschrijving volgt zo)</em></li> <li>24 apr 2004 07:30 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Dogville-small.jpg|Dogville-small.jpg]]" <em>(beschrijving volgt zo)</em></li> <li>24 apr 2004 07:23 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Strait.png|Strait.png]]" <em>(Nederlandse versie van gemaakt)</em></li> <li>24 apr 2004 07:18 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Strait.png|Strait.png]]" <em>(beschrijving volgt zo)</em></li> <li>24 apr 2004 07:02 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Galahad9701.jpg|Galahad9701.jpg]]" <em>(beschrijving volgt zo)</em></li> <li>24 apr 2004 06:31 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Groene_specht.jpg|Groene_specht.jpg]]" <em>(beschrijving volgt zo)</em></li> <li>24 apr 2004 06:23 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Moliere.jpg|Moliere.jpg]]" <em>(beschrijving volgt zo)</em></li> <li>24 apr 2004 06:01 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Bosanemoon.jpg|Bosanemoon.jpg]]" <em>(Bosanemoon, eigen foto, genomen in het Metbroekbos bij &#91;&#91;Smeerling]] waar hij in het wild voorkomt terwijl hij 20 kilomter noordelijker bij de Ennemaborg een stinzenplant is. &#123;&#123;Msg:GFDL}})</em></li> <li>24 apr 2004 05:40 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Wijgaardslak.JPG|Wijgaardslak.JPG]]" <em>(Eigen foto)</em></li> <li>24 apr 2004 05:28 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Markt.JPG|Markt.JPG]]" <em>(Eigen foto)</em></li> <li>24 apr 2004 05:21 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Hujintao.jpg|Hujintao.jpg]]" <em>(En: wikipedia)</em></li> <li>24 apr 2004 05:12 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Karte_cloppenburg_in_deutschland.png|Karte_cloppenburg_in_deutschland.png]]" <em>(beschrijving volgt zo)</em></li> <li>24 apr 2004 04:50 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:GVB_ram.JPG|GVB_ram.JPG]]" <em>(Eigen foto)</em></li> <li>24 apr 2004 04:47 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:GVB_Voedster_met_jong.JPG|GVB_Voedster_met_jong.JPG]]" <em>(Eigen foto)</em></li> <li>24 apr 2004 00:56 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Chromatografie_tank.png|Chromatografie_tank.png]]" <em>(TLC tank (schematisch) door Theresa Knott; vertaald van Wikipedia.en door mij &#123;&#123;msg:GFDL}})</em></li> <li>24 apr 2004 00:41 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Borst_(mentor18).jpg|Borst_(mentor18).jpg]]" <em>(Bron: fda.gov; door MBecker op wikipedia.en gezet; vertaald door mij &#123;&#123;msg:PD}})</em></li> <li>24 apr 2004 00:22 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Borst_(mentor10).png|Borst_(mentor10).png]]" <em>(Bron: fda.gov; door MBecker op wikipedia.en gezet; vertaald door mij &#123;&#123;msg:PD}})</em></li> <li>24 apr 2004 00:05 [[Gebruiker:GuakBot|GuakBot]] heeft ge-upload: "[[:Afbeelding:Michaeljacksonm.jpg|Michaeljacksonm.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: I believe this is to be in the public domain. It is from Santa Barbara County Sheriff&#39;s office. &#91;&#91;en:Image:Michaeljacksonm.jpg]])</em></li> <li>24 apr 2004 00:01 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Centraal-europa.png|Centraal-europa.png]]" <em>(Origineel door Brion VIBBER; aangepast door Sinuhe voor Wikipedia.en; vertaald in het Nederlands door mij &#123;&#123;msg:GFDL}})</em></li> <li>23 apr 2004 23:40 [[Gebruiker:GuakBot|GuakBot]] heeft ge-upload: "[[:Afbeelding:Smiley-2.png|Smiley-2.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;User:Robbrown]] replaced the original version of this image with something different without specifying the new image&#39;s source. &#123;&#123;msg:unverified}} &#91;&#91;en:Image:Smiley.png]])</em></li> <li>23 apr 2004 23:30 [[Gebruiker:GuakBot|GuakBot]] heeft ge-upload: "[[:Afbeelding:TV_turnoff_logo.gif|TV_turnoff_logo.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Nl: wikipedia &#91;&#91;nl:afbeelding::TV turnoff logo.gif]] &#91;&#91;en:Image:TV turnoff logo.gif]])</em></li> <li>23 apr 2004 23:28 [[Gebruiker:GuakBot|GuakBot]] heeft ge-upload: "[[:Afbeelding:Wikimedia-logo.png|Wikimedia-logo.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &lt;center&gt;&#39;&#39;Logo of the Wikimedia foundation, designed by Wikipedia user &quot;Neolux&quot;&#39;&#39;&lt;/center&gt; &#91;&#91;en:Image:Wikimedia.png]])</em></li> <li>23 apr 2004 23:10 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Coleridge.gif|Coleridge.gif]]" <em>(van engelse pagina)</em></li> <li>23 apr 2004 22:45 [[Gebruiker:GuakBot|GuakBot]] heeft ge-upload: "[[:Afbeelding:Sub_marcos.jpg|Sub_marcos.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-eo. De beschrijving daar was: Subcomandante Marcos &#91;&#91;eo:Dosiero:sub marcos.jpg]])</em></li> <li>23 apr 2004 22:43 [[Gebruiker:Moose1960|Moose1960]] heeft ge-upload: "[[:Afbeelding:Veersegat.jpg|Veersegat.jpg]]"</li> <li>23 apr 2004 22:41 [[Gebruiker:GuakBot|GuakBot]] heeft ge-upload: "[[:Afbeelding:Vicente_Fox.jpg|Vicente_Fox.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-es. De beschrijving daar was: Fotografía a colores de Vicente Fox Quesada, Presidente de México (2000-2006), recortada de la fotografía original de Henry Bonilla en la Cámara de Representantes de los EE.UU. (dominio público): &#91;http&#58;//www.house.gov/bonilla/photogallery/gallerypages/1004fox.jpg] &#91;&#91;en:Image:Mexico.FoxSahagun.01.jpg]] &#91;&#91;es:Imagen:Vicente Fox.jpg]])</em></li> <li>23 apr 2004 22:38 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Pope_Pius_VII.jpg|Pope_Pius_VII.jpg]]" <em>(En: wikipedia)</em></li> <li>23 apr 2004 22:05 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Europese_Unie.jpg|Europese_Unie.jpg]]" <em>(Vertaling Duitse kaart http&#58;//wp.mphase.net/karte/eu.svg in jpeg formaat)</em></li> <li>23 apr 2004 21:50 [[Gebruiker:Henricus|Henricus]] heeft ge-upload: "[[:Afbeelding:Lower_saxony_clp.png|Lower_saxony_clp.png]]" <em>(Kaart van Cloppenburg (uit en: wiki - &#91;http&#58;//en.wikipedia.org/wiki/Wikipedia:WikiProject_German_districts/Maptemplates bron]))</em></li> <li>23 apr 2004 20:45 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Tartu_suurvapp.png|Tartu_suurvapp.png]]" <em>(beschrijving volgt zo)</em></li> <li>23 apr 2004 20:43 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Tartu_suurlipp.png|Tartu_suurlipp.png]]" <em>(beschrijving volgt zo cd -)</em></li> <li>23 apr 2004 20:06 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Jan_Hus.jpg|Jan_Hus.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Scanned from German &quot;Meyer&#39;s Encyclopedia&quot;, 1906 &#91;&#91;en:Image:Jan Hus.jpg]] &#123;&#123;msg:PD}})</em></li> <li>23 apr 2004 20:00 [[Gebruiker:GuakBot|GuakBot]] heeft ge-upload: "[[:Afbeelding:Helmut_Kohl.jpg|Helmut_Kohl.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Helmut Kohl Quelle: http&#58;//usinfo.state.gov/topical/econ/group8/summit98/profiles/kohl.htm &#39;&#39;Links to Department sites are welcomed. Unless a copyright is indicated, information on the Department of State Web Site is in the public domain and may be copied and distributed without permission. Citation of the U.S. State Department as source of the information is appreciated.&#39;&#39; &#39;&#39;If a copyright is indicated on a photo, graphic, or other material, permission to copy these materials must be obtained from the original source. Please note that the U.S. Government has an international copyright on Country Commercial Guides.&#39;&#39; &#91;&#91;de:Bild:Helmut Kohl.jpg]])</em></li> <li>23 apr 2004 19:50 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Blad_zwarte_populier.jpg|Blad_zwarte_populier.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-eo. De beschrijving daar was: folio de Populus nigra italica La bildo eligxas el tiu TTT-ejo, kies estro &quot;Pierre-Yves&quot; donis konsenton pri kopio: http&#58;//les.arbres.free.fr/fiche-peuplier.php &#91;&#91;eo:Dosiero:Tn peupliernf JPG.jpg]])</em></li> <li>23 apr 2004 19:45 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Alterna.jpg|Alterna.jpg]]" <em>(van es: wiki daar geupload door user PACO, omschrijving Forma de onda de una corriente alterna senoidal)</em></li> <li>23 apr 2004 19:20 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Ismail_Enver.jpg|Ismail_Enver.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:PD}} from http&#58;//www.lib.utexas.edu/photodraw/portraits/index.html &#91;&#91;en:Image:Ismail Enver.jpg]])</em></li> <li>23 apr 2004 18:54 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:NK-pyongyang.png|NK-pyongyang.png]]"</li> <li>23 apr 2004 18:44 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:SchizophreniaPEG1935.png|SchizophreniaPEG1935.png]]" <em>(Image from en: wiki uploaded by user Vaughan descr: Pneumoencephalogram from Moore et al (1935) Encephalographic studies in mental disease - American Journal of Psychiatry))</em></li> <li>23 apr 2004 18:35 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:SchizophreniaPEG1935.png|SchizophreniaPEG1935.png]]" <em>(Image from en: wiki uploaded by user Vaughan descr: Pneumoencephalogram from Moore et al (1935) Encephalographic studies in mental disease - American Journal of Psychiatry))</em></li> <li>23 apr 2004 17:12 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:VincaMinor-plant-kl.jpg|VincaMinor-plant-kl.jpg]]" <em>(eigen foto, zoetermeer, 22 april 2004)</em></li> <li>23 apr 2004 17:10 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:VincaMinor-plant-hr.jpg|VincaMinor-plant-hr.jpg]]" <em>(eigen foto, zoetermeer, 22 april 2004)</em></li> <li>23 apr 2004 17:08 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:VincaMinor-overz-kl.jpg|VincaMinor-overz-kl.jpg]]" <em>(eigen foto, zoetermeer, 22 april 2004)</em></li> <li>23 apr 2004 17:06 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:VincaMinor-overz-hr.jpg|VincaMinor-overz-hr.jpg]]" <em>(eigen foto, zoetermeer, 22 april 2004)</em></li> <li>23 apr 2004 17:05 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:VincaMinor-CloseUp-hr.jpg|VincaMinor-CloseUp-hr.jpg]]" <em>(eigen foto, zoetermeer, 22 april 2004)</em></li> <li>23 apr 2004 17:03 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:VincaMinor-CloseUp-kl.jpg|VincaMinor-CloseUp-kl.jpg]]" <em>(eigen foto, zoetermeer, 22 april 2004)</em></li> <li>23 apr 2004 14:09 [[Gebruiker:Vijverln|Vijverln]] heeft ge-upload: "[[:Afbeelding:Hellevoetsluis_Haaven.jpg|Hellevoetsluis_Haaven.jpg]]" <em>(H&#39;sluis Haaven, eigen foto)</em></li> <li>23 apr 2004 13:51 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Wordsworth.jpg|Wordsworth.jpg]]" <em>(van engelse pagina. PD image from http&#58;//www.sru.edu/depts/cisba/compsci/dailey/217students/sgm8660/Final/ )</em></li> <li>23 apr 2004 13:21 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:TetricusIIanton(CNG).jpg|TetricusIIanton(CNG).jpg]]" <em>(Portret van Tetricus II. Foto Classical Numismatic Group, Inc. (CNG))</em></li> <li>23 apr 2004 13:03 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:TetricusIanton(CNG).jpg|TetricusIanton(CNG).jpg]]" <em>(Portret van Tetricus I. Foto Classical Numismatic Group, Inc. (CNG))</em></li> <li>23 apr 2004 12:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bareev.jpg|Bareev.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>23 apr 2004 12:32 [[Gebruiker:Robk|Robk]] heeft ge-upload: "[[:Afbeelding:Wapen_ElSalvador.PNG|Wapen_ElSalvador.PNG]]" <em>(Van Engelse Wikipedia)</em></li> <li>23 apr 2004 12:30 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:VictorinusAntoninianus(CNG).jpg|VictorinusAntoninianus(CNG).jpg]]" <em>(Portret van Gallo-Romeinse keizer Victorinus op een antoninianus uit 269/270. Foto: Classical Numismatic Group, Inc. (CNG))</em></li> <li>23 apr 2004 12:29 [[Gebruiker:Robk|Robk]] heeft ge-upload: "[[:Afbeelding:Wapen_Honduras.PNG|Wapen_Honduras.PNG]]" <em>(Van Italiaanse Wikipedia)</em></li> <li>23 apr 2004 12:02 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Vroegeling.jpg|Vroegeling.jpg]]" <em>(Vroegeling, eigen foto en gefotografeerd in april 2004 aan de kerklaan in &#91;&#91;Onstwedde]] &#123;&#123;msg:GFDL}})</em></li> <li>23 apr 2004 11:59 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Vroegeling.jpg|Vroegeling.jpg]]" <em>(Vroegeling, eigen foto en gefotografeerd in april 2004 aan de kerklaan in &#91;&#91;Onstwedde]] &#123;&#123;msg:GFDL}})</em></li> <li>23 apr 2004 11:57 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:MariusAntoninianus(CNG).jpg|MariusAntoninianus(CNG).jpg]]" <em>(Portret van Gallo-Romeinse keizer Marius op een antoninianus uit 269. Foto: Classical Numismatic Group, Inc. (CNG))</em></li> <li>23 apr 2004 11:43 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gepionjk.jpg|Gepionjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>23 apr 2004 11:18 [[Gebruiker:SanderSpek|SanderSpek]] heeft ge-upload: "[[:Afbeelding:GebruikerSanderSpek.jpg|GebruikerSanderSpek.jpg]]" <em>(Er ging iets mis met de kleuren. Nu hopelijk wel goed.)</em></li> <li>23 apr 2004 11:12 [[Gebruiker:SanderSpek|SanderSpek]] heeft ge-upload: "[[:Afbeelding:GebruikerSanderSpek.jpg|GebruikerSanderSpek.jpg]]" <em>(Gebruiker:SanderSpek, gemaakt door een fotograaf (die vast geen auteursrechten op zijn pasfoto&#39;s wil claimen), en tot Guevara-lookalike bewerkt door Gebruiker:SanderSpek.)</em></li> <li>23 apr 2004 11:00 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Postumus-2sest.jpg|Postumus-2sest.jpg]]" <em>(Portret van keizer &#91;&#91;Postumus]]. Met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>23 apr 2004 10:53 [[Gebruiker:Snoop|Snoop]] heeft ge-upload: "[[:Afbeelding:Snoop_art.jpg|Snoop_art.jpg]]" <em>(eigen werk snoop)</em></li> <li>23 apr 2004 10:01 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:BenjaminJo.jpg|BenjaminJo.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>23 apr 2004 09:26 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Dolmatov.jpg|Dolmatov.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>23 apr 2004 09:18 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:ClaudiusII(CNG).jpg|ClaudiusII(CNG).jpg]]" <em>(Zilveren munt uit 268/9 met het portret van keizer Claudius II &#39;Gothicus&#39;. Met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>23 apr 2004 09:09 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(Test Jazeker... Test!)</em></li> <li>23 apr 2004 08:22 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Chiburdanidze.jpg|Chiburdanidze.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>23 apr 2004 08:19 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Belgicaromana.gif|Belgicaromana.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:unverified}} Belgica, Belgium, België, Belgae, Belgians &#91;&#91;en:Image:belgicaromana.gif]])</em></li> <li>23 apr 2004 07:58 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(Dit is een test.)</em></li> <li>23 apr 2004 07:55 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test ok)</em></li> <li>23 apr 2004 07:55 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>23 apr 2004 07:36 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CiceroBust.jpg|CiceroBust.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Scanned from a book dated &#91;&#91;1900]]. Original caption: &quot;MARCUS TULLIUS CICERO. Photogravure from the marble bust in the Prado Gallery at Madrid. This is the most pleasing of all extant likenesses of the great Roman orator. It represents Cicero when he was about sixty years of age and at the zenith of his career.&quot; Presumably the bust is now in Madrid&#39;s Museum of Archeology, where most or all of the &#91;&#91;Museo del Prado]]&#39;s collection of works from Classical Antiquity were moved. &#123;&#123;msg:PD}} &#91;&#91;en:Image:CiceroBust.jpg]])</em></li> <li>23 apr 2004 07:27 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Human_karyogram.png|Human_karyogram.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: From Nupedia (caption copied from Chromosome article): &#39;&#39;&lt;b&gt;Figure 3 :&lt;/b&gt; Karyogram of a human female.&lt;br&gt; (copyright 1995 Department of Pathology, University of Washington, Cytogenetics Gallery. Reproduced with permission.)&#39;&#39; &#91;&#91;en:Image:human karyogram.png]])</em></li> <li>23 apr 2004 07:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chromatin_chromosome.png|Chromatin_chromosome.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: From Nupedia &#91;&#91;en:Image:chromatin chromosome.png]])</em></li> <li>23 apr 2004 07:21 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chromosome.png|Chromosome.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: From Nupedia &#91;&#91;en:Image:chromosome.png]])</em></li> <li>23 apr 2004 07:12 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:GreeceKavala.png|GreeceKavala.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:GreeceKavala.png]])</em></li> <li>23 apr 2004 07:09 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Freestate_christiania_flag.png|Freestate_christiania_flag.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: &#91;&#91;Flagge]] der &#91;&#91;Freistadt Christiania]]. * Zeichnung: Harvester &#91;http&#58;//en.wikipedia.org/wiki/Main_Page Englische Wikipedia] * Lizenz: &#91;&#91;GNU FDL]] &#91;&#91;de:Bild:Freestate christiania flag.png]])</em></li> <li>23 apr 2004 07:04 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Medalje_Kristian_I.jpg|Medalje_Kristian_I.jpg]]" <em>(Vanaf Zweedse wikipedia)</em></li> <li>23 apr 2004 07:04 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Centjk.jpg|Centjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>23 apr 2004 07:02 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Basisjk.jpg|Basisjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>23 apr 2004 07:00 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Medalje_Kristian_I.jpg|Medalje_Kristian_I.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-sv. De beschrijving daar was: FrÃ¥n Nordisk familjebok &#91;&#91;sv:Bild:Medalj över Kristian I, slagen under hans resa i Italien.jpg]])</em></li> <li>23 apr 2004 06:57 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chris_Patten.jpg|Chris_Patten.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: State Department photo by Michael Gross. (Source: http&#58;//www.state.gov/r/pa/ei/pix/events/secretary/30033.htm) &#123;&#123;msg:PD}} &#91;&#91;en:Image:Chris Patten.jpg]])</em></li> <li>23 apr 2004 06:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cholesterol.png|Cholesterol.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Cholesterol structural diagram Created by Maxim Iorsh with xymtex \documentclass{letter} \usepackage{epic,carom} \pagestyle{empty} \begin{document} \steroidchain&#91;e]{3==HO;&#123;&#123;10}}==\lmoiety{H$_{3}$C};&#123;&#123;13}}==\lmoiety{H$_{3}$C};&#123;&#123;20}}==H$_3$C} \end{document} &#91;&#91;en:Image:Cholesterol.png]])</em></li> <li>23 apr 2004 06:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chlorophyll_spectra.png|Chlorophyll_spectra.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:chlorophyll spectra.png]])</em></li> <li>23 apr 2004 06:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CFCs.jpg|CFCs.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: CFC molecules - PD image from science.nasa.gov &#91;&#91;en:Image:CFCs.jpg]])</em></li> <li>23 apr 2004 05:57 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Wappen_Plowdiw.png|Wappen_Plowdiw.png]]" <em>(Afbeelding van de: wiki, meer detail volgt binnenkort)</em></li> <li>23 apr 2004 05:56 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Plowdiw_in_BG.png|Plowdiw_in_BG.png]]" <em>(Plovdiv ill. van de: wiki, meer detail volgt binnenkort)</em></li> <li>23 apr 2004 05:11 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Louis-ix.jpg|Louis-ix.jpg]]" <em>(Afbeelding van en: wiki, meer detail volgt zo)</em></li> <li>23 apr 2004 03:50 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Den_lille_havfrue_statue.jpg|Den_lille_havfrue_statue.jpg]]" <em>(De kleine zeemeermin, van en: wiki, daar geupload door C64lives)</em></li> <li>22 apr 2004 22:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:GWC-from-space-VE.JPG|GWC-from-space-VE.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:PD}} NSA radar image of Great Wall of China, image form http&#58;//www.visibleearth.nasa.gov/cgi-bin/viewrecord?1508 NASA places this image at about 700 km west of &#91;&#91;Beijing]], at roughly 37.7 deg N, 107.5 deg East. &#91;&#91;en:Image:GWC-from-space-VE.JPG]])</em></li> <li>22 apr 2004 22:47 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:GR_Amorgos_IMG0032_asb_1987.jpg|GR_Amorgos_IMG0032_asb_1987.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: * Motiv: Steilküste von Amorgos * Fotograf: Agon S. Buchholz (&#91;&#91;Benutzer:Asb&#124;asb]]) * Aufnahmedatum: 1987 * Kamera: Minolta 9000 (von Kodak Photo CD) &#91;&#91;de:Bild:GR Amorgos IMG0032 asb 1987.jpg]])</em></li> <li>22 apr 2004 22:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Greatwall.jpg|Greatwall.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;The Great Wall of China&#39;&#39; Picture: US National Oceanic &amp; Atmospheric Adminstration (NOAA) Original at: &#91;http&#58;//www.photolib.noaa.gov/mvey/mvey0502.htm] &#91;&#91;en:Image:Greatwall.jpg]])</em></li> <li>22 apr 2004 22:44 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>22 apr 2004 22:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:MattiParkkonen_chimpanze1.jpg|MattiParkkonen_chimpanze1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Chimpanzé d&#39;après photo issue de http&#58;//www.777life.com/photos/index.html libre de droits &#91;&#91;fr:Image:MattiParkkonen chimpanze1.jpg]])</em></li> <li>22 apr 2004 22:41 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chimpanzee.jpg|Chimpanzee.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Chimpanzee (&#39;&#39;Pan troglodytes&#39;&#39;) from the &#91;http&#58;//www.lbl.gov/Science-Articles/Archive/LSD-fittest-molecules-Fay.html Lawrence Berkeley National Laboratory]. &#123;&#123;msg:noncommercial}} &#91;&#91;en:Image:chimpanzee.jpg]])</em></li> <li>22 apr 2004 22:41 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Katakana_origine.png|Katakana_origine.png]]" <em>(Van fr: wikipedia, geupload door Aoineko, Vous avez la permission de copier, distribuer et/ou modifier ce document selon les termes de la Licence de documentation libre GNU, version 1.2 ou plus récente publiée par la Free Software Foundation; sans sections inaltérables, sans texte de première page de couverture et sans texte de dernière page de couverture. )</em></li> <li>22 apr 2004 22:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CHIHUAHUA_DOG.JPG|CHIHUAHUA_DOG.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: I, &#91;&#91;David depaoli]], own this image and hereby license it to the public under the GFDL &#91;&#91;en:Image:CHIHUAHUA DOG.JPG]])</em></li> <li>22 apr 2004 22:26 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Tchernobyl.jpg|Tchernobyl.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: &#61;= Description == Photo de la centrale nucléaire de Tchernobyl après l&#39;accident &#61;= Source == * http&#58;//www.ac-nancy-metz.fr/IA57/CourcellesSurNied/journal_062002_tchernobyl.html * http&#58;//www.ac-nancy-metz.fr/IA57/CourcellesSurNied/images/tcherno_grand.jpg &#61;= Licence == Image sous copyright (de Sygma ?) &#91;&#91;Fair use]] pour illustrer l&#39;article sur &#91;&#91;Tchernobyl]] &#91;&#91;fr:Image:Tchernobyl.jpg]])</em></li> <li>22 apr 2004 22:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Musee_madras.jpg|Musee_madras.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Musée de Madras source : &#91;&#91;Utilisateur:Nataraja&#124;Nataraja]] statut : sous licence GFDL dans ce format &#91;&#91;fr:Image:musee madras.jpg]])</em></li> <li>22 apr 2004 22:15 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Rembrandt_Civilis.jpg|Rembrandt_Civilis.jpg]]" <em>(&#91;&#91;Rembrandt]]: &#39;&#39;De Samenzwering van Julius Civilis&#39;&#39;, 1661)</em></li> <li>22 apr 2004 22:13 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Sid_Vicious.jpg|Sid_Vicious.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;Sid Vicious]] mugshot (NYC), obtained from &#91;http&#58;//www.thesmokinggun.com/mugshots/viciousmug1.html The Smoking Gun]. I believe it&#39;s a document in public record of a newsworthy figure, and that this use of it qualifies as Fair Use. &#91;&#91;en:Image:Fm sidmug.jpg]])</em></li> <li>22 apr 2004 22:09 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Plinyelder.jpg|Plinyelder.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;Pliny the Elder]] from &#91;http&#58;//www.nlm.nih.gov/hmd/breath/Faces_asthma/VIIA29.html] &#91;&#91;en:Image:plinyelder.jpg]])</em></li> <li>22 apr 2004 22:07 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Decamerone.jpg|Decamerone.jpg]]" <em>(van en: wiki, daar geupload door Magnus Manske)</em></li> <li>22 apr 2004 21:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Formula_one_car.jpg|Formula_one_car.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A modern Formula One car, by Rick Dikeman &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:formula one car.jpg]])</em></li> <li>22 apr 2004 21:41 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Baikalzo.jpg|Baikalzo.jpg]]" <em>(test)</em></li> <li>22 apr 2004 21:39 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Medusa1.jpg|Medusa1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Arnold Böcklin circa 1878 &#91;&#91;en:Image:Medusa1.jpg]])</em></li> <li>22 apr 2004 21:01 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalthaPalustris-CloseUp-hr.jpg|CalthaPalustris-CloseUp-hr.jpg]]" <em>(eigen foto, 20 april industriegebied goudse poort, gouda)</em></li> <li>22 apr 2004 20:53 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalthaPalustris-overz-hr.jpg|CalthaPalustris-overz-hr.jpg]]" <em>(eigen foto, 20 april industriegebied goudse poort, gouda)</em></li> <li>22 apr 2004 20:50 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalthaPalustris-bloem-hr.jpg|CalthaPalustris-bloem-hr.jpg]]" <em>(eigen foto, 20 april industriegebied goudse poort, gouda)</em></li> <li>22 apr 2004 20:46 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalthaPalustris-blad-hr.jpg|CalthaPalustris-blad-hr.jpg]]" <em>(eigen foto, 20 april industriegebied goudse poort, gouda)</em></li> <li>22 apr 2004 20:44 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalthaPalustris-overz-kl.jpg|CalthaPalustris-overz-kl.jpg]]" <em>(eigen foto, 20 april industriegebied goudse poort, gouda)</em></li> <li>22 apr 2004 20:44 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalthaPalustris-CloseUp-kl.jpg|CalthaPalustris-CloseUp-kl.jpg]]" <em>(eigen foto, 20 april industriegebied goudse poort, gouda)</em></li> <li>22 apr 2004 20:43 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalthaPalustris-bloem-kl.jpg|CalthaPalustris-bloem-kl.jpg]]" <em>(eigen foto, 20 april industriegebied goudse poort, gouda)</em></li> <li>22 apr 2004 20:43 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:CalthaPalustris-blad-kl.jpg|CalthaPalustris-blad-kl.jpg]]" <em>(eigen foto, 20 april industriegebied goudse poort, gouda)</em></li> <li>22 apr 2004 20:17 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:ApollinaireArmy.jpg|ApollinaireArmy.jpg]]" <em>(Publiek domein (foto is gemaakt voor 1918, het sterfjaar van Apollinaire))</em></li> <li>22 apr 2004 20:14 [[Gebruiker:Nijman|Nijman]] heeft ge-upload: "[[:Afbeelding:Blackmadonna_van_Czestochowa.jpg|Blackmadonna_van_Czestochowa.jpg]]" <em>(overgenomen van http&#58;//en.wikipedia.org/wiki/Image:Blackmadonna.jpeg)</em></li> <li>22 apr 2004 20:04 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Lasvegas.strip.arp.750pix.jpg|Lasvegas.strip.arp.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The Las Vegas strip in 2003.&lt;br&gt; &#39;&#39;&#39;SOURCE:&#39;&#39;&#39; http&#58;//pdphoto.org/PictureDetail.php?mat=pdef&amp;pg=5231 &lt;br&gt; &#39;&#39;&#39;COPYRIGHT:&#39;&#39;&#39; &#39;&#39;&quot;This image is public domain. You may use this image for any purpose, including commercial.&quot;&#39;&#39;&lt;br&gt; &#39;&#39;&#39;PICTURE PREPARED&#39;&#39;&#39; by Adrian Pingstone in December 2003. &#91;&#91;en:Image:lasvegas.strip.arp.750pix.jpg]])</em></li> <li>22 apr 2004 20:02 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumMolle-overz-hr.jpg|GeraniumMolle-overz-hr.jpg]]" <em>(Gouda, 21 april 2004, berm groningenweg, eigen foto)</em></li> <li>22 apr 2004 19:58 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Oostzee.jpg|Oostzee.jpg]]" <em>(Foutjes verbeterd)</em></li> <li>22 apr 2004 19:57 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumMolle-CloseUp-hr.jpg|GeraniumMolle-CloseUp-hr.jpg]]" <em>(Gouda, 21 april 2004, berm groningenweg, eigen foto)</em></li> <li>22 apr 2004 19:56 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Marseille.arp.750pix.jpg|Marseille.arp.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Marseille.&lt;br&gt; Photographed by Adrian Pingstone.&lt;br&gt; Prepared for Wikipedia by Adrian Pingstone in January 2004, and released to the public domain. &#91;&#91;en:Image:marseille.arp.750pix.jpg]])</em></li> <li>22 apr 2004 19:56 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumMolle-blad-hr.jpg|GeraniumMolle-blad-hr.jpg]]" <em>(Gouda, 21 april 2004, berm groningenweg, eigen foto)</em></li> <li>22 apr 2004 19:53 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumMolle-overz-kl.jpg|GeraniumMolle-overz-kl.jpg]]" <em>(Gouda, 21 april 2004, berm groningenweg)</em></li> <li>22 apr 2004 19:53 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumMolle-CloseUp-kl.jpg|GeraniumMolle-CloseUp-kl.jpg]]" <em>(Gouda, 21 april 2004, berm groningenweg)</em></li> <li>22 apr 2004 19:52 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumMolle-blad-kl.jpg|GeraniumMolle-blad-kl.jpg]]" <em>(Gouda, 21 april 2004, berm groningenweg)</em></li> <li>22 apr 2004 19:41 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chen-shui-bian.jpg|Chen-shui-bian.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Chen Shui-bian (&amp;#38515;&amp;#27700;&amp;#25153;) &#123;&#123;msg:unverified}} &#91;&#91;en:Image:Chen-shui-bian.jpg]])</em></li> <li>22 apr 2004 19:31 [[Gebruiker:Roepersbot|Roepersbot]] heeft ge-upload: "[[:Afbeelding:Eemslandwapen.png|Eemslandwapen.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Emsland Wappen &#91;&#91;de:Bild:Emslandwappen.png]] Wapen van Kreis Eemsland van de:wikipedia)</em></li> <li>22 apr 2004 19:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Berlin-Checkpoint_Charlie-Richtung_Osten.jpg|Berlin-Checkpoint_Charlie-Richtung_Osten.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Checkpoint Charlie - Richtung Osten *&#39;&#39;&#39;Beschreibung:&#39;&#39;&#39; **Checkpoint Charlie - Blickrichtung Osten *&#39;&#39;&#39;Quelle:&#39;&#39;&#39; **Fotografiert am &#91;&#91;22. März]] &#91;&#91;2004]] *&#39;&#39;&#39;Fotograf:&#39;&#39;&#39; **&#91;&#91;Benutzer:Raymond&#124;Raymond]] - Raimond Spekking *&#39;&#39;&#39;Copyright Status:&#39;&#39;&#39; **&#91;&#91;GNU Freie Dokumentationslizenz]] &#91;&#91;de:Bild:Berlin-Checkpoint Charlie-Richtung Osten.jpg]])</em></li> <li>22 apr 2004 19:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Che_guevara_icoon.jpg|Che_guevara_icoon.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Che icon This is a photo portrait taken by the &#91;&#91;Cuba]]n photographer &#91;&#91;Alberto Korda]] and printed with strong contrast. Cuba didn&#39;t sign the &#91;&#91;Berne convention]] thus the copyright status is unclear. --- wji says: Actually, Korda successfully claimed copyright over the image three years ago to prevent it being used in a Vodka ad. The guy was a lifelong communist, though, and only wanted to cut down on blatant commercialization of the image, telling reporters: ` As a supporter of the ideals for which Che Guevara died, I am not averse to its reproduction by those who wish to propagate his memory and the cause of social justice throughout the world. ` So it&#39;s used with permission. See http&#58;//edition.cnn.com/2000/WORLD/europe/09/16/cheguevaraphoto.ap/. ---- The uncropped version can be see here : &#91;&#91;Image:Che.jpg]] &#91;&#91;en:Image:Cheicon.jpg]])</em></li> <li>22 apr 2004 18:52 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Charlestaylor.jpg|Charlestaylor.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Charles Taylor, image from government Tv &#91;&#91;en:Image:charlestaylor.jpg]])</em></li> <li>22 apr 2004 18:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Graf_charles_taze_russel.jpg|Graf_charles_taze_russel.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:unverified}} &#91;&#91;en:Image:pyr 1.jpg]])</em></li> <li>22 apr 2004 18:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Charles_de_Secondat,_Baron_de_Montesquieu.jpg|Charles_de_Secondat,_Baron_de_Montesquieu.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: In the &#91;&#91;public domain]] by age &#91;&#91;en:Image:Charles de Secondat, Baron de Montesquieu.jpg]])</em></li> <li>22 apr 2004 18:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Darwin_ape.png|Darwin_ape.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: From Nupedia &#91;&#91;en:Image:Darwin ape.png]])</em></li> <li>22 apr 2004 18:31 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:POH.jpg|POH.jpg]]" <em>(met url werkt het nog niet, nu maar weer een poging met locale file)</em></li> <li>22 apr 2004 18:28 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chandrika.jpg|Chandrika.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Chandrika Kumaratunga, president of Sri Lanka Source: http&#58;//www.presidentsl.org/data/new/photos/10_may02.jpg &#123;&#123;msg:fairuse}} &#91;&#91;en:Image:Chandrika.jpg]])</em></li> <li>22 apr 2004 18:27 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chandrika_Bandaranaike_Kumaratunga.jpg|Chandrika_Bandaranaike_Kumaratunga.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Chandrika Bandaranaike Kumaratunga (mit Jacques Chirac, Bildausschnitt) &#61;= Quelle == http&#58;//www.france.diplomatie.fr/photos/diplo/paysest/kossovo02.html#photo Französisches Außenministerium, Abteilung Fotografien ministère des Affaires étrangères/Service photographique &#61;= Lizenz == &#39;&#39;Les &quot;Instantanés diplomatiques&quot; sont libres de droits et peuvent être reproduits avec mention obligatoire &quot;ministère des Affaires étrangères/Service photographique&quot;. Pour tout usage exclusivement professionnel, des duplicatas sont disponibles sur demande auprès du service photographique du ministère des Affaires étrangères.&#39;&#39; (&#39;&#39;Die &quot;Schnappschüsse diplomatischer Begegnungen&quot; sind copyrightfrei, sie dürfen mit dem Vermerk &quot;Französisches Außenministerium, Abteilung Fotografien&quot; reproduziert werden. Für rein kommerzielle Verwendungszwecke sind auf Anfrage bei der Abteilung Fotografien im französischen Außenministerium Kopien erhältlich.&#39;&#39;) &#61;= Originalbeschreibung == &#39;&#39;Entretien de M. Jacques Chirac, président de la République, avec Mme Chandrika Bandaranaike-Kumaratunga, présidente de la République démocratique socialiste du Sri Lanka (Elysée). 28 mars 2001.&#39;&#39; &#91;&#91;de:Bild:Chandrika Bandaranaike Kumaratunga.jpg]])</em></li> <li>22 apr 2004 18:21 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:ChampignonMushroom.jpg|ChampignonMushroom.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: White mushroom - i believe. Bought in the supermarket yesterday, photo taken by me -- &#91;&#91;User:Chris 73&#124;chris_73]] 12:23, 12 Apr 2004 (UTC) &#123;&#123;msg:PD}} &#91;&#91;en:Image:ChampignonMushroom.jpg]])</em></li> <li>22 apr 2004 18:19 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Champagnegrot.jpg|Champagnegrot.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-pl. De beschrijving daar was: Piwnice producenta szampana w Reims (zdj&amp;#281;cie w&amp;#322;asne) &#91;&#91;pl:Grafika:szampan.jpg]])</em></li> <li>22 apr 2004 18:17 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Veuve_clicquot_bottle_sizes.jpg|Veuve_clicquot_bottle_sizes.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;Veuve Clicquot]] bottle size display. Taken on vacation in June 2003 at VC&#39;s cellars in Reims. Photo by Walter Nissen (&#91;&#91;User:Wnissen&#124;Wnissen]]) Placed in public domain by photographer See also &#91;&#91;:Image:Veuve clicquot bottle sizes thumb.jpg]] &#91;&#91;en:Image:Veuve clicquot bottle sizes.jpg]])</em></li> <li>22 apr 2004 18:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Champagne.jpeg|Champagne.jpeg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A glass of champagne (public domain from &#91;http&#58;//pdphoto.org/PictureDetail.php?mat=pdef&amp;pg=7836]) &#91;&#91;en:Image:Champagne.jpeg]])</em></li> <li>22 apr 2004 18:16 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:POH.jpg|POH.jpg]]" <em>(viermaal is geen scheepsrecht :()</em></li> <li>22 apr 2004 18:12 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:POH.jpg|POH.jpg]]" <em>(nog een poging, de aanhouder wint)</em></li> <li>22 apr 2004 18:11 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Champa_kunst.jpg|Champa_kunst.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Beispiel für die Kunst der Champa &#61;=Source== http&#58;//www.sxc.hu/ &#61;=statut== You may use any of the photos in our system free of charge for any commercial or personal design work if you obey the specified restrictions concerning each photo you download. &#91;&#91;de:Bild:Art cham.jpg]])</em></li> <li>22 apr 2004 18:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Champa.jpg|Champa.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Lage des ehemailgen Königreich Champa Aus der französischen Wikipedia: carte de l&#39;emplacement du royaume de Champâ image DM CIA retravaillée source : &#91;&#91;fr:Utilisateur:Nataraja&#124;Nataraja]] &#91;&#91;de:Bild:Champa.jpg]])</em></li> <li>22 apr 2004 18:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chamaeleon_constellation_map.png|Chamaeleon_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Chamaeleon. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/11/10. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Chamaeleon constellation map.png]])</em></li> <li>22 apr 2004 18:06 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:POH.jpg|POH.jpg]]" <em>(Port of Houston van en: wiki, daar geupload door Chayves4u)</em></li> <li>22 apr 2004 18:03 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:POH.jpg|POH.jpg]]"</li> <li>22 apr 2004 17:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Demosthenes.jpg|Demosthenes.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: 1881 Young Peoples&#39; Cyclopedia of Persons and Places &#91;&#91;en:Image:Demosthenes.jpg]])</em></li> <li>22 apr 2004 17:30 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Zucker.jpg|Zucker.jpg]]" <em>(tweede poging, nu met local file)</em></li> <li>22 apr 2004 17:17 [[Gebruiker:Flyingbot|Flyingbot]] heeft ge-upload: "[[:Afbeelding:Zucker.jpg|Zucker.jpg]]" <em>(afbeelding suiker van en: wikipedia, daar geupload door Sanders muc)</em></li> <li>22 apr 2004 16:55 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Betelgeuze.jpg|Betelgeuze.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: picture of Betelguese &#91;&#91;en:Image:star.jpg]] Betelgeuze, publiek-domein foto van &#91;&#91;NASA]], genomen met de &#91;&#91;Hubble ruimtetelescoop]]. Overgenomen van de Engelse Wikipedia. &#91;&#91;en:Image:star.jpg]])</em></li> <li>22 apr 2004 16:41 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Veronicahederifolia.jpg|Veronicahederifolia.jpg]]" <em>(Akkerklimopereprijs, eigen foto, genomen in Onstwedde aan de Kerklaan april 2004 &#123;&#123;msg:GFDL}})</em></li> <li>22 apr 2004 16:17 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:DiocletianusFollis.jpg|DiocletianusFollis.jpg]]" <em>(Romeinse bronzen munt met portret van keizer &#91;&#91;Diocletianus]]. Met toestemming van Classic Numismatic Group, Inc. (CNG))</em></li> <li>22 apr 2004 15:57 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Oostzee.jpg|Oostzee.jpg]]" <em>(Vertaling Duitse afbeelding. Hoge kwaliteit truecolour jpeg.)</em></li> <li>22 apr 2004 15:41 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Hhoudini.jpg|Hhoudini.jpg]]" <em>(Harry Houdini, van Engelse Wikipedia. Daar geen beschrijving. Vermoedelijk, maar niet zeker, publiek domein vanwege Amerikaans van voor 1923.)</em></li> <li>22 apr 2004 15:23 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Herbert_Hoover.jpg|Herbert_Hoover.jpg]]" <em>(Naar mijn mening mooiere afbeelding.)</em></li> <li>22 apr 2004 15:16 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Hookevlo.jpg|Hookevlo.jpg]]" <em>(dan moet ik het zelf maar doen...)</em></li> <li>22 apr 2004 15:05 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Hookevlo.jpg|Hookevlo.jpg]]" <em>(&#91;&#91;Vlo]]. Afbeelding uit &#91;&#91;Robert Hooke]]&#39;s &#39;&#39;Micrographia&#39;&#39;, 1664. &#123;&#123;msg:PD}})</em></li> <li>22 apr 2004 15:00 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Hook_micro.jpg|Hook_micro.jpg]]" <em>(&#91;&#91;Microscoop]] van &#91;&#91;Robert Hooke]]. Afbeelding uit Hooke&#39;s &#39;&#39;Micrographia&#39;&#39;, Londen, 1664. &#123;&#123;msg:PD}})</em></li> <li>22 apr 2004 14:41 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:NumerianusAntoninianus.jpg|NumerianusAntoninianus.jpg]]" <em>(Antoninianus geslagen in 283/4 in Lugdunum met het portret van keizer Numerianus. Met toestemming Classical Numismatic Group, Inc. (CNG))</em></li> <li>22 apr 2004 14:36 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:CarinusAureus.jpg|CarinusAureus.jpg]]" <em>(Gouden Romeinse munt met het portret van keizer &#91;&#91;Carinus]]. Met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>22 apr 2004 14:29 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Zweden.png|Kaart_Zweden.png]]" <em>(Nederlandse vertaling CIA kaart)</em></li> <li>22 apr 2004 13:32 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Ruiten_Aa.jpg|Ruiten_Aa.jpg]]" <em>(helderder versie, wederom eigen foto e eigen bewerking natuurlijk)</em></li> <li>22 apr 2004 13:15 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Florianus-Antoninianus(3.6g)-Lugdunum-276(CNG).jpg|Florianus-Antoninianus(3.6g)-Lugdunum-276(CNG).jpg]]" <em>(Antoninianus geslagen in 276 in Lugdunum met het portret van keizer Florianus. Met toestemming Classical Numismatic Group, Inc. (CNG) )</em></li> <li>22 apr 2004 13:11 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Florianus-Antoninianus(3.6g)-Lugdunum-276-(CNG).jpg|Florianus-Antoninianus(3.6g)-Lugdunum-276-(CNG).jpg]]" <em>(Antoninianus geslagen in 276 in Lugdunum met het portret van keizer Florianus. Met toestemming Classical Numismatic Group, Inc. (CNG))</em></li> <li>22 apr 2004 13:06 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pioncent.jpg|Pioncent.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 13:03 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Ruiten_Aa.jpg|Ruiten_Aa.jpg]]" <em>(Ruiten Aa gefotgrafeerd bij het Eemboerveld en het Metbroekbos bij Smeerling, eigen foto &#123;&#123;msg:GFDL}})</em></li> <li>22 apr 2004 13:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pionjk.jpg|Pionjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 12:59 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Basiscenjk.jpg|Basiscenjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 12:51 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:TacitusAntoninianus(3.9g)-Ticinum-275-276-(CNG).jpg|TacitusAntoninianus(3.9g)-Ticinum-275-276-(CNG).jpg]]" <em>(Antoninianus geslagen rond 275 in Ticinum met het portret van keizer Tacitus. Met toestemming Classical Numismatic Group, Inc. (CNG))</em></li> <li>22 apr 2004 12:45 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Paasvuur.jpg|Paasvuur.jpg]]" <em>(Paasvuur te Onstwedde op 2e paasdag 2004, eigen foto, &#123;&#123;msg:GFDL}})</em></li> <li>22 apr 2004 12:05 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:HolbergRoed.jpg|HolbergRoed.jpg]]" <em>(&#91;&#91;Ludvig Holberg]], schilder van &#91;&#91;J&amp;oslash;rgen Roed]] (1808-1888) uit 1847. Kopie van een schildreij van &#91;&#91;Johan Roselius]] (1725-1803) uit 1752. &#123;&#123;msg:PD}})</em></li> <li>22 apr 2004 12:03 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Quintillus-270-Antoninianus-2,51g-(CNG).jpg|Quintillus-270-Antoninianus-2,51g-(CNG).jpg]]" <em>(Portret van keizer &#91;&#91;Quintillus]] op een antoninianus. Foto met toestemming van Classical Numismatic Group, Inc. (CNG).)</em></li> <li>22 apr 2004 11:51 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Dubbjk.jpg|Dubbjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 11:19 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Elvest.jpg|Elvest.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>22 apr 2004 11:13 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Heinrich_rudolf_hertz.jpg|Heinrich_rudolf_hertz.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Heinrich Rudolf Hertz *licence : domaine public *source : http&#58;//www.sciences.univ-nantes.fr/physique/enseignement/tp/hist/hertz.html &#91;&#91;fr:Image:heinrich rudolf hertz.jpg]])</em></li> <li>22 apr 2004 10:56 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Tempelberg-Herodes.jpg|Tempelberg-Herodes.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Tempelberg zu Zeiten Herodes - Rekonstruktion; aus: Paul Volz, Die biblischen Altertümer. 1914. Seite 51, Tafel 8 &#91;&#91;de:Bild:Tempelberg zu Zeiten Herodes - Rekonstruktion.JPG]])</em></li> <li>22 apr 2004 10:53 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Jhenry.jpg|Jhenry.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: 19th century photograph. public domain. &#123;&#123;msg:PD}} &#91;&#91;en:Image:Jhenry.jpg]])</em></li> <li>22 apr 2004 09:54 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Psakhis.jpg|Psakhis.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>22 apr 2004 09:12 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Carojk.jpg|Carojk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 09:09 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Ponzijk.jpg|Ponzijk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 09:05 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Schaljk.jpg|Schaljk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 08:51 [[Gebruiker:Maikie|Maikie]] heeft ge-upload: "[[:Afbeelding:BandUlysses.jpg|BandUlysses.jpg]]" <em>(Eclectic Productions)</em></li> <li>22 apr 2004 08:41 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Hanjk.jpg|Hanjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 08:39 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Portrait_frederic_mistral.jpg|Portrait_frederic_mistral.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Portrait de Frédéric Mistral. Domaine public &#91;&#91;fr:Image:portrait frederic mistral.jpg]])</em></li> <li>22 apr 2004 08:37 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Cunjk.jpg|Cunjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 08:34 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Keidjk.jpg|Keidjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 08:33 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Herzl_large.jpg|Herzl_large.jpg]]" <em>(Give a description for the image: Vanaf de Engelse wikipedia &#91;&#91;en:Image:Herzl large.jpg]])</em></li> <li>22 apr 2004 08:31 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Adamjk.jpg|Adamjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 08:28 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Olijk.jpg|Olijk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 08:26 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Zappa.jpg|Zappa.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Publicity photo, fair use assumed &#91;&#91;en:Image:zappa.jpg]])</em></li> <li>22 apr 2004 08:26 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kostjk.jpg|Kostjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 08:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Zappa1.jpg|Zappa1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: publicity photo, fair use assumed &#91;&#91;en:Image:zappa1.jpg]])</em></li> <li>22 apr 2004 08:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Schotsjk.jpg|Schotsjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 08:21 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Snake's_head_fritillaria.jpg|Snake's_head_fritillaria.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Snake&#39;s head fritillaria (&#39;&#39;Fritillaria meleagris&#39;&#39;); cropped image from &#91;http&#58;//www.claquin.com/200103/index.html claquin.com]. &#123;&#123;msg:PD}} &#91;&#91;en:Image:snake&#39;s head fritillaria.jpg]])</em></li> <li>22 apr 2004 08:19 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Goringjk.jpg|Goringjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 08:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Belgjk.jpg|Belgjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 08:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Aerial_jordan.jpg|Aerial_jordan.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Jordan River viewed from space. Permission to use granted by NASA according to NASA Image guidelines: http&#58;//www.nasa.gov/audience/formedia/features/MP_Photo_Guidelines.html &#91;&#91;en:Image:Aerial jordan.jpg]])</em></li> <li>22 apr 2004 08:13 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Rosenjk.jpg|Rosenjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 08:09 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ccaa-ceuta.png|Ccaa-ceuta.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Locator map of Ceuta &#91;&#91;en:Image:ccaa-ceuta.png]])</em></li> <li>22 apr 2004 08:04 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cetus_constellation_map_small.png|Cetus_constellation_map_small.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Constellation map of Cetus, small version &#91;&#91;en:Image:Cetus constellation map small.png]])</em></li> <li>22 apr 2004 07:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ceres_planetoide.jpg|Ceres_planetoide.jpg]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Image:1 ceres.jpg]])</em></li> <li>22 apr 2004 07:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Human_Brain_NIH.jpg|Human_Brain_NIH.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: NIH image of human brain &#91;&#91;en:Image:Human Brain NIH.jpg]])</em></li> <li>22 apr 2004 07:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cat_brain_NASA.jpg|Cat_brain_NASA.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: NASA image of cat brain &#91;&#91;en:Image:cat brain NASA.jpg]])</em></li> <li>22 apr 2004 07:52 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Mouse_brain.jpg|Mouse_brain.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: NIH image of mouse brain &#91;&#91;en:Image:Mouse brain.jpg]])</em></li> <li>22 apr 2004 07:43 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pfeifjk.jpg|Pfeifjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:41 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Paris.pompidou.500pix.jpg|Paris.pompidou.500pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The Pompidou Centre, Paris, France.&lt;br&gt; Photographed by Adrian Pingstone in July 2001 and released to the public domain. &#91;&#91;en:Image:paris.pompidou.500pix.jpg]])</em></li> <li>22 apr 2004 07:41 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Paris.pompidou.200pix.jpg|Paris.pompidou.200pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: aus der englischen Wikipedia: &#39;&#39;The Pompidou Centre, Paris, France.&#39;&#39; &#39;&#39;Photographed by Adrian Pingstone in July 2001 and released to the public domain.&#39;&#39; &#91;&#91;de:Bild:paris.pompidou.200pix.jpg]])</em></li> <li>22 apr 2004 07:40 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Noajk.jpg|Noajk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:37 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Italjk.jpg|Italjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:36 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Commodus-AnniusVerus_tarsos_161-165_AE17_CNG.jpg|Commodus-AnniusVerus_tarsos_161-165_AE17_CNG.jpg]]" <em>(De broers &#91;&#91;Commodus]] en &#91;&#91;Annius Verus]] op een bronzen munt uit Tarsos, &#91;&#91;Cilicië]] uit &#91;&#91;161]]-&#91;&#91;165]]. Foto: Classical Numismatic Group, Inc. (CNG))</em></li> <li>22 apr 2004 07:34 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Albinjk.jpg|Albinjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:30 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Middenjk.jpg|Middenjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:27 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Spaanjk.jpg|Spaanjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:24 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Schliejk.jpg|Schliejk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:22 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Celkern.png|Celkern.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-es. De beschrijving daar was: Desde Wki Inglés &#91;&#91;es:Imagen:Nucleo.png]])</em></li> <li>22 apr 2004 07:21 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Davenjk.jpg|Davenjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:17 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Krogjk.jpg|Krogjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:15 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Holtjk.jpg|Holtjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:11 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Krausjk.jpg|Krausjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:07 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Wiljk.jpg|Wiljk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:05 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Landjk.jpg|Landjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Keenjk.jpg|Keenjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 07:00 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Tarjk.jpg|Tarjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 06:57 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Romanjk.jpg|Romanjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>22 apr 2004 04:29 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GlanzendeOoievaarsbek-overz-hr.jpg|GlanzendeOoievaarsbek-overz-hr.jpg]]" <em>(gouda, eigen foto, 22 april 2004)</em></li> <li>22 apr 2004 04:26 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GlanzendeOoievaarsbek-overz-kl.jpg|GlanzendeOoievaarsbek-overz-kl.jpg]]" <em>(gouda, eigen foto, 21 april 2004)</em></li> <li>22 apr 2004 04:23 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GlanzendeOoievaarsbek-overz-kl.jpg|GlanzendeOoievaarsbek-overz-kl.jpg]]" <em>(gouda, eigen foto, 22 april 2004)</em></li> <li>22 apr 2004 04:21 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GlanzendeOoievaarsbek-CloseUp-kl.jpg|GlanzendeOoievaarsbek-CloseUp-kl.jpg]]" <em>(gouda, eigen foto, 22 april 2004)</em></li> <li>22 apr 2004 04:21 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GlanzendeOoievaarsbek-CloseUp-hr.jpg|GlanzendeOoievaarsbek-CloseUp-hr.jpg]]" <em>(gouda, eigen foto, 22 april 2004)</em></li> <li>22 apr 2004 04:19 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GlanzendeOoievaarsbek-blad-kl.jpg|GlanzendeOoievaarsbek-blad-kl.jpg]]" <em>(gouda, eigen foto, 22 april 2004)</em></li> <li>22 apr 2004 04:18 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GlanzendeOoievaarsbek-blad-hr.jpg|GlanzendeOoievaarsbek-blad-hr.jpg]]" <em>(gouda, eigen foto, 22 april 2004)</em></li> <li>22 apr 2004 00:26 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Hemmingway.jpg|Hemmingway.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Picture of Ernest Hemingway from LOC (http&#58;//www.loc.gov/loc/lcib/9911/heming.html ) &#91;&#91;en:Image:Hemmingway.jpg]] &#123;&#123;msg:PD}})</em></li> <li>22 apr 2004 00:23 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Vanhelmont.jpg|Vanhelmont.jpg]]" <em>(&#91;&#91;Jan Baptista van Helmont]] (1580-1644). Maker &amp; datum onbekend, maar ongetwjifeld Publiek Domein wegens ouderdom.)</em></li> <li>21 apr 2004 21:08 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Witboi.jpg|Witboi.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Hendrik Witboi &#61;= Beschreibung == Text auf dem Bild: &#39;&#39;Südwestafrika.I. Gibeon. Hendrik Witboi. Oberhäuptling der - Witboihottentotten.&#39;&#39; Text auf der Hülle: &#39;&#39;Deutsch-Südwestafrika 1 37. Gibeon. Hendrik Witboi. - Oberhäuptling der Witboihottentotten.&#39;&#39; Entstehungsjahr Vorlage: 1892/1894 oder früher formale Bemerkung: Repro Photograph: Dove-Sammlung Region: Namibia - Gibeon - DSWA &#61;= Quelle == Der Bildbestand der Deutschen Kolonialgesellschaft in der Stadt- und Universitätsbibliothek Frankfurt am Main &#91;http&#58;//www.stub.bildarchiv-dkg.uni-frankfurt.de/dfg-projekt/Bildprojekt/frames/hauptframe.html] &#61;= Lizenz == Einige der vom Kolonialen Bildarchiv in Frankfurt a. Main &#91;http&#58;//www.stub.bildarchiv-dkg.uni-frankfurt.de/dfg-projekt/Default.htm] veröffentlichten Bilder wurden von Mitarbeitern des Bildarchivs nachbearbeitet oder dort erstveröffentlicht. Eine Weiterverwendung ist unter der Auflage einer deutlichen Quellenangabe gestattet. &#91;&#91;de:Bild:Witboi.jpg]])</em></li> <li>21 apr 2004 21:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Herero.jpg|Herero.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Herero &#61;= Beschreibung == Text auf der Hülle: &#39;&#39;Heidnische Hereros&#39;&#39; formale Bemerkung: Repro Retuschen kleiner Schichtfehler Photograph: Schutz; Heuberg, M. Region: DSWA Namibia &#61;= Quelle == Der Bildbestand der Deutschen Kolonialgesellschaft in der Stadt- und Universitätsbibliothek Frankfurt am Main &#91;http&#58;//www.stub.bildarchiv-dkg.uni-frankfurt.de/dfg-projekt/Bildprojekt/frames/hauptframe.html] &#61;= Lizenz == Einige der vom Kolonialen Bildarchiv in Frankfurt a. Main &#91;http&#58;//www.stub.bildarchiv-dkg.uni-frankfurt.de/dfg-projekt/Default.htm] veröffentlichten Bilder wurden von Mitarbeitern des Bildarchivs nachbearbeitet oder dort erstveröffentlicht. Eine Weiterverwendung ist unter der Auflage einer deutlichen Quellenangabe gestattet. &#91;&#91;de:Bild:Herero.jpg]])</em></li> <li>21 apr 2004 20:57 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:LocationHowlandIsland.png|LocationHowlandIsland.png]]" <em>(Vanaf de spaanse wikipedia &#91;&#91;es:Imagen:LocationHowlandIsland.png]])</em></li> <li>21 apr 2004 20:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Basel.tinguely.jpg|Basel.tinguely.jpg]]" <em>(Give a description for the image:* On 2002-05-28 15:17:27, &#91;&#91;user:Flups&#124;Flups]] uploaded file basel.tinguely.jpg &#91;Tinguely fountain at Basel, Switzerland] Used in German wiki article &#91;http&#58;//de.wikipedia.com/wiki.cgi?Jean_Tinguely Jean Tinguely].)</em></li> <li>21 apr 2004 20:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Jamesknoxpolk.jpg|Jamesknoxpolk.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Image of James K. Polk from the Library of Congress &#91;&#91;en:Image:jamesknoxpolk.jpg]])</em></li> <li>21 apr 2004 20:38 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Harry-truman-thumbnail.jpg|Harry-truman-thumbnail.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Public domain image from Truman Presidential Library * &#91;http&#58;//www.wikipedia.com/images/uploads/harry-truman.jpg full size image] &#91;&#91;en:Image:harry-truman-thumbnail.jpg]])</em></li> <li>21 apr 2004 20:36 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Truman_initiating_Korean_involvement.jpg|Truman_initiating_Korean_involvement.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;&#39;Description&#39;&#39;&#39;: &quot;President Harry S. Truman is shown at his desk at the White House signing a proclaimation declaring a national emergency.&quot; December 16, 1950. &#39;&#39;&#39;Credit&#39;&#39;&#39;: National Archives and Records Administration &#39;&#39;&#39;Source&#39;&#39;&#39;: http&#58;//teachpol.tcnj.edu/amer_pol_hist/thumbnail413.html ---- &#123;&#123;msg:PD}} &#91;&#91;en:Image:Truman initiating Korean involvement.jpg]])</em></li> <li>21 apr 2004 19:06 [[Gebruiker:Deadstar|Deadstar]] heeft ge-upload: "[[:Afbeelding:NorthernIrelandBelfast.png|NorthernIrelandBelfast.png]]" <em>(kaart belfast van en: wiki)</em></li> <li>21 apr 2004 15:31 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Ceesveerman.jpg|Ceesveerman.jpg]]" <em>(Minister Cees Veerman. Bron: &#91;http&#58;//www.minlnv.nl Ministerie van Landbouw, Natuur en Voedselkwaliteit])</em></li> <li>21 apr 2004 15:31 [[Gebruiker:Head|Head]] heeft ge-upload: "[[:Afbeelding:Wilde_eend.jpg|Wilde_eend.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Stockente Fotografiert von: &#91;&#91;Benutzer:Softeis&#124;Softeis]] 21:22, 28. Jun 2003 (CEST) &#91;&#91;de:Bild:Ente 1.jpg]])</em></li> <li>21 apr 2004 15:29 [[Gebruiker:Head|Head]] heeft ge-upload: "[[:Afbeelding:Wilde_eend.jpg|Wilde_eend.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Stockente Fotografiert von: &#91;&#91;Benutzer:Softeis&#124;Softeis]] 21:22, 28. Jun 2003 (CEST) &#91;&#91;de:Bild:Ente 1.jpg]])</em></li> <li>21 apr 2004 15:15 [[Gebruiker:Conget|Conget]] heeft ge-upload: "[[:Afbeelding:Image45.jpg|Image45.jpg]]" <em>((plaatje erbij))</em></li> <li>21 apr 2004 15:13 [[Gebruiker:Conget|Conget]] heeft ge-upload: "[[:Afbeelding:Image44.jpg|Image44.jpg]]" <em>(plaatje)</em></li> <li>21 apr 2004 15:11 [[Gebruiker:Conget|Conget]] heeft ge-upload: "[[:Afbeelding:Image45.gif|Image45.gif]]" <em>(een plaatje)</em></li> <li>21 apr 2004 15:06 [[Gebruiker:Conget|Conget]] heeft ge-upload: "[[:Afbeelding:Sosabowski.jpg|Sosabowski.jpg]]" <em>((zeker te weten geen auteurs recht) http&#58;//arnhem1944.civ.pl/sosabowski/1.jpg)</em></li> <li>21 apr 2004 14:57 [[Gebruiker:Conget|Conget]] heeft ge-upload: "[[:Afbeelding:Zyklonb_2.jpg|Zyklonb_2.jpg]]" <em>(Zyklon B plaatje)</em></li> <li>21 apr 2004 13:57 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:FaustinaIaureus(141).jpg|FaustinaIaureus(141).jpg]]" <em>(Portret van &#91;&#91;Faustina de Oudere]] op een aureus. Foto met toestemming van Classical Numismatic Group, Inc. (CNG).)</em></li> <li>21 apr 2004 13:45 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:FaustinaIaureus.jpg|FaustinaIaureus.jpg]]" <em>(Portret van &#91;&#91;Faustina de Oudere]] op een aureus. Foto met toestemming van Classical Numismatic Group, Inc. (CNG).)</em></li> <li>21 apr 2004 13:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Romanjk.jpg|Romanjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>21 apr 2004 13:17 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Mannjk.jpg|Mannjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>21 apr 2004 13:13 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Grobjk.jpg|Grobjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>21 apr 2004 12:06 [[Gebruiker:Deadstar|Deadstar]] heeft ge-upload: "[[:Afbeelding:Ireland-Inishmore6.jpg|Ireland-Inishmore6.jpg]]" <em>(van en: wiki)</em></li> <li>21 apr 2004 11:24 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:OthoDen.jpg|OthoDen.jpg]]" <em>(Portret van &#91;&#91;Otho]] op een denarius. Foto met toestemming van: Classical Numismatic Group, Inc. (CNG))</em></li> <li>21 apr 2004 09:27 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:MarcianaDen(114).jpg|MarcianaDen(114).jpg]]" <em>(Portret van &#91;&#91;Marciana]] op een denarius. Foto met toestemming van Classical Numismatic Group, Inc. (CNG).)</em></li> <li>21 apr 2004 08:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:UN_John_D._Negroponte.jpg|UN_John_D._Negroponte.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: John D. Negroponte, Permanent Representative of the United States to the United Nations, briefing correspondents at UN Headquarters. (UN Photo #UNE7020 by Evan Schneider), deemed fair use. http&#58;//www.un.org/av/photo/contactus.htm -- Terms &amp; conditions, United Nations Photo Library &#39;&#39;&lt;s&gt;This image has no information on its source.&lt;/s&gt; It may be &#91;&#91;fair use]] but this has yet to be verified. If it is an old image it might be &#91;&#91;public domain]] or under a licence compatible with the &#91;&#91;GNU FDL]].&#39;&#39; &#91;&#91;en:Image:UN John D. Negroponte.jpg]])</em></li> <li>21 apr 2004 08:03 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Montelbaanstoren.jpg|Montelbaanstoren.jpg]]" <em>(Montelbaanstoren, vanaf http&#58;//www.bma.amsterdam.nl/adam/nl/torens.html, Monumentenzorg Amsterdam, overnemen toegestaan)</em></li> <li>21 apr 2004 07:59 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Oval_Office_from_above.jpg|Oval_Office_from_above.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:PD}} &#91;&#91;en:Image:Oval Office from above.jpg]])</em></li> <li>21 apr 2004 07:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Vandenberg.jpg|Vandenberg.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Astronaut van den Berg &#91;&#91;en:Image:vandenberg.jpg]])</em></li> <li>21 apr 2004 07:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Maradona1.bmp|Maradona1.bmp]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: WM 1994, das letzteMal &#91;&#91;de:Bild:Wm1994.bmp]])</em></li> <li>21 apr 2004 07:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Maradona2.bmp|Maradona2.bmp]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Weltmeister &#91;&#91;de:Bild:Mara2.bmp]])</em></li> <li>21 apr 2004 07:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:AbbeyRoad.jpg|AbbeyRoad.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:fairuse}} &#91;&#91;en:Image:AbbeyRoad.jpg]])</em></li> <li>21 apr 2004 07:24 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Hazelnoot_bloeiend.jpg|Hazelnoot_bloeiend.jpg]]" <em>(zelfgemaakte foto; mannelijke bloeiwijze van de hazelnoot)</em></li> <li>21 apr 2004 07:11 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Akkerviooltje_moestuin.jpg|Akkerviooltje_moestuin.jpg]]" <em>(zelfgemaakte foto; onkruid in de moestuin april 2004)</em></li> <li>21 apr 2004 06:34 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Xorp-logo.jpg|Xorp-logo.jpg]]" <em>(Ik vraag om toestemming)</em></li> <li>21 apr 2004 05:40 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Netanyahu_bibi.jpg|Netanyahu_bibi.jpg]]" <em>(he: wikipedia)</em></li> <li>21 apr 2004 05:26 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:EBarak.jpg|EBarak.jpg]]" <em>(En: wikipedia)</em></li> <li>21 apr 2004 00:49 [[Gebruiker:Db-inf|Db-inf]] heeft ge-upload: "[[:Afbeelding:Wapen_van_Zwake.gif|Wapen_van_Zwake.gif]]" <em>(Eerdere versie hersteld)</em></li> <li>21 apr 2004 00:48 [[Gebruiker:Db-inf|Db-inf]] heeft ge-upload: "[[:Afbeelding:Wapen_van_Zwake.gif|Wapen_van_Zwake.gif]]" <em>(Eerdere versie hersteld)</em></li> <li>21 apr 2004 00:47 [[Gebruiker:Db-inf|Db-inf]] heeft ge-upload: "[[:Afbeelding:Wapen_van_Zwake.gif|Wapen_van_Zwake.gif]]" <em>(Wapen van de oude gemeente Zwake, ontleent aan de familie de Recourt de Lens et de Licques)</em></li> <li>21 apr 2004 00:38 [[Gebruiker:Db-inf|Db-inf]] heeft ge-upload: "[[:Afbeelding:Wapen_van_Zwake.gif|Wapen_van_Zwake.gif]]" <em>(Wapen van de oude gemeente Zwake, ontleent aan de familie de Recourt de Lens et de Licques)</em></li> <li>20 apr 2004 23:13 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Haendel.jpg|Haendel.jpg]]" <em>(&#91;&#91;Georg Friedrich Händel]], portret door &#91;&#91;Balthasar Denner]] (1685-1749), 1733.)</em></li> <li>20 apr 2004 23:04 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Hallerbause.jpg|Hallerbause.jpg]]" <em>(&#91;&#91;Albrecht von Haller]]. Gravure van Johann Friedrich Bause (1738-1814) naar een werk van &#91;&#91;Sigmund Freudenberger]] (1745-1801))</em></li> <li>20 apr 2004 22:58 [[Gebruiker:Henricus|Henricus]] heeft ge-upload: "[[:Afbeelding:Lower_saxony_el.png|Lower_saxony_el.png]]" <em>(Kaart van het Eemsland (uit en: wiki - &#91;http&#58;//en.wikipedia.org/wiki/Wikipedia:WikiProject_German_districts/Maptemplates bron]))</em></li> <li>20 apr 2004 22:39 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Zahnradsysteme.JPG|Zahnradsysteme.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Zahnradsysteme vlnr: Riggenbach, Strub, Abt (2 oder 3 Lamellen), Locher *Beschreibung: Zahnradsysteme *Quelle: Aus einem eigenen Vortrag 1972 *Fotograf oder Zeichner: selber *Andere Versionen: keine *Lizenzstatus: Public Domain &#91;&#91;de:Bild:Zahnradsysteme.JPG]])</em></li> <li>20 apr 2004 22:19 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Arezzo.jpg|Arezzo.jpg]]" <em>(Guido van Arezzo. Bron onbekend, maar kennelijk Middeleeuws.)</em></li> <li>20 apr 2004 22:16 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:HagiaSofia.jpg|HagiaSofia.jpg]]" <em>(Hagia Sofia, Istanbul, June 1994, 400 x 235 pixels; © 1994, by Wikipedia user:alex756, all rights reserved; the license granted herein is to Wikimedia Foundation, Inc. for non-exclusive distribution under the GNU FDL. Please contact user:alex756 for permission to use in any other (i.e. non-GFDL or CC) context. Alex756 03:09, 21 Aug 2003 (UTC) )</em></li> <li>20 apr 2004 22:10 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Grunewald.jpg|Grunewald.jpg]]" <em>(Matthias Grünewald. Kopergravure. Verschenen in: Academia Picturae, 1683.)</em></li> <li>20 apr 2004 22:08 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Crucifixion.jpg|Crucifixion.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;The &#91;&#91;Crucifixion]]&#39;&#39;, by &#91;&#91;Matthias Grunewald]] &#91;&#91;en:Image:crucifixion.jpg]])</em></li> <li>20 apr 2004 21:44 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Towergateway.jpg|Towergateway.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: tower gateway dlr taken 27/11/03 by a brady &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:Towergateway.jpg]])</em></li> <li>20 apr 2004 21:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Celje-rscd.png|Celje-rscd.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: resized image &#91;&#91;en:Image:Celje-rscd.png]])</em></li> <li>20 apr 2004 21:36 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Celje-1441.JPG|Celje-1441.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Celje on the picture from 1441 &#91;&#91;en:Image:Celje-1441.JPG]])</em></li> <li>20 apr 2004 21:21 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Salamander.jpg|Salamander.jpg]]" <em>(Vanaf Duitse wikipedia, &#91;&#91;de:Bild:Sal.jpg]], Salamander (Bild von http&#58;//gimp-savvy.com/cgi-bin/img.cgi?ufwsGMESuqvyMyo1330) )</em></li> <li>20 apr 2004 21:21 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GeraniumMolle-overz-kl.jpg|GeraniumMolle-overz-kl.jpg]]" <em>(eigen foto, hierbij onder gnu/fdl gebracht)</em></li> <li>20 apr 2004 21:18 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Goldkroete_klein.jpg|Goldkroete_klein.jpg]]" <em>(Vanaf duitse wikipedia, &#91;&#91;de:Bild:Goldkroete klein.jpg]])</em></li> <li>20 apr 2004 21:15 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:FaustinaIIaureus.jpg|FaustinaIIaureus.jpg]]" <em>(Portret van &#91;&#91;Faustina de Jongere]] op een aureus. Foto met toestemming van Classical Numismatic Group, Inc. (CNG).)</em></li> <li>20 apr 2004 21:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bluesalamander5488.jpg|Bluesalamander5488.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Blue-spotted salamander. U.S. postage stamp. Legally reproduced under U.S. Code: Title 18: Section 504 &#91;&#91;en:Image:Bluesalamander5488.jpg]])</em></li> <li>20 apr 2004 21:07 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:CLemayDoan.jpg|CLemayDoan.jpg]]" <em>(Image from: &lt;http&#58;//www.nlc-bnc.ca/olympians/h15-114-e.html&gt; From the National Library and Archives of Canada : &quot;Images contributed to this database by the Canadian Olympic Committee (COC) may be reproduced for non-commercial purposes without asking permission from the COC or paying copyright royalty.&quot; )</em></li> <li>20 apr 2004 21:02 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CLemayDoan.jpg|CLemayDoan.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Image from: http&#58;//www.nlc-bnc.ca/olympians/h15-114-e.html From the National Library and Archives of Canada : &quot;&#39;&#39;Images contributed to this database by the Canadian Olympic Committee (COC) may be reproduced for non-commercial purposes without asking permission from the COC or paying copyright royalty&#39;&#39;.&quot; &#123;&#123;msg:noncommercial}} &#91;&#91;en:Image: CLemayDoan.jpg]])</em></li> <li>20 apr 2004 20:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CLemayDoan.jpg|CLemayDoan.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Image from: http&#58;//www.nlc-bnc.ca/olympians/h15-114-e.html From the National Library and Archives of Canada : &quot;&#39;&#39;Images contributed to this database by the Canadian Olympic Committee (COC) may be reproduced for non-commercial purposes without asking permission from the COC or paying copyright royalty&#39;&#39;.&quot; &#123;&#123;msg:noncommercial}} &#91;&#91;en:Image: CLemayDoan.jpg]])</em></li> <li>20 apr 2004 20:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cathars_expelled.JPG|Cathars_expelled.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: cathars being expelled from carcassone, france &#91;&#91;en:Image:cathars expelled.JPG]])</em></li> <li>20 apr 2004 20:40 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:EscCyL.jpg|EscCyL.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-es. De beschrijving daar was: Escudo de Castilla y Leon desde en: &#91;&#91;es:Imagen:EscCyL.jpg]])</em></li> <li>20 apr 2004 20:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Wappen.jpg|Wappen.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Wappen von Kastilien und León in der Kathedrale von Burgos, selbst fotografiert 1993 &#91;&#91;de:Bild:Wappen.jpg]])</em></li> <li>20 apr 2004 20:36 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Goddardrocket.jpg|Goddardrocket.jpg]]" <em>(Robert Goddard met een raket. Bron: NASA/Goddard Space Flight Center. Publiek domein wegens Amerikaanse overheidsinstelling.)</em></li> <li>20 apr 2004 20:28 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Esskastanien.jpg|Esskastanien.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Esskastanie von Marian Szengel Bild steht unter der FDL &#91;&#91;de:Bild:Esskastanien.jpg]])</em></li> <li>20 apr 2004 20:28 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Castanea_sativa.jpg|Castanea_sativa.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Esskastanie &#91;&#91;de:Bild:Castanea sativa.jpg]])</em></li> <li>20 apr 2004 20:21 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cassiopeia_constellation_map_small.png|Cassiopeia_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Cassiopeia_constellation_map_small.png]])</em></li> <li>20 apr 2004 20:18 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cassiopeia_constellation_map.png|Cassiopeia_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: ;description: Carte pour la constellation &#91;&#91;Cassiopée (constellation)&#124;Cassiopée]] ;source: produite à l&#39;aide du logiciel &#91;http&#58;//pp3.sourceforge.net/ PP3] de &#91;&#91;w:en:User:Bronger]] ;copyright: &#123;&#123;msg:GFDL}} &#91;&#91;fr:Image:Cassiopeia constellation map.png]])</em></li> <li>20 apr 2004 19:40 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Carus.jpg|Carus.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Carus aus Baumeister: Denkmäler des klassischen Altertums. 1885. Band I., Seite 374 &#91;&#91;de:Bild:Carus.jpg]])</em></li> <li>20 apr 2004 19:33 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Carthage.jpg|Carthage.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Ruins of Carthage Photograph available under GFDL license. I took this picture myself with a Minolta XD-5 on Kodakcolor 100. It has been scanned from a print and digitally edited (framing, color balance). You do not need my permission to reuse it, but you may not claim that you took the photo yourself. &#91;&#91;en:Image:Carthage.jpg]])</em></li> <li>20 apr 2004 19:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ruines_de_Carthage.jpg|Ruines_de_Carthage.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: &#39;&#39;&#39;Description :&#39;&#39;&#39; Ruines de &#91;&#91;Carthage]]. &#39;&#39;&#39;Source :&#39;&#39;&#39; http&#58;//patrick.verdier.free.fr/Search.php?keyword=Carthage &#39;&#39;&#39;Licence :&#39;&#39;&#39; &#91;&#91;domaine public]]. :Free On Line Photos est un site de photos gratuites et libres de droits à télécharger. Toutes les photos respectent les bonnes moeurs et sont dégagées de droits sur la propriété intellectuelle &#91;&#91;fr:Image:Ruines de Carthage.jpg]])</em></li> <li>20 apr 2004 19:24 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Carter_Family|Carter_Family]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Carter Family album cover, fair use &#91;&#91;en:Image:Carter Family]])</em></li> <li>20 apr 2004 19:22 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cartagena_co_2.jpg|Cartagena_co_2.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Cartagena, Colombia &#91;&#91;en:Image:Cartagena co 2.jpg]])</em></li> <li>20 apr 2004 19:22 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cartagena_co_1.jpg|Cartagena_co_1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Downtown Cartagena, Colombia &lt;BR&gt;Chris Ashton &lt;BR&gt;September 2, 2003 &#91;&#91;en:Image:Cartagena co 1.jpg]])</em></li> <li>20 apr 2004 19:18 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Nevada_map_showing_Carson_City.png|Nevada_map_showing_Carson_City.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Overview map of Nevada showing county &#91;&#91;en:Image:Nevada map showing Carson City.png]])</em></li> <li>20 apr 2004 19:15 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Hainbuche.jpg|Hainbuche.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: **Früchte der Hainbuche *Quelle: **Fotografiert am 14. September 2002 *Fotograf: **&#91;&#91;Benutzer:ArtMechanic&#124;ArtMechanic]] *Copyright Status: **&#91;&#91;GNU Freie Dokumentationslizenz]] &#91;&#91;de:Bild:Hainbuche.jpg]])</em></li> <li>20 apr 2004 19:07 [[Gebruiker:Moose1960|Moose1960]] heeft ge-upload: "[[:Afbeelding:Radiospectrum.png|Radiospectrum.png]]" <em>(Het EM-spectrum, van Wikepedia UK)</em></li> <li>20 apr 2004 18:58 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Locatie_Alteveer.png|Locatie_Alteveer.png]]" <em>(Locatie Alteveer, zelfgemaakt kaartje op basis van gemeente kaartje Mtcv &#123;&#123;msg:GFDL}})</em></li> <li>20 apr 2004 18:57 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Carina_constellation_map_small.png|Carina_constellation_map_small.png]]" <em>(Vanaf engelse wikipedia &#91;&#91;en:Image:Carina constellation map small.png]])</em></li> <li>20 apr 2004 18:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Carcasonne_spel.jpg|Carcasonne_spel.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Carcassonne Hans im Glück offizielle Pressefoto, zur allgemeinen Verwendung freigegeben &#91;&#91;de:Bild:carcassonne.jpg]])</em></li> <li>20 apr 2004 18:23 [[Gebruiker:Conget|Conget]] heeft ge-upload: "[[:Afbeelding:Sarin.jpg|Sarin.jpg]]" <em>(sarin structuur formule 3D)</em></li> <li>20 apr 2004 15:41 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Goyathlay.gif|Goyathlay.gif]]" <em>(Portret van Goyathlay, beter bekend als &#91;&#91;Geronimo]], leider der Apachen. Fotograaf: Vermoedelijk &#91;&#91;Frank Rinehart]] (1862-1928).)</em></li> <li>20 apr 2004 13:17 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Gauguin2.jpg|Gauguin2.jpg]]" <em>(Zelfportret van &#91;&#91;Paul Gauguin]] (1848-1903))</em></li> <li>20 apr 2004 13:11 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Gassmann.jpg|Gassmann.jpg]]" <em>(&#91;&#91;Leopold Gassmann]]. Graveur onbekend, doch ongetwijfeld Publiek Domein wegens ouderdom.)</em></li> <li>20 apr 2004 13:08 [[Gebruiker:Evanherk|Evanherk]] heeft ge-upload: "[[:Afbeelding:PGWodehouse.jpg|PGWodehouse.jpg]]" <em>(PG Wodehouse in 1904, van engelse wiki, copyright velopen op grond van tijd.)</em></li> <li>20 apr 2004 12:46 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Vasco_da_gama.jpg|Vasco_da_gama.jpg]]" <em>(Vasco da Gama. Uit: &quot;Vasco da Gama&quot;, ca. 1510, Biblioth&amp;egrave;que Nationale, Parijs)</em></li> <li>20 apr 2004 12:40 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Galileo-picture.jpg|Galileo-picture.jpg]]" <em>(Galileo Galilei, publiek domein wegens ouderdom. Afkomstig van http&#58;//www.galileo-galilei.org/pictures-galileo-galilei.html, waar staat: &quot;As far as I know these pictures of Galileo are in the public domain. You are welcome to use it freely as well.&quot;)</em></li> <li>20 apr 2004 12:34 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Janvangalen.gif|Janvangalen.gif]]" <em>(&#91;&#91;Jan van Galen]], Nederlands vlootvoogd. Vrijwel zeker Publiek Domein wegens ouderdom.)</em></li> <li>20 apr 2004 12:31 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Bernhardvongalen.jpg|Bernhardvongalen.jpg]]" <em>(&#91;&#91;Christoph Bernhard von Galen]] (1606-1678), bisschop van Münster. Maker onbekend, maar ongetwijfeld publiek domein wegens ouderdom.)</em></li> <li>20 apr 2004 12:22 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Gainsborough.jpg|Gainsborough.jpg]]" <em>(Zelfportret van &#91;&#91;Thomas Gainsborough]] (1727-1788), ca. 1758. Thans in het National Portrait Gallery, Londen.)</em></li> <li>20 apr 2004 12:10 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Nielsgade.jpg|Nielsgade.jpg]]" <em>(De Deense componist Niels Wilhelm Gade. Foto naar aangenomen publiek domein wegens ouderdom (Gade stierf in 1890).)</em></li> <li>20 apr 2004 11:42 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Speres.jpg|Speres.jpg]]" <em>(En: wikipedia)</em></li> <li>20 apr 2004 11:35 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Ivanchuk4a.jpg|Ivanchuk4a.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 11:24 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Adamsjk.jpg|Adamsjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>20 apr 2004 10:41 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Morozevich1.jpg|Morozevich1.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 10:01 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Shirov.jpg|Shirov.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 09:52 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Adams.jpg|Adams.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 09:42 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gelfand.jpg|Gelfand.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 09:36 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:GurevichD.jpg|GurevichD.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 09:30 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Ponomariov.jpg|Ponomariov.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 09:26 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Tiviakov.jpg|Tiviakov.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 09:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Anand.jpg|Anand.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 09:11 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kamskiy.jpg|Kamskiy.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 08:57 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Münsteraner_Rathaus_mittel.jpg|Münsteraner_Rathaus_mittel.jpg]]" <em>(Foto van de:Wikipedia.org. gemaakt door &#91;&#91;:de:Benutzer:El&#124;El]] &#123;&#123;msg:GFDL}})</em></li> <li>20 apr 2004 08:25 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Korchnoi.jpg|Korchnoi.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 08:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Leko.jpg|Leko.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 08:14 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Miles.jpg|Miles.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 08:08 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Short.jpg|Short.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 08:01 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:KramnikVegas150.jpg|KramnikVegas150.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 07:25 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Karpov4.jpg|Karpov4.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>20 apr 2004 07:10 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Akkerviooltje.jpg|Akkerviooltje.jpg]]" <em>(zelfgemaakte foto; akkerviooltje in april in de moestuin)</em></li> <li>20 apr 2004 06:48 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Carbonyl.png|Carbonyl.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: modified from &#91;&#91;:Image:Carboxy.png]] &#91;&#91;en:Image:Carbonyl.png]])</em></li> <li>20 apr 2004 06:41 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Papuan_Frogmouth.jpg|Papuan_Frogmouth.jpg]]" <em>(Vanaf engelse wikipedia)</em></li> <li>20 apr 2004 06:36 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Kievitsbloem.jpg|Kievitsbloem.jpg]]" <em>(zelfgemaakte foto; van de bloem zijn twee kelkbladen en een meeldraad verwijderd om goed zicht te krijgen op de bloemonderdelen)</em></li> <li>20 apr 2004 06:29 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Swedish_helbard_(16th_century).jpg|Swedish_helbard_(16th_century).jpg]]" <em>(Van de Engelse Wiki, volgens de uploader aldar afkomstig van de Zweedse wiki (inderdaad) en public domein (wegens taalproblemen niet te controleren voor mij))</em></li> <li>20 apr 2004 06:18 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Arms-canterbury.jpg|Arms-canterbury.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Arms of &#91;&#91;Canterbury, England&#124;Canterbury]] City Council. From &#91;http&#58;//www.civicheraldry.co.uk civicheraldry.co.uk], with permission. &#91;&#91;User:Marnanel/CivicHeraldry pages&#124;About the civic heraldry images...]] &#61;=External links== * &#91;http&#58;//www.civicheraldry.co.uk/kent.html#canterbury%20city Details of the arms] &#91;&#91;en:Image:arms-canterbury.jpg]])</em></li> <li>20 apr 2004 06:17 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:KentCanterbury.png|KentCanterbury.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: district of &#91;&#91;Kent]] &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:KentCanterbury.png]])</em></li> <li>20 apr 2004 06:11 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Blason_Canne.png|Blason_Canne.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: &#39;&#39;&#39;Titre:&#39;&#39;&#39; Blason de Canne r&amp;#233;alis&amp;#233; pour le &#91;&#91;Wikip&amp;#233;dia:Projet, Blasons&#124;Projet, Blasons]] de Wikip&amp;#233;dia &#39;&#39;&#39;Source:&#39;&#39;&#39; Dessin&amp;#233;e par &#91;&#91;Utilisateur:Rinaldum&#124;&amp;#422;inaldum]] 4 mar 2004 &amp;#224; 23:31 (CET) &#39;&#39;&#39;Licence:&#39;&#39;&#39; GPL, GFDL, Cr&amp;#233;ative C. &#91;&#91;fr:Image:Blason Canne.png]])</em></li> <li>20 apr 2004 05:20 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Egon_Schiele_zelfportret.jpg|Egon_Schiele_zelfportret.jpg]]" <em>(Egon Schiele, zelfportret, vanaf een poster bij het Haags Gemeentemuseum, ter beschikking gesteld onder GFDL, foto &#91;&#91;gebruiker:Ellywa]])</em></li> <li>20 apr 2004 05:15 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Ahmed_II.jpg|Ahmed_II.jpg]]" <em>(En: wikipedia)</em></li> <li>20 apr 2004 05:14 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Bloesem_den_haag_april_2004.JPG|Bloesem_den_haag_april_2004.JPG]]" <em>(Bloesem, Den Haag, april 2004, eigen foto, ter beschikking gesteld onder GFDL licentie)</em></li> <li>20 apr 2004 04:55 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Breiwerk.jpg|Breiwerk.jpg]]" <em>(Gekopieerd vanaf Engelse wikipedia, Description: Photo of knitted hat, yarn, and knitting needles )</em></li> <li>20 apr 2004 04:52 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Mustafa_II.jpg|Mustafa_II.jpg]]" <em>(En: wikipedia)</em></li> <li>20 apr 2004 04:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CMi_bode.jpg|CMi_bode.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Sternbild Kleiner Hund, Stich von 1782 &#91;&#91;de:Bild:CMi bode.jpg]])</em></li> <li>20 apr 2004 04:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Canis_minor_constellation_map.png|Canis_minor_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This is a celestial map of the constellation Canis Minor, the Small Dog. Copyright &amp;copy; 2003 &#91;mailto:bronger@physik.rwth-aachen.de Torsten Bronger]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 22/02/1003. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line isx the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the azimuthal equidistant projection (the azimuth being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Canis minor constellation map.png]])</em></li> <li>20 apr 2004 04:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Canis_major_constellation_map_small.png|Canis_major_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia)</em></li> <li>20 apr 2004 04:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CMa_bode.jpg|CMa_bode.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Sternbild grosser Hund, Stich von 1782 &#91;&#91;de:Bild:CMa bode.jpg]])</em></li> <li>20 apr 2004 04:36 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CVn_bode.jpg|CVn_bode.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Sterbild Jagdhunde, Stich von 1782 &#91;&#91;de:Bild:CVn bode.jpg]])</em></li> <li>20 apr 2004 04:36 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:M51.arp.250pix.jpg|M51.arp.250pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: M51, known as the Whirlpool Galaxy, is a bright spiral galaxy fairly close to us (25 million light years). At the top of the picture, is a companion galaxy which is being disrupted by the gravitational tidal forces of the main galaxy. &lt;br&gt; &#39;&#39;&#39;CREDIT&#39;&#39;&#39;: Javier Méndez (ING) and Nik Szymanek, 2nd June 2000 &lt;br&gt; &#39;&#39;&#39;SOURCE&#39;&#39;&#39;: http&#58;//www.ing.iac.es/PR/science/m51_high.html &lt;br&gt; &#39;&#39;&#39;COPYRIGHT MESSAGE&#39;&#39;&#39;: &#39;&#39;For publication or display (electronic or otherwise), all the images on these web pages must be credited: &quot;Photo courtesy of the Isaac Newton Group of Telescopes, La Palma&quot; unless otherwise stated. Please send a message to Javier Méndez (PR Officer) with all the details of the publication&#39;&#39;. (Note from Adrian Pingstone: Javier Mendez has been informed).&lt;br&gt; &#39;&#39;&#39;EXTRA INFORMATION&#39;&#39;&#39;: The Isaac Newton Group of Telescopes (ING) consists of the 4.2 metre William Herschel Telescope, the 2.5 metre Isaac Newton Telescope and the 1.0 metre Jacobus Kapteyn Telescope. The telescopes are owned and operated jointly by the Particle Physics and Astronomy Research Council (PPARC) of the United Kingdom, the Nederlandse Organisatie voor Wetenschappelijk Onderzoek (NWO) of the Netherlands and the Instituto de Astrofísica de Canarias (IAC) of Spain. The telescopes are located in the Spanish Observatorio del Roque de Los Muchachos on La Palma which is operated by the Instituto de Astrofísica de Canarias (IAC).&lt;br&gt; &#39;&#39;&#39;PICTURE PREPARED&#39;&#39;&#39; by Adrian Pingstone in November 2003. &#91;&#91;en:Image:m51.arp.250pix.jpg]])</em></li> <li>20 apr 2004 04:33 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Canes_venatici_constellation_map_small.png|Canes_venatici_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia)</em></li> <li>20 apr 2004 04:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cancer_constellation_map_small.png|Cancer_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia)</em></li> <li>20 apr 2004 04:27 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Canberra_Old_parliament_house.jpg|Canberra_Old_parliament_house.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: old parliament house &#91;&#91;en:Image:Old parliament house.jpg]])</em></li> <li>20 apr 2004 04:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:5_dollar_kanada_b.jpg|5_dollar_kanada_b.jpg]]" <em>(Vanaf poolse wikipedia &#91;&#91;pl:5_dollar_kanada_b.jpg]])</em></li> <li>20 apr 2004 04:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:5_dollar_kanada_f.jpg|5_dollar_kanada_f.jpg]]" <em>(Vanaf poolse wikipedia &#91;&#91;pl:5_dollar_kanada_f.jpg]])</em></li> <li>20 apr 2004 04:09 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Canadian-coins.jpg|Canadian-coins.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Canadian circulation coins (scanned and edited by Montréalais) &#91;&#91;en:Image:canadian-coins.jpg]])</em></li> <li>20 apr 2004 03:57 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Anole_8172.JPG|Anole_8172.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Carolina anole Photo by Pollinator, on goldenrod, South Carolina, October, 2001 &#91;&#91;en:Image:Anole 8172.JPG]])</em></li> <li>20 apr 2004 03:52 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Camera_obscura.jpg|Camera_obscura.jpg]]" <em>(Vanaf Engelse wikipedia, komt overeen met de eerdere versie)</em></li> <li>20 apr 2004 03:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Camera_obscura_m.jpg|Camera_obscura_m.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-pl. De beschrijving daar was: Fizyka z 1910 &#91;&#91;pl:Grafika:camera obscura m.jpg]])</em></li> <li>20 apr 2004 03:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Camera_obscura.jpg|Camera_obscura.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: ;description: Planche de l&#39;Encyclopédie sur la camera obscura ;source: Scan de l&#39;&#91;&#91;Encyclopédie ou dictionnaire raisonné des sciences, des arts et des métiers]] (édité entre 1751 et 1772) ;copyright: &#91;&#91;domaine public]] (copyrigth expiré) &#91;&#91;fr:Image:Camera obscura.jpg]])</em></li> <li>20 apr 2004 03:40 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Caelum_constellation_map_small.png|Caelum_constellation_map_small.png]]" <em>(Give a description for the image:Vanaf Engelse wikipedia)</em></li> <li>20 apr 2004 03:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CFlockhart.jpg|CFlockhart.jpg]]" <em>(Vanaf Engelse wikipedia)</em></li> <li>20 apr 2004 03:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Calcite.double.750pix.jpg|Calcite.double.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Banded agate. The specimen is one inch (2.5 cm) wide.&lt;br&gt; Picture made without a camera by laying the carving on a flat bed scanner.&lt;br&gt; Released to the public domain by Adrian Pingstone in May 2003. &#91;&#91;en:Image:calcite.double.750pix.jpg]])</em></li> <li>20 apr 2004 03:26 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Large_Cairo_Landsat.jpg|Large_Cairo_Landsat.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Large Landsat of Cairo &#91;&#91;en:Image:Large Cairo Landsat.jpg]])</em></li> <li>20 apr 2004 03:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:EgyptAlQahirah.png|EgyptAlQahirah.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:EgyptAlQahirah.png]])</em></li> <li>20 apr 2004 03:24 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Kairo_001.jpg|Kairo_001.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *&#39;&#39;&#39;Beschreibung: &#39;&#39;&#39; **Blick vom Cairo Tower auf das Zentrum von &#91;&#91;Kairo]] *&#39;&#39;&#39;Quelle:&#39;&#39;&#39; **Fotografiert am &#91;&#91;6. Oktober]] &#91;&#91;2003]] *&#39;&#39;&#39;Fotograf: &#39;&#39;&#39; **&#91;http&#58;//www.martinsteiger.ch Martin Steiger] *&#39;&#39;&#39;Copyright Status: &#39;&#39;&#39; **&#91;&#91;GNU Freie Dokumentationslizenz]], Publikation mit Genehmigung des Fotografen &#91;&#91;en:Image:Egypt.Cairo.Panorama.01.jpg]] &#91;&#91;de:Bild:Kairo 001.jpg]])</em></li> <li>20 apr 2004 03:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cadiz_Rathaus.jpg|Cadiz_Rathaus.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Rathaus von Cadiz (Spanien, 2003), Fotograf: Falkue &#91;&#91;de:Bild:Cadiz Rathaus.jpg]])</em></li> <li>20 apr 2004 03:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cadillac.series62.750pix.jpg|Cadillac.series62.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: 1941 Cadillac Series 62, seen at a Classics Rally at Slimbridge, Gloucestershire, England, in June 2003.&lt;br&gt; Picture taken by Adrian Pingstone and released to the public domain.&lt;br&gt; &#91;&#91;en:Image:cadillac.series62.750pix.jpg]])</em></li> <li>20 apr 2004 03:04 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Babshrinenight.jpg|Babshrinenight.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Shrine of the Bab in Haifa Israel at night viewed from above looking down Ben Gurion Avenue Photo distributed for public use by the Baha&#39;i World Center, re-sized from a photo on the press materials page at http&#58;//www.bahaiworldnews.org/terraces/photos.en.html &#91;&#91;en:Image:Babshrinenight.jpg]])</em></li> <li>20 apr 2004 02:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Butrint_2.jpg|Butrint_2.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;&#39;General info&#39;&#39;&#39;: &#91;&#91;Butrint]], &#91;&#91;Albania]]&lt;br&gt; &#39;&#39;&#39;Size&#39;&#39;&#39;: 85.4 KB&lt;br&gt; &#39;&#39;&#39;Dimension&#39;&#39;&#39;: 640x480 pixels&lt;br&gt; &#39;&#39;&#39;Source&#39;&#39;&#39;: &#91;http&#58;//2ie.mpl.ird.fr/mm/albania Marc Morell] used with &#91;&#91;User:Dori/Marc Morell permission&#124;permission]]&lt;br&gt; &#39;&#39;&#39;License&#39;&#39;&#39;: &#91;&#91;GFDL]]&lt;br&gt; &#91;&#91;en:Image:Butrint 2.jpg]])</em></li> <li>20 apr 2004 02:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Butan.png|Butan.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: Strukturformel n-Butan *Quelle: ChemSketch *Fotograf oder Zeichner: MarkusZi *Andere Versionen: - *Lizenzstatus: GNU FDL &#91;&#91;de:Bild:Butan.png]])</em></li> <li>20 apr 2004 02:26 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:ScotlandWesternIsles.png|ScotlandWesternIsles.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: council area of Scotland &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:ScotlandWesternIsles.png]])</em></li> <li>20 apr 2004 02:24 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Congresoba.jpg|Congresoba.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-es. De beschrijving daar was: cd http&#58;//www.sxc.hu &#91;&#91;es:Imagen:congresoba.jpg]])</em></li> <li>20 apr 2004 02:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Argentina_Buenos_Aires_province.png|Argentina_Buenos_Aires_province.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: von der englischen Wikipedia &#91;&#91;de:Bild:Argentina Buenos Aires province.png]])</em></li> <li>19 apr 2004 22:02 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Alexander_the_great_1.jpg|Alexander_the_great_1.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 21:47 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Prodi2.jpg|Prodi2.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: © European Communities, 1995-2003 &#91;&#91;en:Image:Prodi.jpg]])</em></li> <li>19 apr 2004 21:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Prodi.jpg|Prodi.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Romano Prodi Quelle: http&#58;//usinfo.state.gov/topical/econ/group8/summit01/wwwhdeleuro.html public domain &#91;&#91;de:Bild:Prodi.jpg]])</em></li> <li>19 apr 2004 21:22 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Brooklyn-Pana-05.jpg|Brooklyn-Pana-05.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Panorama drawing of Brooklyn c. 1890s, public domain 600x368 &#91;&#91;en:Image:Brooklyn-Pana-05.jpg]])</em></li> <li>19 apr 2004 21:21 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Map_of_New_York_highlighting_Kings_County.png|Map_of_New_York_highlighting_Kings_County.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Public domain map courtesy of &#91;http&#58;//www.lib.utexas.edu/ The General Libraries, The University of Texas at Austin], modified to show counties. Released under GFDL. See &#91;&#91;Wikipedia:U.S. county map]]s. &#91;&#91;en:Image:Map of New York highlighting Kings County.png]])</em></li> <li>19 apr 2004 21:12 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Cablecar.zelllamsee.500pix.jpg|Cablecar.zelllamsee.500pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The Sonnenalmbahn cable car at Zell am See in the Austrian Alps.&lt;br&gt; Photographed by Adrian Pingstone in 1998 and released to the public domain. &#91;&#91;en:Image:cablecar.zelllamsee.500pix.jpg]])</em></li> <li>19 apr 2004 21:02 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Commonthen.jpg|Commonthen.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Little graphic I made showing change of Commonwealth &#91;&#91;en:Image:commonthen.jpg]])</em></li> <li>19 apr 2004 21:00 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Britney_Spears.jpg|Britney_Spears.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Britney Spears performs on the National Mall, public domain image from navy.mil. Original: &#91;http&#58;//www.news.navy.mil/view_single.asp?id=9384] &#123;&#123;msg:PD}} &#91;&#91;en:Image:Britney Spears.jpg]])</em></li> <li>19 apr 2004 20:57 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Suleyman_I.jpg|Suleyman_I.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 20:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:BrighamYoung.jpg|BrighamYoung.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Statue of Brigham Young From &#91;http&#58;//teachpol.tcnj.edu/amer_pol_hist/thumbnail176.html http&#58;//teachpol.tcnj.edu/amer_pol_hist/thumbnail176.html], in the public domain &#91;&#91;en:Image:BrighamYoung.jpg]])</em></li> <li>19 apr 2004 20:46 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Klm.b737.750pix.jpg|Klm.b737.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: KLM Boeing 737-400 (PH-BTA) on the approach to London (Heathrow) Airport (UK).&lt;br&gt; Photographed by Adrian Pingstone in August 2002 and released to the public domain. &#123;&#123;msg:PD}} &#91;&#91;en:Image:klm.b737.750pix.jpg]])</em></li> <li>19 apr 2004 20:42 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Alitalia.a321-112.i-bixd.250pix.jpg|Alitalia.a321-112.i-bixd.250pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Airbus A321-100 of Alitalia landing at London (Heathrow) Airport.&lt;br&gt; Photographed by Adrian Pingstone in August 2002 and released to the public domain. &#91;&#91;en:Image:alitalia.a321-112.i-bixd.250pix.jpg]])</em></li> <li>19 apr 2004 20:38 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Air.france.a320.750pix.jpg|Air.france.a320.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Air France Airbus A320-200 (F-GFKM) on the approach to London (Heathrow) Airport (UK).&lt;br&gt; Photographed by Adrian Pingstone in September 2003 and released to the public domain. &#91;&#91;en:Image:air.france.a320.750pix.jpg]])</em></li> <li>19 apr 2004 20:35 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Ahmed_III.jpg|Ahmed_III.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 20:33 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Paris.seine.750pix.jpg|Paris.seine.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The river Seine in Paris. &lt;br&gt; Photographed by Adrian Pingstone in June 2002 and released to the public domain. &#91;&#91;en:Image:paris.seine.750pix.jpg]])</em></li> <li>19 apr 2004 20:29 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Mahmud_I_ottoman.jpg|Mahmud_I_ottoman.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 20:29 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Fault4734.jpg|Fault4734.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Appalachian geologic fault &#91;&#91;en:Image:Fault4734.jpg]])</em></li> <li>19 apr 2004 20:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Blason_Bretagne.jpg|Blason_Bretagne.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: &#39;&#39;&#39;Titre:&#39;&#39;&#39; Blason de la r&amp;#233;gion Bretagne r&amp;#233;alis&amp;#233; pour le &#91;&#91;Wikip&amp;#233;dia:Projet, Blasons&#124;Projet, Blasons]] de Wikip&amp;#233;dia &#39;&#39;&#39;Source:&#39;&#39;&#39; Dessin&amp;#233;e par &#91;&#91;Utilisateur:Rinaldum&#124;&amp;#422;inaldum]] &#39;&#39;&#39;Licence:&#39;&#39;&#39; GPL, GFDL, Cr&amp;#233;ative C. &#91;&#91;fr:Image:Blason Bretagne.jpg]])</em></li> <li>19 apr 2004 20:01 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Karel-ii-miranda.jpg|Karel-ii-miranda.jpg]]" <em>(Portret van &#91;&#91;Karel II van Spanje&#124;Karel II]] (1685) door &#91;&#91;Juan Carre&amp;ntilde;o de Miranda]] (1614-1685))</em></li> <li>19 apr 2004 20:00 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Osman_III.jpg|Osman_III.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 19:57 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Costume_traditionnel_bretagne_couple_petit.jpg|Costume_traditionnel_bretagne_couple_petit.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Costume traditionnel de bretagne (couple) en petit format No d&#39;image 6&lt;br&gt; Titre Homme et femme. &#91;Cote :PYO40P]&lt;br&gt; Auteur Puyo, Constant (1857-1933)&lt;br&gt; Titre &#91; Bretagne vers 1900] / Constant Puyo, photogr.&lt;br&gt; Publication &#91;St Cyr] : &#91;Direction du patrimoine. Archives photographiques], &#91;1890-1910]&lt;br&gt; Description 21 photogr. pos. sur verre, 1 photogr. nég.sur verre. : n. et b. ; 13 x 18 cm et moins (épr.)&lt;br&gt; Licence GPL et GFDL&lt;br&gt; Notes Acq. : Archives photographiques (Médiathèque du Patrimoine) (c) Caisse nationale des Monuments historiques&lt;br&gt; Thème Ethnologie&lt;br&gt; Sujet(s) Costume -- France -- Bretagne (France) -- 1870-1914&lt;br&gt; Rites et cérémonies -- France -- Bretagne (France) -- 1870-1914&lt;br&gt; Vie rurale -- France -- Bretagne (France) -- 1870-1914&lt;br&gt; Recadré par &#91;&#91;Utilisateur:Rinaldum&#124;Rinaldum]] 11 jan 2004 à 19:02 (CET) Trouvé sur le site &#91;&#91;Gallica]] de la &#91;&#91;Bibliothèque nationale de France&#124;BNF]] &#91;&#91;fr:Image:Costume traditionnel bretagne couple petit.jpg]])</em></li> <li>19 apr 2004 19:51 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Mustafa_III.jpg|Mustafa_III.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 19:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Map_of_New_York_highlighting_Bronx_County.png|Map_of_New_York_highlighting_Bronx_County.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Public domain map courtesy of &#91;http&#58;//www.lib.utexas.edu/ The General Libraries, The University of Texas at Austin], modified to show counties. Released under GFDL. See &#91;&#91;Wikipedia:U.S. county map]]s. &#91;&#91;en:Image:Map of New York highlighting Bronx County.png]])</em></li> <li>19 apr 2004 19:46 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Lu_roundel_westminster.jpg|Lu_roundel_westminster.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The London Underground Roundel at Westminster tube station * Date: 29th October 2001 20:24 * Camera: Olympus C-1 * Exposure: 1/30 sec. * Focal Length: 4mm * Aperture: F/2.8 * ISO: 200 * Flash: On * Photograph: &#91;&#91;user:ed_g2s&#124;Ed Sanders]] &#91;&#91;en:Image:lu roundel westminster.jpg]])</em></li> <li>19 apr 2004 19:41 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Abdulhamid_I.jpg|Abdulhamid_I.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 19:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Breslau_um_1900.jpg|Breslau_um_1900.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Breslau um 1900 Quelle: http&#58;//hdl.loc.gov/loc.pnp/ppmsca.01058 Public Domain &#91;&#91;de:Bild:Breslau um 1900.jpg]])</em></li> <li>19 apr 2004 19:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Wroclaw_crest.jpg|Wroclaw_crest.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The crest of &#91;&#91;Wroclaw]] &#91;&#91;en:Image:Wroclaw crest.jpg]])</em></li> <li>19 apr 2004 19:30 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Selim_III.jpg|Selim_III.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 19:25 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Bouw_der_bacterie.png|Bouw_der_bacterie.png]]" <em>(Schematische weergave van een bacterie; dooe Michael Chlistalla; van Wikipedia.de; vertaald door mij &#123;&#123;msg:GFDL}})</em></li> <li>19 apr 2004 19:25 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Windermere.jpg|Windermere.jpg]]" <em>(van engelse pagina, Daar gebruit met toestemming van http&#58;//www.beautifulbritain.co.uk )</em></li> <li>19 apr 2004 19:25 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Walmartlogo.png|Walmartlogo.png]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 19:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bremen.rathaus.750pix.jpg|Bremen.rathaus.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Bremen Town Hall.&lt;br&gt; Taken by Adrian Pingstone in 1990 and released to the public domain. &#91;&#91;en:Image:bremen.rathaus.750pix.jpg]])</em></li> <li>19 apr 2004 19:19 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Karte_bremen_in_deutschland.png|Karte_bremen_in_deutschland.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Karte Bremen in Deutschland &#91;&#91;de:Bild:Karte bremen in deutschland.png]])</em></li> <li>19 apr 2004 19:18 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bremen_coa.jpg|Bremen_coa.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Bremen coat of arms &#91;&#91;en:Image:bremen coa.jpg]])</em></li> <li>19 apr 2004 19:10 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Ottoman_1683.png|Ottoman_1683.png]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 19:10 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Ottoman_Coat_of_Arms.jpg|Ottoman_Coat_of_Arms.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 19:09 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Bakeliet_Reactie.png|Bakeliet_Reactie.png]]" <em>(Bakeliet condensatie reactie; door MarkZi via ChemQuelle onder GFDL; vertaald vanaf Wikipedia DE door mij)</em></li> <li>19 apr 2004 19:08 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Knitting.jpg|Knitting.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;&#39;Description:&#39;&#39;&#39; Photo of knitted hat, yarn, and knitting needles &#39;&#39;&#39;Source:&#39;&#39;&#39; Photograph taken by Jared C. Benedict on 06 March 2004. &#39;&#39;&#39;Copyright:&#39;&#39;&#39; &amp;copy; Jared C. Benedict. Licensed under the &#91;&#91;GFDL]] by photographer Jared C. Benedict (myself). &#39;&#39;&#39;Other versions:&#39;&#39;&#39; &#91;&#91;Media:Knitting.jpg&#124;larger version]] (&#91;&#91;:Image:Knitting.jpg&#124;Info Page]]) &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:Knitting.jpg]])</em></li> <li>19 apr 2004 19:02 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Stamp-ctc-hiphop-breakdancing.jpg|Stamp-ctc-hiphop-breakdancing.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Celebrate the Century - 1980s - Breakdancing &amp; Hiphop &#91;&#91;en:Image:Stamp-ctc-hiphop-breakdancing.jpg]])</em></li> <li>19 apr 2004 18:59 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:A4_RIJSWIJK.JPG|A4_RIJSWIJK.JPG]]" <em>(Eerdere versie hersteld)</em></li> <li>19 apr 2004 18:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Brunswick_cathedral.JPG|Brunswick_cathedral.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Photo of Cathedral at Brunswick (Germany), with the Lion statue (taken Feb. 12, 2002 by &#91;&#91;User:Djmutex&#124;djmutex]]), herewith licensed under GFDL. &#91;&#91;en:Image:Brunswick cathedral.JPG]])</em></li> <li>19 apr 2004 18:56 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Burg_Dankwarderode.jpg|Burg_Dankwarderode.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: **Burg Dankwarderode im Zentrum Braunschweigs *Quelle: **Fotografiert am 20. Februar 2003 *Fotograf: **&#91;&#91;Benutzer:ArtMechanic&#124;ArtMechanic]] *Copyright Status: **&#91;&#91;GNU Freie Dokumentationslizenz]] &#91;&#91;de:Bild:Burg Dankwarderode.jpg]])</em></li> <li>19 apr 2004 18:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Karte_braunschweig_in_deutschland.png|Karte_braunschweig_in_deutschland.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Karte Braunschweig in Deutschland &#91;&#91;de:Bild:Karte braunschweig in deutschland.png]])</em></li> <li>19 apr 2004 18:53 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Filipsiii-velazaquez.jpg|Filipsiii-velazaquez.jpg]]" <em>(&#91;&#91;Filips III]] te paard door &#91;&#91;Diego Vel&amp;aacute;zquez]], ca. 1634/35. Museo del Prado, Madrid.)</em></li> <li>19 apr 2004 18:48 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bratislava_view.jpg|Bratislava_view.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Bratislava townscape &#91;&#91;en:Image:bratislava view.jpg]])</em></li> <li>19 apr 2004 18:48 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Brat_burg.jpg|Brat_burg.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Burg in Bratislava Autor: Denis Barthel GNU Freie Dokumentationslizenz &#91;&#91;de:Bild:brat burg.jpg]])</em></li> <li>19 apr 2004 18:43 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Brazil.Brasilia.01.jpg|Brazil.Brasilia.01.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &lt;center&gt;Brasilia Cathedral &lt;br&gt;Source: Victor Soares/ABr. 13/8/2003 &lt;/center&gt;&lt;small&gt;Photograph copied from the website of &#91;http&#58;//img.radiobras.gov.br/ Agência Brasil], which states: :The Agência Brasil makes images and photos available free of charge. To comply with existing law, we kindly request our users to list the credits as in the example: photographer&#39;s name/ABr. &amp;mdash; A Agência Brasil disponibiliza, gratuitamente, imagens e fotos. Para cumprir a legislação em vigor, solicitamos aos nossos usuários a gentileza de registrar os créditos como no exemplo: nome do fotógrafo/ABr. This photo appeared as 8253.jpg on 13/8/2003. The photo was downloaded, cropped, and resized by Hajor. &#123;&#123;msg:CopyrightedFreeUseProvided}} credit is given to ABr and the photographer.&#39;&#39; 8253.jpg. Brasília, 13/8/2003 (Agência Brasil - ABr) - Imagem da Esplanada dos Ministérios na primeira chuva em Brasília depois de 72 dias de seca (foto: Victor Soares - hor. 38) &#91;&#91;en:Image:Brazil.Brasilia.01.jpg]])</em></li> <li>19 apr 2004 18:36 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:BrandonLee.jpg|BrandonLee.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Brandon Lee, from cover of &#39;&#39;&#91;&#91;Brandon Lee (They Died Too Young)]]&#39;&#39; by &#91;&#91;Cindy Dyson]] &#91;&#91;en:Image:BrandonLee.jpg]])</em></li> <li>19 apr 2004 18:36 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:TV_turnoff_logo.gif|TV_turnoff_logo.gif]]" <em>(Ik vraag om toestemming)</em></li> <li>19 apr 2004 18:20 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Mahmud_II.jpg|Mahmud_II.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 18:12 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bourtange06.jpg|Bourtange06.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Karte der Festung Bourtange von 1742, copyright: &#91;&#91;Gemeinfreiheit]] &#91;&#91;de:Bild:bourtange06.jpg]])</em></li> <li>19 apr 2004 18:11 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bourtange04.jpg|Bourtange04.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Festung Bourtange, Blick von einer Bastion, von mir selbst in SW fotografiert, Copyright: &#91;&#91;GNU FDL]] &#91;&#91;de:Bild:bourtange04.jpg]])</em></li> <li>19 apr 2004 18:11 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bourtange03.jpg|Bourtange03.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Festung Bourtange, Detail einer der Bastionen, von mir selbst in SW fotografiert, Copyright: &#91;&#91;GNU FDL]] &#91;&#91;de:Bild:bourtange03.jpg]])</em></li> <li>19 apr 2004 18:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bourtange02.jpg|Bourtange02.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Festung Bourtange, Detail Münstersches Tor, von mir selbst in SW fotografiert, Copyright: &#91;&#91;GNU FDL]] &#91;&#91;de:Bild:bourtange02.jpg]])</em></li> <li>19 apr 2004 18:09 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bourtange01.jpg|Bourtange01.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Festung Bourtange, Zugbrücke und Münstersches Tor, von mir selbst in Farbe fotografiert, Copyright: &#91;&#91;GNU FDL]] &#91;&#91;de:Bild:bourtange01.jpg]])</em></li> <li>19 apr 2004 17:56 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Karte_bottrop_in_deutschland.png|Karte_bottrop_in_deutschland.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Karte Bottrop in Deutschland &#91;&#91;de:Bild:Karte bottrop in deutschland.png]])</em></li> <li>19 apr 2004 17:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:ButterMakingPalestine1914.jpg|ButterMakingPalestine1914.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: traditional butter making in the Paletine, from March 1914 &#91;&#91;National Geographic Magazine]] &#123;&#123;msg:PD-US}} &#91;&#91;en:Image:ButterMakingPalestine1914.jpg]])</em></li> <li>19 apr 2004 17:48 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Boston_Landsat.jpg|Boston_Landsat.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Boston LANDSAT &#91;&#91;en:Image:Boston Landsat.jpg]])</em></li> <li>19 apr 2004 17:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Boston20040307-03.jpg|Boston20040307-03.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: photo of Boston across the Charles River Basin by Brian Corr, March 7, 2004 &#91;&#91;en:Image:Boston20040307-03.jpg]])</em></li> <li>19 apr 2004 17:45 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Boston_Old_SH-200px.jpg|Boston_Old_SH-200px.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Photo of Old State House in Boston, taken September 1993 by Stan Shebs and licensed under GFDL, 200px across &#91;&#91;en:Image:Boston Old SH-200px.jpg]])</em></li> <li>19 apr 2004 17:40 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Sultan_abd-ul-aziz.jpg|Sultan_abd-ul-aziz.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 17:38 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Basic_bossa_nova_guitar_rhythm.PNG|Basic_bossa_nova_guitar_rhythm.PNG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Trimmed PNG version of User:Hyacinth&#39;s Image:Basic bossa-nova guitar rhythm.bmp &#91;&#91;en:Image:Basic bossa nova guitar rhythm.PNG]])</em></li> <li>19 apr 2004 17:33 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bose_Einstein_condensate.png|Bose_Einstein_condensate.png]]" <em>(Vanaf Engelse wikipedia, &#91;&#91;en:Bose_Einstein_condensate.png]])</em></li> <li>19 apr 2004 17:29 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Waldbrand.jpg|Waldbrand.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Waldbrand Quelle: http&#58;//www.accessnoaa.noaa.gov/sep0101/ public domain Photo by Todd Heitkamp, Riverton, Wyoming acting meteorologist-in-charge &#91;&#91;de:Bild:Waldbrand.jpg]])</em></li> <li>19 apr 2004 17:12 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:PCB.png|PCB.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Molécule de pyralène &#91;&#91;fr:Image:pyralene.png]])</em></li> <li>19 apr 2004 16:51 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Murad_V.jpg|Murad_V.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 16:19 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Sultan_abdul-hamid_II.jpg|Sultan_abdul-hamid_II.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 16:08 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:MehmedV.jpg|MehmedV.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 15:55 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:MehmedVI.jpg|MehmedVI.jpg]]" <em>(En: wikipedia)</em></li> <li>19 apr 2004 15:33 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Mustafa_IV.jpg|Mustafa_IV.jpg]]" <em>(en:wikipedia)</em></li> <li>19 apr 2004 15:32 [[Gebruiker:Conget|Conget]] heeft ge-upload: "[[:Afbeelding:Atoomb2.gif|Atoomb2.gif]]" <em>(Eigen gemaakt. Makelijke forumle voor Atoombom)</em></li> <li>19 apr 2004 15:22 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Eifel.png|Eifel.png]]" <em>(van de Duitse Wiki, eigen tekening van de uploader aldaar)</em></li> <li>19 apr 2004 13:41 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bord2jk.jpg|Bord2jk.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 apr 2004 13:36 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bord2jk.jpg|Bord2jk.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 apr 2004 13:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bord1jk.jpg|Bord1jk.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 apr 2004 11:15 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Capajk.jpg|Capajk.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>19 apr 2004 11:08 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Maxeuwe.jpg|Maxeuwe.jpg]]" <em>(toestemming Titkov (zie overleg))</em></li> <li>19 apr 2004 09:30 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Osdl_logo.png|Osdl_logo.png]]"</li> <li>19 apr 2004 09:19 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Minijk.jpg|Minijk.jpg]]" <em>(Fritz8 - print)</em></li> <li>19 apr 2004 08:16 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:EHS.jpg|EHS.jpg]]" <em>(Publiek domein zie: artikel 15b, auteurswet 1912)</em></li> <li>19 apr 2004 08:14 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Alsalogo.gif|Alsalogo.gif]]"</li> <li>18 apr 2004 23:10 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.png|Test.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-eo. De beschrijving daar was: nl wikipedia &#91;&#91;eo:Dosiero:idor2.png]])</em></li> <li>18 apr 2004 22:28 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Cumbria.png|Cumbria.png]]" <em>(van engelse pagina)</em></li> <li>18 apr 2004 22:00 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Surrey.png|Surrey.png]]" <em>(van engelse pagina)</em></li> <li>18 apr 2004 20:43 [[Gebruiker:Geus|Geus]] heeft ge-upload: "[[:Afbeelding:IJssel_Wijhe.jpg|IJssel_Wijhe.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>18 apr 2004 20:42 [[Gebruiker:Geus|Geus]] heeft ge-upload: "[[:Afbeelding:IJssel_Wijhe.jpg|IJssel_Wijhe.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>18 apr 2004 20:40 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Triceratops.jpg|Triceratops.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Triceratop, fotografiert von M. Zibelius, Museum, GNU FDL erteilt &#91;&#91;de:Bild:mus1.jpeg]])</em></li> <li>18 apr 2004 19:59 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Somerset.png|Somerset.png]]" <em>(van engelse pagina)</em></li> <li>18 apr 2004 19:52 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:LogoLinuxbase.png|LogoLinuxbase.png]]" <em>(Logo Linuxbase)</em></li> <li>18 apr 2004 19:48 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:7of9.jpg|7of9.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;Seven of Nine]] of &#91;&#91;Star Trek]] Fair use screenshot &#91;&#91;en:Image:7of9.jpg]])</em></li> <li>18 apr 2004 19:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Karte_Bophuthatswana_in_Suedafrika.png|Karte_Bophuthatswana_in_Suedafrika.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Lage von Bophuthatswana in Südafrika (aus en-Wikipedia) &#91;&#91;de:Bild:Karte Bophuthatswana in Suedafrika.png]])</em></li> <li>18 apr 2004 19:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Image:SouthAfricaBantustanBophuthatswana.png|Image:SouthAfricaBantustanBophuthatswana.png]]"</li> <li>18 apr 2004 19:40 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Image:SouthAfricaBantustanBophuthatswana.png|Image:SouthAfricaBantustanBophuthatswana.png]]" <em>(Vanaf Engelse wikipedia)</em></li> <li>18 apr 2004 19:35 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bootes_constellation_map_small.png|Bootes_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Bootes_constellation_map_small.png]])</em></li> <li>18 apr 2004 19:34 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Dorset.png|Dorset.png]]" <em>(van engelse pagina)</em></li> <li>18 apr 2004 19:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bodnik1.jpg|Bodnik1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Jagdbogenschütze mit Langbogen &#91;&#91;de:Bild:Bodnik1.jpg]])</em></li> <li>18 apr 2004 19:20 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bonner_Rathaus.jpg|Bonner_Rathaus.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Altes Bonner Rathaus &#91;&#91;de:Bild:Bonner Rathaus.jpg]])</em></li> <li>18 apr 2004 19:13 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bombardes.jpg|Bombardes.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &quot;Bombardes&quot; from Kevrenn an Arvorig &#91;&#91;en:Image:Bombardes.jpg]])</em></li> <li>18 apr 2004 19:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:1919-Trotsky_Lenin_Kamenev-Party-Congress.gif|1919-Trotsky_Lenin_Kamenev-Party-Congress.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: L to R: Trotsky, Lenin, Kamenev in 1919 &#91;&#91;en:Image:1919-Trotsky Lenin Kamenev-Party-Congress.gif]])</em></li> <li>18 apr 2004 19:09 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bolshevik-meeting.jpg|Bolshevik-meeting.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Bolshevik meeting. public domain. &#91;&#91;en:Image:Bolshevik-meeting.jpg]])</em></li> <li>18 apr 2004 19:04 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bologna_3.jpg|Bologna_3.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Typische Arkaden in Bologna Fotografiert von: &#91;&#91;Benutzer:Softeis&#124;Softeis]] 11:43, 27. Jun 2003 (CEST) im Juni 2003 &#91;&#91;de:Bild:bologna 3.jpg]])</em></li> <li>18 apr 2004 19:03 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bologna_2.jpg|Bologna_2.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Marktplatz von Bologna Fotografiert von: &#91;&#91;Benutzer:Softeis&#124;Softeis]] 11:42, 27. Jun 2003 (CEST) im Juni 2003 &#91;&#91;de:Bild:bologna 2.jpg]])</em></li> <li>18 apr 2004 19:02 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bologna_1.jpg|Bologna_1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Bologna: einer der schiefen Türme Fotografiert von: &#91;&#91;Benutzer:Softeis&#124;Softeis]] 11:42, 27. Jun 2003 (CEST), Juni 2003 &#91;&#91;de:Bild:bologna 1.jpg]])</em></li> <li>18 apr 2004 18:56 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Armedforces_boxing.jpg|Armedforces_boxing.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Armed Forces members boxing at the 2004 Armed Forces Boxing Championships, Picture from: http&#58;//www-p.afsv.af.mil/AFSports/Sports/Boxing.htm License: Information presented on Air Force Services Agency Website is considered public information and may be distributed or copied. Use of appropriate byline/photo/image credits is requested. - http&#58;//www.afsv.af.mil/ &#91;&#91;en:Image:Armedforces boxing.jpg]])</em></li> <li>18 apr 2004 18:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bogota_co.jpg|Bogota_co.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Bogota, Colombia from Monserrate Chris Ashton September 6, 2003 &#91;&#91;en:Image: Bogota co.jpg]])</em></li> <li>18 apr 2004 18:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Karte_Bukowina.jpg|Karte_Bukowina.jpg]]" <em>(Vanaf duitse wikipedia)</em></li> <li>18 apr 2004 18:31 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Mayflower2.jpg|Mayflower2.jpg]]" <em>(van engelse pagina)</em></li> <li>18 apr 2004 18:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bucuresti.jpg|Bucuresti.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-ro. De beschrijving daar was: Bucure&amp;#351;ti &#91;&#91;ro:Imagine:Bucuresti.jpg]])</em></li> <li>18 apr 2004 18:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bucuresti-localization.png|Bucuresti-localization.png]]" <em>(Ligging van Boekarest, vanaf Engelse wikipedia &#91;&#91;en:Image:Bucuresti-localization.png]])</em></li> <li>18 apr 2004 18:29 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bucuresti-stema.png|Bucuresti-stema.png]]" <em>(Wapen Boekarest, vanaf engelse wikipedia &#91;&#91;en:Image:Bucuresti-stema.png]])</em></li> <li>18 apr 2004 18:26 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Singapore.b747.london.750pix.jpg|Singapore.b747.london.750pix.jpg]]" <em>(Boeing 747, vanaf Engelse wikipedia, Singapore Airlines Boeing 747-412 (9V-SPM), on the approach to London (Heathrow) Airport (UK). &#91;&#91;en:Image:Singapore.b747.london.750pix.jpg]])</em></li> <li>18 apr 2004 18:22 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Singapore.b747.london.750pix.jpg|Singapore.b747.london.750pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Singapore Airlines Boeing 747-412 (9V-SPM), on the approach to London (Heathrow) Airport (UK).&lt;br&gt; Photographed by Adrian Pingstone in September 2003 and released to the public domain. &#91;&#91;en:Image: singapore.b747.london.750pix.jpg]])</em></li> <li>18 apr 2004 18:18 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ba.b737-436.g-docp.800pix.jpg|Ba.b737-436.g-docp.800pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A Boeing 737-400 of British Airways (G-DOCP) on the approach to London (Heathrow) Airport.&lt;br&gt; This picture is 800 pixels wide.&lt;br&gt; Photographed by Adrian Pingstone (myself) in August 2002 and released to the public domain. &#123;&#123;msg:PD}} &#91;&#91;en:Image:ba.b737-436.g-docp.800pix.jpg]])</em></li> <li>18 apr 2004 18:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Buddha_lantau.jpg|Buddha_lantau.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Buddha on Lantau Island &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:Buddha lantau.jpg]])</em></li> <li>18 apr 2004 18:05 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:BobbyFischer.jpg|BobbyFischer.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#123;&#123;msg:unverified}} &#91;&#91;en:Image:BobbyFischer.jpg]])</em></li> <li>18 apr 2004 17:53 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Hazelnoot_struik.jpg|Hazelnoot_struik.jpg]]" <em>(zelfgemaakte foto van hazelnoot (Corylus spp.) struik)</em></li> <li>18 apr 2004 17:47 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Flor.png|Flor.png]]" <em>(Doorsnede bloem, vanaf eo wikipedia, Mi prenis la bildon el la reta vortaro. GNU-libera. upload op en door (for) (nun) 09:20, 24. Mar 2004 . . Razilklingo (39884 bitokoj) )</em></li> <li>18 apr 2004 17:40 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Violeta.jpg|Violeta.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-es. De beschrijving daar was: Copiado de fr.wikipedia &#91;&#91;es:Imagen:Violeta.jpg]])</em></li> <li>18 apr 2004 17:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Arteriessystem.png|Arteriessystem.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: The syetm or arteries, from Nordisk familjebok. Image in public domain. &#91;&#91;en:Image:Arteriessystem.png]])</em></li> <li>18 apr 2004 15:46 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Arundel.jpg|Arundel.jpg]]" <em>(eigen foto)</em></li> <li>18 apr 2004 15:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bjork.jjm.jpg|Bjork.jjm.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;&#39;Source&#39;&#39;&#39;: Taken from the &#91;http&#58;//unit.bjork.com/specials/pics/frame.htm Bjork.com photo gallery] &#39;&#39;This image is copyrighted. Its use is contended to be &#91;&#91;fair use]] under &#91;&#91;United States]] law. See: &#91;&#91;Wikipedia:Copyrights&#124;Copyrights]]&#39;&#39;. &#61;= Fair use for &#91;&#91;bjork.jjm.jpg]] == The image bjork.jjm.jpg is being linked here; though the picture is originally copyright I (swidly) feel it is covered by fair use because: 1) It is located in a picture gallery section of the website, which usually implies it is available for public download and use. 2) The picture is not being used for commercial purposes. &#39;&#39;&#39;Description&#39;&#39;&#39;: A picture of Icelandic musical artist Bjork &#91;&#91;en:Image:bjork.jjm.jpg]])</em></li> <li>18 apr 2004 15:19 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Newforest.jpg|Newforest.jpg]]" <em>(eigen foto)</em></li> <li>18 apr 2004 15:06 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:EGKSvlag.png|EGKSvlag.png]]" <em>(van duitse pagina)</em></li> <li>18 apr 2004 14:29 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Torquay2.jpg|Torquay2.jpg]]" <em>(torquay, eigen foto)</em></li> <li>18 apr 2004 14:29 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Torquay1.jpg|Torquay1.jpg]]" <em>(torquay, eigen foto)</em></li> <li>18 apr 2004 13:48 [[Gebruiker:Henricus|Henricus]] heeft ge-upload: "[[:Afbeelding:Lower_saxony_aur.png|Lower_saxony_aur.png]]" <em>(Kaart van Aurich (uit en: wiki - &#91;http&#58;//en.wikipedia.org/wiki/Wikipedia:WikiProject_German_districts/Maptemplates bron]))</em></li> <li>18 apr 2004 12:48 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Oppo2jk.jpg|Oppo2jk.jpg]]" <em>(Fritz8 - print)</em></li> <li>18 apr 2004 12:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Oppo1jk.jpg|Oppo1jk.jpg]]" <em>(Fritz8 - print)</em></li> <li>18 apr 2004 10:57 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Kerf4.jpg|Kerf4.jpg]]" <em>(Eigen foto)</em></li> <li>18 apr 2004 10:55 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Kerf3.jpg|Kerf3.jpg]]" <em>(Eigen foto)</em></li> <li>18 apr 2004 10:54 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Kerf2.jpg|Kerf2.jpg]]" <em>(Eigen foto)</em></li> <li>18 apr 2004 10:52 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Kerf1.jpg|Kerf1.jpg]]" <em>(Eigen foto)</em></li> <li>18 apr 2004 09:59 [[Gebruiker:Moose1960|Moose1960]] heeft ge-upload: "[[:Afbeelding:Papageno1.jpg|Papageno1.jpg]]"</li> <li>18 apr 2004 09:59 [[Gebruiker:Moose1960|Moose1960]] heeft ge-upload: "[[:Afbeelding:Papageno.jpg|Papageno.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>18 apr 2004 09:55 [[Gebruiker:Moose1960|Moose1960]] heeft ge-upload: "[[:Afbeelding:Papageno.jpg|Papageno.jpg]]" <em>(Emanuel Schikaneder als eerste Papageno)</em></li> <li>18 apr 2004 09:48 [[Gebruiker:Moose1960|Moose1960]] heeft ge-upload: "[[:Afbeelding:Papageno.jpg|Papageno.jpg]]" <em>(Emanuel Schikaneder als eerste Papageno)</em></li> <li>18 apr 2004 09:15 [[Gebruiker:Waerth|Waerth]] heeft ge-upload: "[[:Afbeelding:CambodiaPhnomPenh.png|CambodiaPhnomPenh.png]]" <em>(kaart van en wikipedia)</em></li> <li>18 apr 2004 09:07 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Abdijkapel.jpg|Abdijkapel.jpg]]" <em>(abdijkapel - eigen foto)</em></li> <li>18 apr 2004 08:34 [[Gebruiker:Moribunt|Moribunt]] heeft ge-upload: "[[:Afbeelding:Rantisi.jpg|Rantisi.jpg]]" <em>(Van de Arabische Wikipedia)</em></li> <li>17 apr 2004 22:45 [[Gebruiker:Puckly|Puckly]] heeft ge-upload: "[[:Afbeelding:De_vrouw_uit_1001_nacht.jpg|De_vrouw_uit_1001_nacht.jpg]]" <em>(Boekcover van De vrouw uit 1001 nacht)</em></li> <li>17 apr 2004 22:44 [[Gebruiker:Puckly|Puckly]] heeft ge-upload: "[[:Afbeelding:1001nacht.gif|1001nacht.gif]]" <em>(Boekcover van verhalen uit 1001 nacht)</em></li> <li>17 apr 2004 22:13 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Eigernoord.jpg|Eigernoord.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Ein Zug der &#91;&#91;Jungfraubahn]] am Fuße der &#91;&#91;Eiger]]nordwand. ---- &#39;&#39;Dieses Foto wurde von &#91;&#91;Benutzer:LosHawlos&#124;Martin Hawlisch]] fotografiert und unter der &#91;&#91;GFDL]] veröffentlicht.&#39;&#39; ---- &#91;&#91;de:Bild:Mh eigernordwand winter.jpeg]] &#123;&#123;msg:GFDL}})</em></li> <li>17 apr 2004 21:56 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Alcatraz.jpg|Alcatraz.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: This image of &#91;&#91;Alcatraz Island]] comes from the &#91;http&#58;//GIMP-savvy.com/cgi-bin/img.cgi?noaauH1zY36LdMg2344 GIMP photo archive] &#91;&#91;en:Image:Alcatraz.jpg]] Originele bron: US National Oceanic and Atmospheric Administration.&lt;p&gt;&#123;&#123;msg:PD}})</em></li> <li>17 apr 2004 21:21 [[Gebruiker:Geus|Geus]] heeft ge-upload: "[[:Afbeelding:Berkel.jpg|Berkel.jpg]]" <em>(Berkel bij Eibergen, foto Cees Kuppens, 16-04-04 vrijgegeven voor public domain)</em></li> <li>17 apr 2004 20:23 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Laddermolen_Octrooi.png|Laddermolen_Octrooi.png]]" <em>(Schamatische weergave van de laddermolen; uit eht octrooi op die uitvinding; Bron: Esp@cenet)</em></li> <li>17 apr 2004 20:02 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:WildeHyacint-plant-kl.jpg|WildeHyacint-plant-kl.jpg]]" <em>(omgebogen top van de as van de bloemtros en daarnaast de roomwitte helmknoppen in de bloemen)</em></li> <li>17 apr 2004 20:01 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:WildeHyacint-plant-hr.jpg|WildeHyacint-plant-hr.jpg]]" <em>(eigen foto, 2e paasdag, scheveningse duinen)</em></li> <li>17 apr 2004 19:59 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:WildeHyacint-overz-kl.jpg|WildeHyacint-overz-kl.jpg]]" <em>(eigen foto, 2e paasdag, scheveningse duinen)</em></li> <li>17 apr 2004 19:58 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:WildeHyacint-overz-hr.jpg|WildeHyacint-overz-hr.jpg]]" <em>(eigen foto, 2e paasdag, scheveningse duinen)</em></li> <li>17 apr 2004 19:51 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:WildeHyacint-CloseUp-kl.jpg|WildeHyacint-CloseUp-kl.jpg]]" <em>(eigen foto, 2e paasdag, scheveningse duinen)</em></li> <li>17 apr 2004 19:51 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:WildeHyacint-CloseUp-hr.jpg|WildeHyacint-CloseUp-hr.jpg]]" <em>(eigen foto, 2e paasdag, scheveningse duinen)</em></li> <li>17 apr 2004 19:10 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Boccaccio.jpg|Boccaccio.jpg]]" <em>(van italiaanse pagina: http&#58;//www.news.harvard.edu/gazette/2001/05.03/photos/03-hankins2-200.jpg)</em></li> <li>17 apr 2004 18:58 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Riemanngrap.png|Riemanngrap.png]]" <em>(De Riemanngrap; zelf gemaakt)</em></li> <li>17 apr 2004 18:57 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Riemannsom.png|Riemannsom.png]]" <em>(Een Riemannsom; zelf gemaakt)</em></li> <li>17 apr 2004 18:18 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Duin1.JPG|Duin1.JPG]]" <em>(eigen foto)</em></li> <li>17 apr 2004 18:16 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Duin3.JPG|Duin3.JPG]]" <em>(eigen foto)</em></li> <li>17 apr 2004 18:10 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Duin4.JPG|Duin4.JPG]]" <em>(Eigen foto)</em></li> <li>17 apr 2004 18:06 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Duin2.JPG|Duin2.JPG]]" <em>(Eigen foto)</em></li> <li>17 apr 2004 17:50 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:NASA_NorthSea1.jpg|NASA_NorthSea1.jpg]]" <em>(&#91;&#91;de:Bild:NASA NorthSea1.jpg]] Nordsee, NASA-Aufnahme Public Domain. Saharasand über die Nordsee. Die roten Punkte markieren Feuer. Von: http&#58;//visibleearth.nasa.gov/cgi-bin/viewrecord?25413 Bilder sind Public Domain, ausser beim Bild stated otherwise (ist es nicht) )</em></li> <li>17 apr 2004 17:42 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Noordzee.JPG|Noordzee.JPG]]" <em>(eigen foto)</em></li> <li>17 apr 2004 16:34 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Stalingrad.jpg|Stalingrad.jpg]]" <em>(&#91;&#91;en:Image:Stalingrad.jpg]] Soliders at Stalingrad from http&#58;//www-cgsc.army.mil/milrev/portuguese/2ndQtr01/hahn.asp License: Information presented on the CGSC web site is considered public information and may be distributed or copied. Use of appropriate byline/photo/image credits is requested. - http&#58;//www-cgsc.army.mil/notice.asp This image has been released into the public domain by the author, or its copyright has expired. This applies worldwide. See Copyright. )</em></li> <li>17 apr 2004 15:42 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Italy_Regions_Latium_220px.png|Italy_Regions_Latium_220px.png]]" <em>(Latium (van Engelse Wiki))</em></li> <li>17 apr 2004 15:41 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Flagge_Latiums.png|Flagge_Latiums.png]]" <em>(Vlag van Latium (van Duitse Wiki))</em></li> <li>17 apr 2004 14:39 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Billy_the_Kid.jpg|Billy_the_Kid.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Public domain photo &#91;&#91;en:Image:Billy the Kid.jpg]])</em></li> <li>17 apr 2004 14:22 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:RichardFrancisBurton.jpeg|RichardFrancisBurton.jpeg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Richard Francis Burton, portrait by Frederic Leighton (1830-1896), National Portrait Gallery, London &#91;&#91;en:Image:RichardFrancisBurton.jpeg]])</em></li> <li>17 apr 2004 14:18 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Billmonroe.jpg|Billmonroe.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Bill Monroe &#91;&#91;de:Bild:billmonroe.jpg]])</em></li> <li>17 apr 2004 14:15 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Meidoorn_Den_Haag_april_2004.jpg|Meidoorn_Den_Haag_april_2004.jpg]]" <em>(Meidoornboom, eigen foto, ter beschikking gesteld onder GUN/FDL )</em></li> <li>17 apr 2004 14:09 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Magnolia,_Alphen_aan_den_Rijn,_april_2004.jpg|Magnolia,_Alphen_aan_den_Rijn,_april_2004.jpg]]" <em>(Magnoliaboom, eigen foto, ter beschikking gesteld onder GNU/FDL licentie)</em></li> <li>17 apr 2004 14:00 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Human_eyesight_two_children_and_ball_with_myopia_short-sightedness.png|Human_eyesight_two_children_and_ball_with_myopia_short-sightedness.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: human eyesight two children and ball with myopia short-sightedness Copyright: public domain, US gov. Source: &#91;http&#58;//www.nei.nih.gov/photo/sims/index.asp] Credit of &#91;&#91;National Institutes of Health&#124;NIH]] &#91;&#91;National Eye Institute]] requested. Part of a set of eye pictures: *&#91;&#91;:Image:Human eyesight two children and ball normal vision.jpg]] *&#91;&#91;:Image:Human eyesight two children and ball with age-related macular degeneration.jpg]] *&#91;&#91;:Image:Human eyesight two children and ball with cataract.jpg]] *&#91;&#91;:Image:Human eyesight two children and ball with diabetic retinopathy.jpg]] *&#91;&#91;:Image:Human eyesight two children and ball with glaucoma.jpg]] *&#91;&#91;:Image:Human_eyesight two_children and ball with retinitis pigmentosa or tunnel vision.png]] *&#91;&#91;:Image:Human eyesight two children and ball with myopia short-sightedness.png]] &#91;http&#58;//www.nei.nih.gov/photo/index.asp Other NEI NIH images] &#91;&#91;en:Image:Human eyesight two children and ball with myopia short-sightedness.png]])</em></li> <li>17 apr 2004 13:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Human_eyesight_two_children_and_ball_normal_vision.jpg|Human_eyesight_two_children_and_ball_normal_vision.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: human eyesight two children and ball normal vision Copyright: public domain, US gov.&#91;http&#58;//www.nei.nih.gov/nehep/what.htm] Credit of &#91;&#91;National Institutes of Health&#124;NIH]] &#91;&#91;National Eye Institute]] requested. Part of a set of eye pictures: *&#91;&#91;:Image:Human eyesight two children and ball normal vision.jpg]] *&#91;&#91;:Image:Human eyesight two children and ball with age-related macular degeneration.jpg]] *&#91;&#91;:Image:Human eyesight two children and ball with cataract.jpg]] *&#91;&#91;:Image:Human eyesight two children and ball with diabetic retinopathy.jpg]] *&#91;&#91;:Image:Human eyesight two children and ball with glaucoma.jpg]] &#91;http&#58;//www.nei.nih.gov/photo/index.asp Other NEI NIH images] &#91;&#91;en:Image:Human eyesight two children and ball normal vision.jpg]])</em></li> <li>17 apr 2004 13:21 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:AndreKuipers.jpg|AndreKuipers.jpg]]" <em>(Foto André Kuipers. Afkomstig van NASA.)</em></li> <li>17 apr 2004 13:18 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Piemont_in_Italien.png|Piemont_in_Italien.png]]" <em>(Kaart van Piëmont (van Duitse Wiki))</em></li> <li>17 apr 2004 13:13 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Flagge_Piemonts.png|Flagge_Piemonts.png]]" <em>(Vlag van Piëmont (van Duitse Wiki))</em></li> <li>17 apr 2004 12:18 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Ulvejk.jpg|Ulvejk.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 apr 2004 12:09 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Traxjk.jpg|Traxjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 apr 2004 12:03 [[Gebruiker:Wamzuurstra|Wamzuurstra]] heeft ge-upload: "[[:Afbeelding:Kippenopschouders.jpg|Kippenopschouders.jpg]]"</li> <li>17 apr 2004 11:59 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Langejk.jpg|Langejk.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 apr 2004 11:56 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bernadette.gif|Bernadette.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Saint Bernadette &#91;&#91;en:Image:bernadette.gif]])</em></li> <li>17 apr 2004 11:53 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Fuhrerjk.jpg|Fuhrerjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 apr 2004 11:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Siekiera_kamienna_z_otworem_1.jpg|Siekiera_kamienna_z_otworem_1.jpg]]" <em>(Give a description for the image:vanaf Poolse wikipedia prehistorische bijl)</em></li> <li>17 apr 2004 11:47 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Feuersteinaxt.jpg|Feuersteinaxt.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: *Beschreibung: Aus Feuerstein hergestellte steinzeitliche Axt. Die Länge der Axt beträgt 31 cm, an der Schneide ist die Axt ca. 8 cm breit. *Quelle: Selbst fotografiert *Fotograf oder Zeichner: Dr. Henning Krämer, Geesthacht *Andere Versionen: *Lizenzstatus: GNU FDL &#91;&#91;de:Bild:Feuersteinaxt.jpg]])</em></li> <li>17 apr 2004 11:47 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Axe_of_iron_from_Swedish_Iron_Age,_found_at_Gotland,_Sweden.jpg|Axe_of_iron_from_Swedish_Iron_Age,_found_at_Gotland,_Sweden.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: PD image, from Swedish Wikipedia &#91;&#91;en:Image:Axe of iron from Swedish Iron Age, found at Gotland, Sweden.jpg]])</em></li> <li>17 apr 2004 11:46 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Rubinjk.jpg|Rubinjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 apr 2004 11:39 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Letjk.jpg|Letjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 apr 2004 11:35 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>17 apr 2004 11:33 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Canaljk.jpg|Canaljk.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 apr 2004 11:30 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Bernadette.gif|Bernadette.gif]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Saint Bernadette &#91;&#91;en:Image:bernadette.gif]])</em></li> <li>17 apr 2004 11:28 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Noordsjk.jpg|Noordsjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 apr 2004 11:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lenkdrachen_in_Tunesien.jpg|Lenkdrachen_in_Tunesien.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Beschreibung: Lenkdrachen in der tunesischen Sahara. Fotografiert und gesteuert von Katharina Bleuer (was gar nicht so einfach ist :-) im Dezember 2001. Bild darf selbstverständlich weiterverwendet werden, wenn die Autorin genannt wird. &#91;&#91;de:Bild:Lenkdrachen in Tunesien.jpg]])</em></li> <li>17 apr 2004 11:05 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Beso-hieroglifa_nomo.png|Beso-hieroglifa_nomo.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-eo. De beschrijving daar was: hieroglifa nomo de dio Beso &#91;&#91;eo:Dosiero:Beso-hieroglifa nomo.png]])</em></li> <li>17 apr 2004 11:04 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bes_(Egyptian_Mythology).jpg|Bes_(Egyptian_Mythology).jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Egyptian god Bes, Dendera, Egypt. Photo taken by Hajor, December 2002.&lt;br&gt;&#123;&#123;msg:GFDL}} &#91;&#91;en:Image:Bes (Egyptian Mythology).jpg]])</em></li> <li>17 apr 2004 10:56 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bernhard_riemann.jpg|Bernhard_riemann.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Bernhard Riemann *licence : domaine public *source : http&#58;//www.ifs.csic.es/pres.htm &#91;&#91;fr:Image:bernhard riemann.jpg]])</em></li> <li>17 apr 2004 10:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bernard_Law_Montgomery.jpg|Bernard_Law_Montgomery.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was: Bernard Law Montgomery Source: http&#58;//www.maxwell.af.mil/au/afhra/wwwroot/photo_galleries/merhar/Photos/01097635_017.jpg License: &#39;&#39;Information presented on the Maxwell Web Site is considered public information and may be distributed or copied. Use of appropriate byline/photo/image credits is requested.&#39;&#39; http&#58;//www.maxwell.af.mil/privacy.htm &#91;&#91;fr:Image:Bernard Law Montgomery.jpg]])</em></li> <li>17 apr 2004 10:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Berlin-wall3.jpg|Berlin-wall3.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-it. De beschrijving daar was: Il Muro di Berlino &#91;&#91;it:Immagine:berlin-wall3.jpg]])</em></li> <li>17 apr 2004 10:30 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Middenjk.jpg|Middenjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 apr 2004 10:27 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Conrad_Schumann.jpg|Conrad_Schumann.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: East German border guard, Conrad Schumann leaps to freedom over barbed wire in Berlin on 15 August, 1961; picture in the public domain. Photo by Peter Leibing &#91;&#91;en:Image:Conrad Schumann.jpg]])</em></li> <li>17 apr 2004 10:24 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bethanien06.jpg|Bethanien06.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Public Domain &#91;&#91;de:Bild:bethanien06.jpg]])</em></li> <li>17 apr 2004 10:22 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Lancjk.jpg|Lancjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>17 apr 2004 09:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Pope_Innocent_XI.jpg|Pope_Innocent_XI.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: In the &#91;&#91;public domain]] by age &#123;&#123;msg:PD}} &#91;&#91;en:Image:Pope Innocent XI.jpg]])</em></li> <li>17 apr 2004 09:36 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ben_Affleck.jpg|Ben_Affleck.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#39;&#39;&#39;Caption&#39;&#39;&#39;: 031222-N-7408M-001 Bahrain (Dec. 22, 2003) -- Aboard USS Enterprise (CVN 65) Academy Award winning actor Ben Affleck addresses the crew on the flight deck in front of the ship’s island while kicking off a United Service Organization (USO) sponsored tour of the Arabian Gulf. He is visiting deployed service members throughout the Gulf region. U.S. Navy photo by Photographer&#39;s Mate Airman Justin N. McGarry. (Released) &#39;&#39;&#39;Source&#39;&#39;&#39;: &#91;http&#58;//www.news.navy.mil/view_single.asp?id=11126 navy.mil] &#123;&#123;msg:PD}} &#91;&#91;en:Image:Ben Affleck.jpg]])</em></li> <li>17 apr 2004 09:26 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Delphi_small.jpg|Delphi_small.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Thumbnail version, by mdoege@compuserve.com on 2003-05-19 &#91;&#91;en:Image:Delphi small.jpg]])</em></li> <li>17 apr 2004 09:18 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bhsunnythu.jpg|Bhsunnythu.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: pic of Belo Horizonte, Dec 11, sunny &#91;&#91;en:Image:Bhsunnythu.jpg]])</em></li> <li>17 apr 2004 09:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:BelleStarr.jpeg|BelleStarr.jpeg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Belle Starr (19th century photograph) &#91;&#91;en:Image:BelleStarr.jpeg]])</em></li> <li>17 apr 2004 08:52 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Blockfloeten.jpg|Blockfloeten.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Verschiedene &#39;&#39;&#39;Blockflöten&#39;&#39;&#39;. Von oben nach unten: *Tenor in c&#39;, Birnbaumholz *Alt in f&#39;, Maracaibo-Buchs *Sopran in c&quot;, Palisander (zerlegt) *Sopranino in f&quot;, Palisander Fotografiert von &#91;&#91;Benutzer:Mussklprozz&#124;Mussklprozz]] am 2004-04-16. GNU-FDL &#91;&#91;de:Bild:Blockfloeten.jpg]])</em></li> <li>17 apr 2004 08:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Chisel.jpeg|Chisel.jpeg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Image of a steel woodworking chisel.&#123;&#123;msg:GFDL}} &#91;&#91;en:Image:Chisel.jpeg]])</em></li> <li>17 apr 2004 08:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Forbidden_City_of_China.jpg|Forbidden_City_of_China.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Image from http&#58;//www.ibiblio.org/chinese-music/html/images/GuGong.jpg &#91;&#91;en:Image:Forbidden City of China.jpg]])</em></li> <li>17 apr 2004 08:40 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:China_Beijing.png|China_Beijing.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Map of Beijing &#91;&#91;en:Image:China Beijing.png]])</em></li> <li>17 apr 2004 08:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Graves-at-Green-Wood.jpg|Graves-at-Green-Wood.jpg]]" <em>(Vanaf Engelse wikipedia, &#91;&#91;en:Graves-at-Green-Wood.jpg]])</em></li> <li>17 apr 2004 08:31 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Image:Graves-at-Green-Wood.jpg|Image:Graves-at-Green-Wood.jpg]]" <em>(Vanaf Engelse wikipedia &#91;&#91;en:Image:Graves-at-Green-Wood.jpg]])</em></li> <li>17 apr 2004 08:29 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Graves.jpg|Graves.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: A scenic cemetery in rural Spain showing marble headstones Copyright (c) 1996 Steven J. Dunlop, Nerstrand, MN; released under GFDL; all other rights reserved. &#91;&#91;en:Image:graves.jpg]])</em></li> <li>17 apr 2004 08:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Posag_zeusa.jpg|Posag_zeusa.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-pl. De beschrijving daar was: z ksi&amp;#261;&amp;#380;ki z 1912 r &#91;&#91;pl:Grafika:posag zeusa.jpg]])</em></li> <li>17 apr 2004 08:13 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Beck.lmb1.jpg|Beck.lmb1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Beck Hansen, courtesy Spanish Wikipedia &#91;&#91;en:Image:Beck.lmb1.jpg]])</em></li> <li>17 apr 2004 08:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Jk_beatles_ringo.jpg|Jk_beatles_ringo.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: John Kelley photo of &#91;&#91;Ringo Starr]] from the &#91;&#91;The Beatles]]&#39; &#91;&#91;The Beatles (album)&#124;white album]]. Apparently not copyrighted, since the law in 1968 required specific notice, and no such notice is present on the album. &#91;&#91;en:Image:jk beatles ringo.jpg]])</em></li> <li>17 apr 2004 08:05 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Jk_beatles_george.jpg|Jk_beatles_george.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: John Kelley photo of &#91;&#91;George Harrison]] from the &#91;&#91;The Beatles]]&#39; &#91;&#91;The Beatles (album)&#124;white album]]. Apparently not copyrighted, since the law in 1968 required specific notice, and no such notice is present on the album. &#91;&#91;en:Image:jk beatles george.jpg]])</em></li> <li>17 apr 2004 08:02 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Jk_beatles_paul.jpg|Jk_beatles_paul.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: John Kelley photo of &#91;&#91;Paul McCartney]] from the &#91;&#91;The Beatles]]&#39; &#91;&#91;The Beatles (album)&#124;white album]]. Apparently not copyrighted, since the law in 1968 required specific notice, and no such notice is present on the album. &#91;&#91;en:Image:jk beatles paul.jpg]] Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: John Kelley photo of &#91;&#91;Paul McCartney]] from the &#91;&#91;The Beatles]]&#39; &#91;&#91;The Beatles (album)&#124;white album]]. Apparently not copyrighted, since the law in 1968 required specific notice, and no such notice is present on the album. &#91;&#91;en:Image:jk beatles paul.jpg]])</em></li> <li>17 apr 2004 06:03 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladstandscharnier_rechtop.jpg|Bladstandscharnier_rechtop.jpg]]" <em>(zelfgemaakte foto; blad rechtop door werking bladscharnier bij boon)</em></li> <li>17 apr 2004 06:00 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladscharnier_boon.jpg|Bladscharnier_boon.jpg]]" <em>(zelfgemaakte foto; bladscharnier bij boon)</em></li> <li>17 apr 2004 05:57 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladscharnier_slapend_boon.jpg|Bladscharnier_slapend_boon.jpg]]" <em>(zelfgemaakte foto;werking bladscharnier bij boon)</em></li> <li>17 apr 2004 00:21 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: PD photo Basil plant &#91;&#91;en:Image:Basil 1511.jpg]])</em></li> <li>16 apr 2004 23:29 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Thomasbayes.jpg|Thomasbayes.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: PD image of Rev. Thomas Bayes &#91;&#91;en:Image:thomasbayes.jpg]])</em></li> <li>16 apr 2004 23:24 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Batterien.JPG|Batterien.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was: Photo einiger Batterien, &#91;&#91;GFDL]] aufgenommen von &#91;&#91;Benutzer:Honina&#124;Honina]] 18:08, 9. Okt 2003 (CEST) &#91;&#91;de:Bild:Batterien.JPG]])</em></li> <li>16 apr 2004 23:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:BatonRougeOldCapitalCastle.jpg|BatonRougeOldCapitalCastle.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:Baton Rouge, Louisiana: The old State Capital Castle, from early 20th century postcard&#123;&#123;msg:PD-US}} &#91;&#91;en:Image:BatonRougeOldCapitalCastle.jpg]])</em></li> <li>16 apr 2004 23:13 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Justice_league_batman.jpg|Justice_league_batman.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:Justice League&#39;s Batman, fair use &#91;&#91;en:Image:Justice league batman.jpg]])</em></li> <li>16 apr 2004 23:09 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Batik.jpg|Batik.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:Conversion from bmp to jpg (original version uploaded by Markewilliams). See &#91;&#91;:Image:Batik.bmp]]&#91;&#91;en:Image:Batik.jpg]])</em></li> <li>16 apr 2004 22:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lucrezia_Borgia.jpg|Lucrezia_Borgia.jpg]]" <em>(Vanaf Engelse wikipedia, schilderij door &#91;&#91;Bartolomeo Veneziano]]. &#91;&#91;en:Lucrezia Borgia.jpg]])</em></li> <li>16 apr 2004 19:24 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Peer-bloesem-kl.JPG|Peer-bloesem-kl.JPG]]" <em>(zelfgemaakte foto, eigen tuin)</em></li> <li>16 apr 2004 18:49 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Akkerhoornbloem-CloseUp-kl.jpg|Akkerhoornbloem-CloseUp-kl.jpg]]" <em>(eigen foto 2e paasdag scheveningse duinen)</em></li> <li>16 apr 2004 18:48 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Akkerhoornbloem-overz-hr.jpg|Akkerhoornbloem-overz-hr.jpg]]" <em>(eigen foto 2e paasdag scheveningse duinen)</em></li> <li>16 apr 2004 18:46 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Akkerhoornbloem-overz-kl.jpg|Akkerhoornbloem-overz-kl.jpg]]" <em>(eigen foto 2e paasdag scheveningse duinen)</em></li> <li>16 apr 2004 18:45 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Akkerhoornbloem-CloseUp-hr.jpg|Akkerhoornbloem-CloseUp-hr.jpg]]" <em>(eigen foto 2e paasdag scheveningse duinen)</em></li> <li>16 apr 2004 18:44 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Akkerhoornbloem-bloem-hr.jpg|Akkerhoornbloem-bloem-hr.jpg]]" <em>(eigen foto 2e paasdag scheveningse duinen)</em></li> <li>16 apr 2004 18:42 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Akkerhoornbloem-bloem-kl.jpg|Akkerhoornbloem-bloem-kl.jpg]]" <em>(eigen foto 2e paasdag scheveningse duinen)</em></li> <li>16 apr 2004 17:35 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Kreeft.jpg|Kreeft.jpg]]" <em>(Photo Credit:US National Oceanic and Atmospheric Administration &#91;&#91;en:Image:Lobster.jpg]])</em></li> <li>16 apr 2004 16:08 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Basketball.jpg|Basketball.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:Basketball, 1977, by Rick Dikeman&#123;&#123;msg:GFDL}} &#91;&#91;en:Image:basketball.jpg]])</em></li> <li>16 apr 2004 16:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Unknow_lizard2_belize.jpg|Unknow_lizard2_belize.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:Striped basilisk lizard, also known as a &quot;Jesus Christ lizard&quot; in the Belizian jungle.&#91;&#91;en:Image:Unknow lizard2 belize.jpg]])</em></li> <li>16 apr 2004 15:56 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Basilika_(Pompeji).png|Basilika_(Pompeji).png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:Grundri einer Basilika aus Pompeji aus Meyers Konversationslexikon 1888 http&#58;//susi.e-technik.uni-ulm.de:8080/meyers/servlet/showSeite?SeiteNr=0425&amp;BandNr=2&amp;textmode=false &#91;&#91;de:Bild:Basilika (Pompeji).png]])</em></li> <li>16 apr 2004 15:51 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Basilisk.gif|Basilisk.gif]]" <em>(Vanaf russische wikipedia)</em></li> <li>16 apr 2004 15:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:OcimumBasilicum.jpg|OcimumBasilicum.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: &#91;&#91;Basil (plant)]] plants on my back porch.&#91;&#91;en:Image:OcimumBasilicum.jpg]])</em></li> <li>16 apr 2004 15:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Basil_1511.jpg|Basil_1511.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: PD photo Basil plant &#91;&#91;en:Image:Basil 1511.jpg]])</em></li> <li>16 apr 2004 15:44 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Basil_1511.jpg|Basil_1511.jpg]]" <em>(&#91;&#91;en:Image:Basil 1511.jpg]] PD photo Basil plant )</em></li> <li>16 apr 2004 15:20 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Syria.BasharAlAssad.01.jpg|Syria.BasharAlAssad.01.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was: Pres Bashar al-Assad of Syria &lt;br&gt;Source: Ricardo Stuckert/ABr. 03.Dec.2003 &lt;small&gt;Photograph copied from the website of &#91;http&#58;//www.radiobras.gov.br/ Agiencia Brasil], which states::The Agiencia Brasil makes images and photos available free of charge. To comply with existing law, we kindly request our users to list the credits as in the example: photographers name/ABr. This photo appeared as 11673.jpg on 03.Dec.2003. The photo was downloaded, cropped, and resized by Hajor.&#123;&#123;msg:CopyrightedFreeUseProvided}} credit is given to ABr and the photographer.&#39;&#39;&#91;&#91;en:Image:Syria.BasharAlAssad.01.jpg]])</em></li> <li>16 apr 2004 11:46 [[Gebruiker:Rm|Rm]] heeft ge-upload: "[[:Afbeelding:Reed_relais.jpg|Reed_relais.jpg]]" <em>(eigen compilatie)</em></li> <li>16 apr 2004 11:38 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Dubbeljk.jpg|Dubbeljk.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 apr 2004 11:34 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Evansjk.jpg|Evansjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 apr 2004 10:57 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:SuSE-logo.png|SuSE-logo.png]]" <em>(van engelse wikipedia)</em></li> <li>16 apr 2004 10:38 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pol2jk.jpg|Pol2jk.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 apr 2004 10:35 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pol1jk.jpg|Pol1jk.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 apr 2004 09:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Weensjk.jpg|Weensjk.jpg]]" <em>(Fritz8 - print)</em></li> <li>16 apr 2004 09:12 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:Lojban.png|Lojban.png]]" <em>(van engelse wikipedia)</em></li> <li>16 apr 2004 07:25 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Fietscomputer.jpg|Fietscomputer.jpg]]" <em>(Fietscomputer, mijn eigen computer op de scanner gelegd &#123;&#123;msg:GFDL}})</em></li> <li>16 apr 2004 07:13 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Barracuda_with_prey.jpg|Barracuda_with_prey.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:Image ID: &#91;http&#58;//www.photolib.noaa.gov/reef/reef2567.htm reef2567, The Coral Kingdom Collection]&lt;br&gt;Photographer: Florida Keys National Marine Sanctuary Staff&lt;br&gt;Credit: Florida Keys National Marine Sanctuary&lt;br&gt;&#91;&#91;en:Image:Barracuda with prey.jpg]])</em></li> <li>16 apr 2004 05:48 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:FBISeal.png|FBISeal.png]]" <em>(En: wikipedia)</em></li> <li>16 apr 2004 05:45 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Nsa_seal.png|Nsa_seal.png]]" <em>(En: wikipedia)</em></li> <li>15 apr 2004 23:28 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Marconi.jpg|Marconi.jpg]]" <em>(Marcoini van wike-en (nobelprijsinstituut, 1909 derhalve in PD?))</em></li> <li>15 apr 2004 22:20 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Nz_seebaeren.jpg|Nz_seebaeren.jpg]]" <em>(Fotograf: Mirko Thiessen (Baldhur) Ort: Neuseeland, Südinsel, Februar 1992 Lizenz: GNU FDL &#91;&#91;de:Bild:Nz seebaeren.jpg]])</em></li> <li>15 apr 2004 22:10 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Nord_seebaer_1.jpg|Nord_seebaer_1.jpg]]" <em>(Quelle: U.S. Fish &amp; Wildlife Service (http&#58;//images.fws.gov) &#91;&#91;de:Bild:Nord seebaer 1.jpg]])</em></li> <li>15 apr 2004 21:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Barbara_Bush.jpg|Barbara_Bush.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&#91;&#91;Barbara Bush]]: Official White House photo &#91;&#91;en:Image:Barbara Bush.jpg]])</em></li> <li>15 apr 2004 21:44 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Riesenotter.jpg|Riesenotter.jpg]]" <em>(&#91;&#91;de:Bild:Riesenotter.JPG]] Riesenotter, Public-Domain-Bild von U.S. Fish &amp; Wildlife Service (http&#58;//images.fws.gov) )</em></li> <li>15 apr 2004 21:28 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Stokstaartje.jpg|Stokstaartje.jpg]]" <em>(Erdmännchen; Public-Domain-Bild von http&#58;//www.junglewalk.com/frames.asp; fotografiert von Ralf Schmode &#91;&#91;de:Bild:Erdmaennchen.jpg]])</em></li> <li>15 apr 2004 21:19 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Fuchsmanguste.jpg|Fuchsmanguste.jpg]]" <em>(Fuchsmanguste; Public-Domain-Bild von http&#58;//www.junglewalk.com/frames.asp; fotografiert von Ralf Schmode &#91;&#91;de:Bild:Fuchsmanguste.jpg]])</em></li> <li>15 apr 2004 21:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:LocationPaysBalte.png|LocationPaysBalte.png]]" <em>(Emplacement des &#91;&#91;Pays baltes]]&lt;br&gt;Source Carte effectu&amp;eacute; par &#91;&#91;:en:User:Vardion]]&lt;br&gt;&#91;&#91;GFDL]] &#91;&#91;fr:Image:LocationPaysBalte.png]])</em></li> <li>15 apr 2004 21:10 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Balthasar_Bekker.jpg|Balthasar_Bekker.jpg]]" <em>(Von Diana Kremer angefertigte Tuschezeichnung von Balthasar Bekker nach dem Titelblatt des 1693 ver&amp;ouml;ffentlichten Hexentraktates Die bezauberte Welt von Balthasar Bekker.)</em></li> <li>15 apr 2004 21:08 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Grey_fox.jpg|Grey_fox.jpg]]" <em>(Grey Fox (thumbnail); public domain image from U.S. Fish &amp; Wildlife Service (http&#58;//images.fws.gov) &#91;&#91;en:Image:Grey fox small.jpg]])</em></li> <li>15 apr 2004 20:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Kugelschreiber.jpg|Kugelschreiber.jpg]]" <em>(Kugelschreiber-Spitze&lt;br&gt;Urheber: Anton (rp) 2003&lt;br&gt;Nutzungsrechte an GNU free licence, vanaf Duitse wikipedia)</em></li> <li>15 apr 2004 20:33 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Aquarius_constellation_map_small.png|Aquarius_constellation_map_small.png]]" <em>(Vanaf Engelse wikipedia)</em></li> <li>15 apr 2004 20:21 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LookZonderLook-plant-kl.jpg|LookZonderLook-plant-kl.jpg]]" <em>(gouda, eigen foto, hiermee onder gnu/fdl gebracht)</em></li> <li>15 apr 2004 20:21 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LookZonderLook-plant-hr.jpg|LookZonderLook-plant-hr.jpg]]" <em>(gouda, eigen foto, hiermee onder gnu/fdl gebracht)</em></li> <li>15 apr 2004 20:19 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LookZonderLook-overz-kl.jpg|LookZonderLook-overz-kl.jpg]]" <em>(gouda, eigen foto, hiermee onder gnu/fdl gebracht)</em></li> <li>15 apr 2004 20:19 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LookZonderLook-overz-hr.jpg|LookZonderLook-overz-hr.jpg]]" <em>(gouda, eigen foto, hiermee onder gnu/fdl gebracht)</em></li> <li>15 apr 2004 20:19 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Human.png|Human.png]]" <em>(Detail from Pioneer 11 spacecraft picture, showing a man and a woman. Derived from a public domain NASA image. The original image was a JPEG, and there are still some slight traces of JPEG artifacts &#91;&#91;en:Image:Human.png]])</em></li> <li>15 apr 2004 20:17 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LookZonderLook-bloem-hr.jpg|LookZonderLook-bloem-hr.jpg]]" <em>(gouda, eigen foto, hiermee onder gnu/fdl gebracht)</em></li> <li>15 apr 2004 20:16 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LookZonderLook-bloem-kl.jpg|LookZonderLook-bloem-kl.jpg]]" <em>(gouda, eigen foto, hiermee onder gnu/fdl gebracht)</em></li> <li>15 apr 2004 20:15 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LookZonderLook-blad-kl.jpg|LookZonderLook-blad-kl.jpg]]" <em>(gouda, eigen foto, hiermee onder gnu/fdl gebracht)</em></li> <li>15 apr 2004 20:15 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LookZonderLook-blad-hr.jpg|LookZonderLook-blad-hr.jpg]]" <em>(gouda, eigen foto, hiermee onder gnu/fdl gebracht)</em></li> <li>15 apr 2004 19:51 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Balkan.png|Balkan.png]]" <em>(balkanlanden anders ingekleurd)</em></li> <li>15 apr 2004 19:02 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Tokelau.png|Tokelau.png]]" <em>(http&#58;//www.cia.gov/cia/publications/factbook/geos/tl.html public domain &#91;&#91;de:Bild:Tokelau.PNG]])</em></li> <li>15 apr 2004 18:43 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Michielderuyter.jpg|Michielderuyter.jpg]]" <em>(&#91;&#91;Michiel de Ruyter]], portret (1673) door &#91;&#91;Hendrik Bary]] (1640-1707), naar &#91;&#91;Ferdinand Bol]])</em></li> <li>15 apr 2004 18:41 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Peachblossom9202.jpg|Peachblossom9202.jpg]]" <em>(Image copyleft: Image taken by me, released under GFDL Pollinator 02:59, 13 Mar 2004 (UTC) &#91;&#91;en:Image:Peachblossom9202.JPG]])</em></li> <li>15 apr 2004 18:39 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Autumn_Red_peaches.jpg|Autumn_Red_peaches.jpg]]" <em>(Autumn Red peaches from http&#58;//www.ars.usda.gov/is/graphics/photos/ Image Number K6084-1 Autumn Red peach. Photo by Jack Dykinga. &#91;&#91;en:Image:Autumn Red peaches.jpg]])</em></li> <li>15 apr 2004 18:26 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Apricot.jpg|Apricot.jpg]]" <em>(&#91;&#91;en:Image:Apricot.jpg]] Apricot thumbnail from http&#58;//www.ars.usda.gov/is/graphics/photos/ Image Number K5613-1 Castlebrite is the nation&#39;s No. 1 apricot in fresh-market sales. Photo by Scott Bauer. )</em></li> <li>15 apr 2004 17:56 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Caf.f5.750pix|Caf.f5.750pix]]" <em>(&#91;&#91;en:Image:Caf.f5.750pix.jpg]] Canadian Air Force CF-5 Freedom Fighters. These are three 419 (Moose) Tactical Fighter Training Squadron CF-5s of CFB Cold Lake, Alberta. The two rearmost aircraft display bolt-on refueling probes to configure the fighter for long-range flight through the support of an air-to-air refueler.Quote from http&#58;//www.airforce.forces.ca/index_e.htm :&lt;br&gt;&lt;i&gt;Information on this site has been posted with the intent that it be readily available for personal and public non-commercial use and may be reproduced, in part or in whole and by any means, without charge or further permission by the Department of National Defence. We ask only that:&lt;br&gt;- users exercise due diligence in ensuring the accuracy of the materials reproduced&lt;br&gt;- the Department of National Defence be identified as the source department&lt;br&gt;Picture prepared for Wikipedia by Adrian Pingstone in April 2003. )</em></li> <li>15 apr 2004 17:40 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Usaf.phantom.f4.686pix|Usaf.phantom.f4.686pix]]" <em>((&#91;&#91;en:Image:Usaf.phantom.f4.686pix.jpg]] The USAF&#39;s Phantom II, designated F-4C, made its first flight on May 27, 1963. Production deliveries began in November 1963. Phantom II production ended in 1979 after over 5,000 had been built--more than 2,600 for t))</em></li> <li>15 apr 2004 17:38 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Usaf.f15.eagle.750pix|Usaf.f15.eagle.750pix]]" <em>(&#91;&#91;en:Image:Usaf.phantom.f4.686pix.jpg]] The USAF&#39;s Phantom II, designated F-4C, made its first flight on May 27, 1963. Production deliveries began in November 1963. Phantom II production ended in 1979 after over 5,000 had been built--more than 2,600 for the USAF, about 1,200 for the Navy and Marine Corps, and the rest for friendly foreign nations. F-4s are no longer in the USAF inventory but are still flown by foreign nations. Reproduced with the permission of Airforce Link: http&#58;//www.af.mil/photos U.S. Air Force photo. Quote from af.mil: &quot;Information presented on Airforce Link is considered public information and may be distributed or copied. Use of appropriate byline/photo/image credits is requested.&quot; Picture prepared for Wikipedia by Adrian Pingstone in April 2003. )</em></li> <li>15 apr 2004 16:11 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Weerribben4.JPG|Weerribben4.JPG]]" <em>(eigen foto)</em></li> <li>15 apr 2004 16:10 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Weerribben3.JPG|Weerribben3.JPG]]" <em>(eigen foto)</em></li> <li>15 apr 2004 16:08 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Weerribben2.JPG|Weerribben2.JPG]]" <em>(eigen foto)</em></li> <li>15 apr 2004 16:07 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Weerribben1.JPG|Weerribben1.JPG]]" <em>(eigen foto)</em></li> <li>15 apr 2004 15:48 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:B17.sallyb.shuttle.050801.650pix|B17.sallyb.shuttle.050801.650pix]]" <em>(B-17 &quot;Sally B&quot; at the Shuttleworth Military Pageant (UK) in August 2001. Taken from http&#58;//futurshox.net with the permission of the photographer (Jo Mitchell). &#91;&#91;en:Image:B17.sallyb.shuttle.050801.250pix.jpg]])</em></li> <li>15 apr 2004 15:33 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Hornet.f18.750pix|Hornet.f18.750pix]]" <em>(Two F/A-18 Hornets assigned to Carrier Air Wing Three prepare to launch from the flight deck of the aircraft carrier USS Harry S. Truman.U.S. Navy photo by Photographer’s Mate 1st Class Michael W. Pendergrass. Quote from www.navy.mil: the purpose of this site is to provide information about the United States Navy to the general public. All information on this site is considered public information and may be distributed or copied unless otherwise specified. Use of appropriate byline/photo/image credits is requested Picture prepared for Wikipedia by Adrian Pingstone in April 2003. )</em></li> <li>15 apr 2004 15:21 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Lockheed_F-104_Starfighter.jpg|Lockheed_F-104_Starfighter.jpg]]" <em>(&#91;&#91;en:Image:Lockheed F-104 Starfighter.jpg]] Image from NASA, no copyrights http&#58;//www.dfrc.nasa.gov/gallery/photo/F-104/Small/EC88-0029-04.jpg )</em></li> <li>15 apr 2004 14:48 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Fby0.jpg|Fby0.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>15 apr 2004 13:07 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Dolletoren.jpg|Dolletoren.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 apr 2004 13:01 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Nimzo.jpg|Nimzo.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 apr 2004 12:55 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Rio.jpg|Rio.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 apr 2004 12:44 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Tomcat.f14.750pix|Tomcat.f14.750pix]]" <em>(Quote from www.navy.mil: the purpose of this site is to provide information about the United States Navy to the general public. All information on this site is considered public information and may be distributed or copied unless otherwise specified. Use of appropriate byline/photo/image credits is requested. Picture prepared for Wikipedia by Adrian Pingstone in April 2003. )</em></li> <li>15 apr 2004 12:25 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Usaf.f15.eagle.750pix|Usaf.f15.eagle.750pix]]"</li> <li>15 apr 2004 11:32 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Twee.jpg|Twee.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 apr 2004 11:29 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Een.jpg|Een.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 apr 2004 11:22 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kies.jpg|Kies.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 apr 2004 10:58 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Aftrek.jpg|Aftrek.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 apr 2004 10:54 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Aftrek.jpg|Aftrek.jpg]]" <em>(Fritz8 - print)</em></li> <li>15 apr 2004 10:16 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Moenchsrobbe_1.jpg|Moenchsrobbe_1.jpg]]" <em>(Hawaii-Mönchsrobbe; Public-Domain-Bild von U.S. Fish &amp; Wildlife Service (http&#58;//images.fws.gov) &#91;&#91;de:Bild:Moenchsrobbe 1.JPG]])</em></li> <li>15 apr 2004 10:09 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Bartrobbe.jpg|Bartrobbe.jpg]]" <em>(&#91;&#91;en:Bild:Bartrobbe.jpg]] Fotograf: Budd Christman Ort: Beringsee, Mai 1979 Quelle: National Oceanic and Atmospheric Administration (http&#58;//www.noaa.gov) Lizenz: Public Domain )</em></li> <li>15 apr 2004 10:03 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Klappmuetze.jpg|Klappmuetze.jpg]]" <em>(Quelle: National Oceanic and Atmospheric Administration (http&#58;//www.noaa.gov) Lizenz: Public Domain &#91;&#91;de:Bild:Klappmuetze.jpg]])</em></li> <li>15 apr 2004 09:59 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Bandrobbe.jpg|Bandrobbe.jpg]]" <em>(&#91;&#91;de:Bild:Bandrobbe2.jpg]] Fotograf: Budd Christman Ort: Beringsee, Mai 1979 Quelle: National Oceanic and Atmospheric Administration Lizenz: Public Domain )</em></li> <li>15 apr 2004 09:51 [[Gebruiker:Luijt|Luijt]] heeft ge-upload: "[[:Afbeelding:Wapenkss.png|Wapenkss.png]]" <em>(Wapen KSS)</em></li> <li>15 apr 2004 09:51 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Sattelrobbe.jpg|Sattelrobbe.jpg]]" <em>(&#91;&#91;de:Bild:Sattelrobbe.jpg]] Männchen, Weibchen und Jungtier Quelle: National Oceanic and Atmospheric Administration (http&#58;//www.noaa.gov) Lizenz: Public Domain )</em></li> <li>15 apr 2004 09:48 [[Gebruiker:Luijt|Luijt]] heeft ge-upload: "[[:Afbeelding:Wapen.gif|Wapen.gif]]" <em>(Wapen KSS)</em></li> <li>15 apr 2004 09:43 [[Gebruiker:Luijt|Luijt]] heeft ge-upload: "[[:Afbeelding:Stoet.jpg|Stoet.jpg]]" <em>(KSS op het binnenhof, eigen foto)</em></li> <li>15 apr 2004 09:20 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Königstiger4.jpg|Königstiger4.jpg]]" <em>(Tiger II achterzijde - eigen foto)</em></li> <li>15 apr 2004 09:06 [[Gebruiker:Degaaf|Degaaf]] heeft ge-upload: "[[:Afbeelding:Groenemeyer2003.jpg|Groenemeyer2003.jpg]]" <em>(Herbert Grönemeyer)</em></li> <li>15 apr 2004 08:04 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Königstiger1.jpg|Königstiger1.jpg]]" <em>(Tiger II (Königstiger) - eigen foto)</em></li> <li>15 apr 2004 07:51 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(Test upload.)</em></li> <li>15 apr 2004 07:50 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.png|Test.png]]" <em>(Dit is een test.)</em></li> <li>15 apr 2004 07:41 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.png|Test.png]]" <em>(blablabla)</em></li> <li>15 apr 2004 06:14 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Aardappel_Doré_Phytophthora.jpg|Aardappel_Doré_Phytophthora.jpg]]" <em>(zelfgemaakte foto; aardappelziekte op &#39;Doré&#39;)</em></li> <li>15 apr 2004 06:09 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Aardappel_Parel_Phytophthora.jpg|Aardappel_Parel_Phytophthora.jpg]]" <em>(zelfgemaakte foto; close up van bladaantasting op het ras &#39;Parel&#39;)</em></li> <li>15 apr 2004 05:54 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Mais_kiemplant_eerste_blad.jpg|Mais_kiemplant_eerste_blad.jpg]]" <em>(zelfgemaakte foto; kiemplant met eerste blad uit coleoptyl)</em></li> <li>15 apr 2004 04:49 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Fb0.jpg|Fb0.jpg]]" <em>(zelfgemaakte tekening, achtergrond geel gemaakt door Erik, ik weet niet, waarom die met die gele achtergrond weer overschreven is )</em></li> <li>15 apr 2004 04:44 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Fb0.jpg|Fb0.jpg]]" <em>(zelfgemaakt plaatje waarbij Erik een gele achtergrond had gemaakt, ik weet niet waarom iemand anders de eerdere versie zonder gele achtergrond heeft teruggezet???)</em></li> <li>14 apr 2004 23:29 [[Gebruiker:Kneiphof|Kneiphof]] heeft ge-upload: "[[:Afbeelding:Draaibank2.jpg|Draaibank2.jpg]]" <em>(eigen foto, vervanging van vorige wegens foute aanduiding)</em></li> <li>14 apr 2004 23:25 [[Gebruiker:Kneiphof|Kneiphof]] heeft ge-upload: "[[:Afbeelding:Draaibank.jpg|Draaibank.jpg]]" <em>(eigen foto, vervanging van vorige wegens foute aanduiding)</em></li> <li>14 apr 2004 22:58 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Weddellrobbe.jpg|Weddellrobbe.jpg]]" <em>(&#91;&#91;de:Bild:Weddellrobbe.jpg]] Fotograf: John Bortniak Ort: Antarktis, November 1978 Quelle: National Oceanic and Atmospheric Administration (http&#58;//www.noaa.gov) Lizenz: Public Domain )</em></li> <li>14 apr 2004 22:56 [[Gebruiker:Kneiphof|Kneiphof]] heeft ge-upload: "[[:Afbeelding:Draaibank.jpg|Draaibank.jpg]]" <em>(Door mezelf (gebruiker Kneiphof) genomen foto)</em></li> <li>14 apr 2004 22:51 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Verbondsark.png|Verbondsark.png]]" <em>(van engelse pagina)</em></li> <li>14 apr 2004 22:47 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Rossrobbe.jpg|Rossrobbe.jpg]]" <em>(&#91;&#91;de:Bild:Rossrobbe.jpg]] Fotograf: Mike Cameron Quelle: National Marine Mammal Laboratory (Unterorganisation der National Oceanic and Atmospheric Administration), http&#58;//nmml.afsc.noaa.gov/ Lizenz: Public Domain )</em></li> <li>14 apr 2004 22:36 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Ringelrob.jpg|Ringelrob.jpg]]" <em>(Zeichnung zweier Ringelrobben auf einer Eisscholle.Quelle: National Oceanic and Atmospheric Administration (http&#58;//www.noaa.gov) Lizenz: Public Domain &#91;&#91;de:Bild:Ringelrobbe.jpg]])</em></li> <li>14 apr 2004 22:28 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Krabbenfresser.jpg|Krabbenfresser.jpg]]" <em>(&#91;&#91;de:Bild:Krabbenfresser.jpg]] Quelle: National Marine Mammal Laboratory (Unterorganisation der National Oceanic and Atmospheric Administration), http&#58;//nmml.afsc.noaa.gov/ Fotograf: Mike Cameron Lizenz: Public Domain )</em></li> <li>14 apr 2004 22:24 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:GreySealBottling.jpg|GreySealBottling.jpg]]" <em>(&#91;&#91;en:Image:GreySealBottling.jpg]] Photograph taken by Stephen Lea off the north coast of Lundy Island (bottom of Trinity House steps) on 11th April 2003 )</em></li> <li>14 apr 2004 21:51 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Steller_sea_lion_bull.jpg|Steller_sea_lion_bull.jpg]]"</li> <li>14 apr 2004 21:41 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:RedPanda.jpg|RedPanda.jpg]]" <em>(Original from http&#58;//dlp.cs.berkeley.edu/cgi/img_query?seq_num=27210&amp;one=T &quot;This photo may be freely used for any non-commercial purpose, but please include copyright information with the photo and credit John White. For commercial use, or for other questions, contact John White, john.white161@verizon.net.&quot; &#91;&#91;en:Image:RedPanda.jpeg]])</em></li> <li>14 apr 2004 21:30 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Ferret_USFWS.jpg|Ferret_USFWS.jpg]]" <em>(&#91;&#91;en:Image:Ferret USFWS.jpg]] http&#58;//gimp-savvy.com/cgi-bin/img.cgi?ufwsdwjvA0ddck2846 Photo Credit:US Fish and Wildlife Service This image has been released into the public domain by the author, or its copyright has expired. This applies worldwide. See Copyright. )</em></li> <li>14 apr 2004 21:23 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:WEASEL.jpg|WEASEL.jpg]]" <em>(&#91;&#91;en:Image:WEASEL.JPG]] North American Longtail Weasel Public domain image from U.S. National Park Service www.nps.gov/yell/kidstuff/Alphabet/l.htm )</em></li> <li>14 apr 2004 20:55 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Skunk.jpg|Skunk.jpg]]" <em>(striped skunk - public domain Downloaded from: http&#58;//www.freestuff.co.uk/photos/animals/00000171.html &#91;&#91;en:Image:Skunk.jpg]])</em></li> <li>14 apr 2004 20:53 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Westenberg.jpg|Westenberg.jpg]]" <em>(actieshot uit een frisbee-wedstrijd. Bron: NFB, fotograaf: Rene Westenberg. Vrij bruikbaar met bronvermelding. Afkomstig van: http&#58;//www.frisbeesport.nl/NFB/pers/foto/ultimate1.htm)</em></li> <li>14 apr 2004 20:52 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Kaart_Italië.png|Kaart_Italië.png]]" <em>(Oorspronkelijk uit CIA Factbook; vertaald in Nederlands door Danielm; omgezet in PNG door mij + verbetering spelling)</em></li> <li>14 apr 2004 20:51 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Kaart_Israël.png|Kaart_Israël.png]]" <em>(Oorspronkelijk uit CIA Factbook; vertaald in Nederlands door Danielm; omgezet in PNG door mij + verbetering spelling)</em></li> <li>14 apr 2004 20:41 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Snow_leopard.jpg|Snow_leopard.jpg]]" <em>(Snow Leopard; public domain image from U.S. Fish &amp; Wildlife Service (http&#58;//images.fws.gov/) &#91;&#91;en:Image:Snow leopard.jpg]])</em></li> <li>14 apr 2004 20:32 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Serval_Cat.jpg|Serval_Cat.jpg]]" <em>(Serval (thumbnail); public domain photo from U.S. fish &amp; wildlife service &#91;&#91;en:Image:Serval cat small.jpg]])</em></li> <li>14 apr 2004 20:21 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Aristophanes.jpg|Aristophanes.jpg]]" <em>(Aristophanes, van Engelse Wiki.)</em></li> <li>14 apr 2004 20:22 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Kaart_Oostenrijk.png|Kaart_Oostenrijk.png]]" <em>(Oorspronkelijk uit CIA Factbook; vertaald in Nederlands door Danielm; omgezet in PNG door mij)</em></li> <li>14 apr 2004 20:21 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Margay_cat.jpg|Margay_cat.jpg]]" <em>(Margay in Corcovado National Park, Costa Rica. Public domain image by Jerry Bauer, from U.S. National Park Service. &#91;&#91;en:Image:Margay cat.jpg]])</em></li> <li>14 apr 2004 20:14 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Ocelot.jpg|Ocelot.jpg]]" <em>(Ocelot (thumbnail); public domain photo from Fish &amp; Wildlife Service, Image Archive &#91;&#91;en:Image:Ocelot small.jpg]])</em></li> <li>14 apr 2004 20:09 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Kaart_Griekenland.png|Kaart_Griekenland.png]]" <em>(Oorspronkelijk uit CIA Factbook; vertaald in Nederlands door Danielm; omgezet in PNG door mij)</em></li> <li>14 apr 2004 20:06 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Caracal.jpg|Caracal.jpg]]" <em>(Karakal; Public-Domain-Bild von http&#58;//images.fws.gov &#91;&#91;de:Bild:Karakal.jpg]])</em></li> <li>14 apr 2004 19:52 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:FennecFox.jpg|FennecFox.jpg]]" <em>(&#91;&#91;en:Image:FennecFox.jpg]] Fennec Fox; public domain image from http&#58;//www.junglewalk.com/frames.asp; image taken by Ralf Schmode )</em></li> <li>14 apr 2004 19:44 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Asian_red_dog.jpg|Asian_red_dog.jpg]]" <em>(Asian Red Dog (Dhole); public domain image from http&#58;//www.junglewalk.com/frames.asp; photographer: Ralf Schmode &#91;&#91;en:Image:Asian red dog.jpg]])</em></li> <li>14 apr 2004 19:41 [[Gebruiker:Henricus|Henricus]] heeft ge-upload: "[[:Afbeelding:Lower_saxony_fri.png|Lower_saxony_fri.png]]" <em>(Kaart van Landkreis Friesland (en: wiki --&gt; Wikiproject German districts)</em></li> <li>14 apr 2004 19:40 [[Gebruiker:Henricus|Henricus]] heeft ge-upload: "[[:Afbeelding:Friesland_district_coa.png|Friesland_district_coa.png]]" <em>(Kaart van Landkreis Friesland (en: wiki --&gt; Wikiproject German districts))</em></li> <li>14 apr 2004 19:38 [[Gebruiker:Henricus|Henricus]] heeft ge-upload: "[[:Afbeelding:Friesland_district_coa.png|Friesland_district_coa.png]]" <em>(Kaart van Landkreis Friesland (en: wiki --&gt; Wikiproject German districts))</em></li> <li>14 apr 2004 19:19 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Arcticfox.jpg|Arcticfox.jpg]]" <em>(&#91;&#91;en:Image:Arcticfox.jpg]] Arctic fox (North Slope, Alaska, 1959) Public domain image from U.S. National Oceanic and Atmospheric Administration )</em></li> <li>14 apr 2004 19:07 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Katfret.jpg|Katfret.jpg]]" <em>(&#91;&#91;de:Bild:Katzenfrett.jpg]] Katzenfrett; aus der engl. Wikipedia )</em></li> <li>14 apr 2004 18:56 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Kinky.jpg|Kinky.jpg]]" <em>(&#91;&#91;en:Image:Kinky.jpg]])</em></li> <li>14 apr 2004 18:46 [[Gebruiker:Henricus|Henricus]] heeft ge-upload: "[[:Afbeelding:Niedersachsen_rbweser-ems.png|Niedersachsen_rbweser-ems.png]]" <em>(Kaart van Weser-Ems (uit en: wiki - &#91;http&#58;//en.wikipedia.org/wiki/Wikipedia:WikiProject_German_districts/Maptemplates bron]))</em></li> <li>14 apr 2004 18:37 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Civetkat.jpg|Civetkat.jpg]]" <em>(Afrikanische Zibetkatze; Public-Domain-Bild von http&#58;//www.animalsvoice.com/PAGES/archive/civet.html &#91;&#91;de:Bild:Afrikan zibetkatze.jpg]])</em></li> <li>14 apr 2004 18:31 [[Gebruiker:Robk|Robk]] heeft ge-upload: "[[:Afbeelding:Vlag_Cos.PNG|Vlag_Cos.PNG]]" <em>(Vlag COS voor MediaWiki:COS)</em></li> <li>14 apr 2004 18:26 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Black_bear.jpg|Black_bear.jpg]]" <em>(&#91;&#91;en:Image:Black bear small.jpg]] Black bear (small image) from USFWS Public domain image from U.S. Fish and Wildlife Service web site: http&#58;//images.fws.gov/default.cfm?fuseaction=records.display&amp;CFID=3245898&amp;CFTOKEN=68104586&amp;id=0E26EF9E%2DA57E%2D4AE8%2D9E5D6EED1AAE5A7A Credit: Mike Bender, USFWS )</em></li> <li>14 apr 2004 18:13 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Jaguarundi.jpg|Jaguarundi.jpg]]" <em>(&#91;&#91;de:Bild:Jaguarundi.jpg]] Quelle: http&#58;//images.fws.gov, U.S. Fish &amp; Wildlife Service Lizenz: Public Domain )</em></li> <li>14 apr 2004 17:41 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Herderstasje-overz-kl.jpg|Herderstasje-overz-kl.jpg]]" <em>(eigen foto, leyweg den haag, vandaag, hiermee in p.d. gebracht)</em></li> <li>14 apr 2004 17:41 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Herderstasje-bloem-kl.jpg|Herderstasje-bloem-kl.jpg]]" <em>(eigen foto, leyweg den haag, vandaag, hiermee in p.d. gebracht)</em></li> <li>14 apr 2004 17:01 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Alpensteenbok.jpg|Alpensteenbok.jpg]]" <em>(&#91;&#91;de:Bild:Steinbock.jpg]] Bild eines Steinbocks - thinknact.com)</em></li> <li>14 apr 2004 16:34 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Alpaca.png|Alpaca.png]]" <em>(This image has been released into the public domain by the author, or its copyright has expired. This applies worldwide. See Copyright. Webster&#39;s Dictionary, 1911 &#91;&#91;en:Image:Alpaca.png]])</em></li> <li>14 apr 2004 15:39 [[Gebruiker:Henricus|Henricus]] heeft ge-upload: "[[:Afbeelding:Lower_saxony_wst.png|Lower_saxony_wst.png]]" <em>(Kaart van Ammerland (uit en: wiki - &#91;http&#58;//en.wikipedia.org/wiki/Wikipedia:WikiProject_German_districts/Maptemplates bron]))</em></li> <li>14 apr 2004 15:30 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Telefooncel001.jpg|Telefooncel001.jpg]]" <em>(Oude telefooncel, bij een antiekzaakje hier in Koblenz. Foto: &#91;&#91;Gebruiker:Andre Engels&#124;Andre Engels]], door fotograaf in publiek domein geplaatst.)</em></li> <li>14 apr 2004 14:23 [[Gebruiker:Peter bankers|Peter bankers]] heeft ge-upload: "[[:Afbeelding:Klein_Kasteel_Deurne_-_vooraanzicht.jpg|Klein_Kasteel_Deurne_-_vooraanzicht.jpg]]" <em>(Klein Kasteel DEURNE &#39;the little castle&#39; c pbankers)</em></li> <li>14 apr 2004 13:58 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Fis.jpg|Fis.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 apr 2004 13:42 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Modern.jpg|Modern.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 apr 2004 13:31 [[Gebruiker:Moribunt|Moribunt]] heeft ge-upload: "[[:Afbeelding:Klompen.jpg|Klompen.jpg]]" <em>(Van Engelse Wikipedia (!))</em></li> <li>14 apr 2004 13:03 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Dingo.jpg|Dingo.jpg]]" <em>(Australian dingo, photo taken by user:Karen Johnson &#91;&#91;en:Image:Dingo.jpg]])</em></li> <li>14 apr 2004 12:54 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Coyote.jpg|Coyote.jpg]]" <em>(&#91;&#91;en:Image:Coyote-thumbnail.jpg]] Public domain image from U.S. Fish and Wildlife Service / George Harrison )</em></li> <li>14 apr 2004 12:45 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Cetacea_range_map_Short-beaked_Common_Dolphin.png|Cetacea_range_map_Short-beaked_Common_Dolphin.png]]" <em>(&#91;&#91;en:Image:Cetacea range map Short-beaked Common Dolphin.PNG]] Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled &quot;Text of the GNU Free Documentation License&quot;. Subject to disclaimers.User:Pcb21 after User:Vardion. See Wikipedia:WikiProject Cetaceans for further details )</em></li> <li>14 apr 2004 12:43 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Common_dolphin.jpg|Common_dolphin.jpg]]" <em>(&#91;&#91;en:Image:Common dolphin.jpg]] This picture was taken from http&#58;//nmml.afsc.noaa.gov/gallery/cetaceans/dd-14_comdolphin.htm. The photo was taken Scott Hill of the NOAA corps. As a American government employee working on government business, this picture is the public domain under American law. )</em></li> <li>14 apr 2004 12:24 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Bengaalse_tijger.jpg|Bengaalse_tijger.jpg]]" <em>(&#91;&#91;en:Image:BengalTiger.jpg]] Image courtesy of David B. Jack )</em></li> <li>14 apr 2004 11:39 [[Gebruiker:Deadstar|Deadstar]] heeft ge-upload: "[[:Afbeelding:IrelandProvincesNumbered.png|IrelandProvincesNumbered.png]]" <em>(van en:)</em></li> <li>14 apr 2004 10:15 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:TobiasAsser.jpg|TobiasAsser.jpg]]" <em>(TMCasser van wiki-en (public domain wegens datum))</em></li> <li>14 apr 2004 09:02 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Vrij.jpg|Vrij.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 apr 2004 08:35 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Cetacea_range_map_Bryde's_Whale.png|Cetacea_range_map_Bryde's_Whale.png]]" <em>(&#91;&#91;en:Image:Cetacea range map Bryde&#39;s Whale.PNG]] Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. User:Pcb21 after User:Vardion, See Wikipedia:WikiProject Cetaceans )</em></li> <li>14 apr 2004 08:31 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Brydes-whale.jpg|Brydes-whale.jpg]]" <em>(pub dom image from US National Marine Fisheries Service, Wayne Hoggard &#91;&#91;en:Image:Brydes-whale.jpg]])</em></li> <li>14 apr 2004 08:28 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan1.jpg|Scan1.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 apr 2004 08:17 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Dat.jpg|Dat.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 apr 2004 08:12 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Flap.jpg|Flap.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 apr 2004 08:06 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Schaak.jpg|Schaak.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 apr 2004 08:05 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Yitzhak_Rabin.jpg|Yitzhak_Rabin.jpg]]" <em>(Yitzak Rabin van wiki-en)</em></li> <li>14 apr 2004 08:02 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Schaak.jpg|Schaak.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 apr 2004 08:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Schaak.jpg|Schaak.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 apr 2004 07:36 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Saye.jpg|Saye.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 apr 2004 07:30 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:StarttoRun2004.jpg|StarttoRun2004.jpg]]" <em>(Toestemming fotograaf)</em></li> <li>14 apr 2004 07:21 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Princessdi.jpg|Princessdi.jpg]]" <em>(En: wikipedia)</em></li> <li>14 apr 2004 07:08 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kwal.jpg|Kwal.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 apr 2004 06:52 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:LogoICBL.gif|LogoICBL.gif]]" <em>(Ik vraag om toestemming)</em></li> <li>14 apr 2004 06:31 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Fam.jpg|Fam.jpg]]" <em>(Fritz8 - print)</em></li> <li>14 apr 2004 06:10 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Fian.jpg|Fian.jpg]]" <em>(Fritz8 - print)</em></li> <li>13 apr 2004 22:14 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Mangoesten.jpg|Mangoesten.jpg]]" <em>(&#91;&#91;de:Bild:Erdmaennchen.jpg]] Erdmännchen; Public-Domain-Bild von http&#58;//www.junglewalk.com/frames.asp; fotografiert von Ralf Schmode )</em></li> <li>13 apr 2004 21:48 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Leopard_seal.jpg|Leopard_seal.jpg]]" <em>(Leopard Seal; public domain image from http&#58;//www.noaa.gov &#91;&#91;en:Image:Leopard seal.jpg]])</em></li> <li>13 apr 2004 21:39 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Balkan.png|Balkan.png]]" <em>(Balkan, vertaald van Finse Wiki door &#91;&#91;Gebruiker:Känsterle&#124;Känsterle]] (oorspr. bron: http&#58;//leuksman.com/misc/maps.php))</em></li> <li>13 apr 2004 21:37 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Zeeolifant.jpg|Zeeolifant.jpg]]" <em>(&#91;&#91;de:Bild:See elefanten.jpg]] ==Nördlicher See-Elefant== Bulle und Kuh vor der Paarung Fotograf: Jan Roletto Ort: Gulf of the Farallones National Marine Sanctuary (Kalifornien) Quelle: National Oceanic and Atmospheric Administration (http&#58;//www.noaa.gov) Lizenz: Public Domain)</em></li> <li>13 apr 2004 21:21 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Walrus.jpg|Walrus.jpg]]" <em>(&#91;&#91;de:Bild:Walrus.jpg]] aus en: Copyright: &quot;Public domain image from U.S. National Oceanic and Atmospheric Administration &quot; )</em></li> <li>13 apr 2004 21:15 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:SEEurope-small.jpg|SEEurope-small.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;SE Europe, cut from http&#58;//earthobservatory.nasa.gov/Newsroom/LCC/Images/eur_web.jpeg &#91;&#91;en:Image:SEEurope-small.jpg]])</em></li> <li>13 apr 2004 21:13 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Raccoonsm.jpg|Raccoonsm.jpg]]" <em>(&#91;&#91;en:Image:Raccoonsm.jpg]] Photo of a raccoon drinking, taken from the North American Parks and Wildlife website. )</em></li> <li>13 apr 2004 21:07 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Badminton_veld_groot.png|Badminton_veld_groot.png]]" <em>(Vertaling engelse afbeelding)</em></li> <li>13 apr 2004 21:03 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Canterbury.jpg|Canterbury.jpg]]" <em>(van engelse pagina)</em></li> <li>13 apr 2004 21:02 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Wombat.jpg|Wombat.jpg]]" <em>(&#91;&#91;de:Bild:Wombat.jpg]] Bild eines australischen Wombats, aufgenommen mit Digitalkamera, Dezember 200 von thomasgl )</em></li> <li>13 apr 2004 21:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Balibeach.jpg|Balibeach.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Bali beach, Sanur &#91;&#91;en:Image:balibeach.jpg]])</em></li> <li>13 apr 2004 21:00 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bali.jpg|Bali.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;*Beschreibung: Topographie Bali *Quelle: &#91;http&#58;//earthobservatory.nasa.gov/Newsroom/NewImages/images.php3?img_id=16436 NASA] *Lizenzstatus: Public Domain &#91;&#91;de:Bild:Bali.jpg]])</em></li> <li>13 apr 2004 20:59 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:IndonesiaBali.png|IndonesiaBali.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;province of &#91;&#91;Indonesia]] &#123;&#123;msg:GFDL}} &#91;&#91;en:Image:IndonesiaBali.png]])</em></li> <li>13 apr 2004 20:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Map_of_Azerbaijan_with_cities.png|Map_of_Azerbaijan_with_cities.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-sv. De beschrijving daar was:&lt;p&gt;Karta över Azerbaijan frÃ¥n eng. &#39;pedian &#91;&#91;sv:Bild:Map of Azerbaijan with cities.png]])</em></li> <li>13 apr 2004 20:41 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bakelit_Struktur.png|Bakelit_Struktur.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;*Beschreibung: Strukturformelausschnitt Bakelit *Quelle: ChemSketch *Fotograf oder Zeichner: MarkusZi *Andere Versionen: - *Lizenzstatus: GNU FDL &#91;&#91;de:Bild:Bakelit Struktur.png]])</em></li> <li>13 apr 2004 19:48 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:ZeevanAzov.jpg|ZeevanAzov.jpg]]" <em>(Vertaald van http&#58;//seawifs.gsfc.nasa.gov/SEAWIFS/IMAGES/SEAWIFS/S1998196102555.L1A_HROM.BlackSea.jpg)</em></li> <li>13 apr 2004 19:47 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Bacteria_shape.png|Bacteria_shape.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;from &#91;&#91;Nupedia]] article on &#91;&#91;bacteria]] - see http&#58;//www.nupedia.com/article/500/ by Nagina Parmar &#39;&#39;(Image created by the author and donated to Nupedia.)&#39;&#39; - Nupedia is a GFDL work, so this image is presumably also under the GFDL. &#91;&#91;en:Image:bacteria shape.png]])</em></li> <li>13 apr 2004 19:24 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Codice_azteca.jpg|Codice_azteca.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-es. De beschrijving daar was:&lt;p&gt;Fragmento de un códice azteca previo al siglo XVII (dominio público) &#91;&#91;es:Imagen:Codice azteca.jpg]])</em></li> <li>13 apr 2004 19:22 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Aztec_calendar_stone.JPG|Aztec_calendar_stone.JPG]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;scan of gold pendant replica of aztec calendar stone &#91;&#91;en:Image:aztec calendar stone.JPG]])</em></li> <li>13 apr 2004 19:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Satellitenfoto-Azoren-kl.jpg|Satellitenfoto-Azoren-kl.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Satellitenfoto Azoren public domain Quelle: NASA - http&#58;//visibleearth.nasa.gov/cgi-bin/viewrecord?25535 Credit: Jeff Schmaltz, MODIS Rapid Response Team, NASA/GSFC Satellite: Terra Sensor: MODIS Data Start Date: 05-01-2003 Data End Date: 05-01-2003 VE Record ID: 25535 &#39;&#39;Description: Hundreds of miles off the coast of Portugal, the nine islands of the Azores chains are stretched out over the Atlantic Ocean. This Moderate Resolution Imaging Spectroradiometer (MODIS) image from the Terra satellite on May 1, 2003, shows seven of the nine islands: (from left to right) Faial, Pico, Sao Jorge, Graciosa (north), Terceira, Sao Miguel, and Santa Maria.&#39;&#39; &#91;&#91;de:Bild:Satellitenfoto-Azoren-kl.jpg]])</em></li> <li>13 apr 2004 19:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Pt-acores.png|Pt-acores.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;upload to replace offsite gif &#91;&#91;en:Image:pt-acores.png]])</em></li> <li>13 apr 2004 18:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Acetic-acid.png|Acetic-acid.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;molecular structure of acetic acid &#91;&#91;en:Image:acetic-acid.png]])</em></li> <li>13 apr 2004 18:25 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Manatee_photo.jpg|Manatee_photo.jpg]]" <em>(&#91;&#91;en:Image:Manatee photo.jpg]] From http&#58;//www-pao.ksc.nasa.gov/kscpao/visit/kscovrv.htm. This image has been released into the public domain by the author, or its copyright has expired. This applies worldwide. See Copyright. )</em></li> <li>13 apr 2004 18:04 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Thomasbecket.jpg|Thomasbecket.jpg]]" <em>(van engelse pagina)</em></li> <li>13 apr 2004 17:31 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Mandrill.jpg|Mandrill.jpg]]" <em>(&#91;&#91;en:Image:Mandrill-thumbnail.jpg]])</em></li> <li>13 apr 2004 17:11 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Ibex-jpatokal.jpg|Ibex-jpatokal.jpg]]" <em>(&#91;&#91;en:Image:Ibex-jpatokal.jpg]] http&#58;//jpatokal.iki.fi/photo/travel/Israel/MitzpeRamon/Ibex_Resting.JPG Released to Wikipedia by Jpatokal )</em></li> <li>13 apr 2004 16:54 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Baboon.jpg|Baboon.jpg]]" <em>(&#91;&#91;en:Image:00969 Baboon.jpg]] van &#91;&#91;en:User:Wildlifelands]])</em></li> <li>13 apr 2004 16:39 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Spotted_hyena.jpg|Spotted_hyena.jpg]]" <em>(&#91;&#91;en:Image:Spotted hyena.jpg]] Spotted hyena; public domain image from http&#58;//www.junglewalk.com/frames.asp )</em></li> <li>13 apr 2004 16:21 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Stekelvarken.jpg|Stekelvarken.jpg]]" <em>(&#91;&#91;de:Bild:Stachelschwein2.jpg]] Stachelschweine von mir aufgenommen. Bild steht unter der FDL )</em></li> <li>13 apr 2004 16:12 [[Gebruiker:Bartux|Bartux]] heeft ge-upload: "[[:Afbeelding:Kubus.png|Kubus.png]]" <em>(Eerdere versie hersteld)</em></li> <li>13 apr 2004 16:03 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Gordeldier.jpg|Gordeldier.jpg]]" <em>(&#91;&#91;en:Image:Armadillo-thumbnail.jpg]] Armadillo Dasypus novemcinctus. Location: Sequoyah NWR, OK. Public domain picture from U.S. Fish and Wildlife Service, John and Karen Hollingsworth )</em></li> <li>13 apr 2004 15:27 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Grienden.jpg|Grienden.jpg]]" <em>(This photo of two Long-finned Pilot Whales is taken from http&#58;//nmml.afsc.noaa.gov/gallery/cetaceans/gl-5_pilot.htm. The photo was taken by Sally Mizroch of the National Marine Mammal Laboratory sometime prior to November 2003. The copyright permissions of the NMML are described at http&#58;//nmml.afsc.noaa.gov/gallery/images.htm. The full credit for this photo is due to Sally Mizroch, National Oceanic and Atmospheric Administration, National Marine Fisheries Service, Alaska Fisheries Science Center, National Marine Mammal Laboratory. In order to maintain compatiblity with the GFDL and the Laboratory&#39;s request, please do not remove the credit. &#91;&#91;en:Image:Two pilot whales.jpg]])</em></li> <li>13 apr 2004 15:14 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Kaart_Finland.png|Kaart_Finland.png]]" <em>(Gehercomprimeerd (zonder kwaliteitsverlies), is nu *kleiner* dan de gif. Nederlandse vertaling CIA-kaart)</em></li> <li>13 apr 2004 14:33 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Buckinghampalace.jpg|Buckinghampalace.jpg]]" <em>(van engelse pagina)</em></li> <li>13 apr 2004 14:27 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladinsnijding_veervormig_goed.jpg|Bladinsnijding_veervormig_goed.jpg]]" <em>(zelfgemaakte tekening; geeft aan wanneer wat in wat overgaat)</em></li> <li>13 apr 2004 13:51 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Eeuwig.jpg|Eeuwig.jpg]]" <em>(Fritz8 - print)</em></li> <li>13 apr 2004 13:35 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stamboon_kiemplant.jpg|Stamboon_kiemplant.jpg]]" <em>(zelfgemaakte foto; de eerste twee ware blaadjes ontvouwen zich)</em></li> <li>13 apr 2004 12:52 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Passant.jpg|Passant.jpg]]" <em>(Fritz8 - print)</em></li> <li>13 apr 2004 12:50 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:M1_Abrams.jpg|M1_Abrams.jpg]]" <em>(&#91;&#91;en:Image:Abrams mbt.jpg]] M1A1 from US government site )</em></li> <li>13 apr 2004 12:50 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:M1_Abrams.jpg|M1_Abrams.jpg]]" <em>(&#91;&#91;en:Image:Abrams mbt.jpg]] M1A1 from US government site )</em></li> <li>13 apr 2004 12:45 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Ferret.png|Ferret.png]]" <em>(&#91;&#91;en:Image:Ferret.png]] from http&#58;//www.sru.edu/depts/cisba/compsci/dailey/public/mammals/mammals.html This image has been released into the public domain by the author, or its copyright has expired. This applies worldwide. See Copyright. )</em></li> <li>13 apr 2004 12:37 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Rus.jpg|Rus.jpg]]" <em>(Fritz8 - print)</em></li> <li>13 apr 2004 12:24 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Platypus.jpg|Platypus.jpg]]" <em>(stolen from german wikipedia (&#91;&#91;:de:Bild:Platypus.jpg]])) &#91;&#91;en:Image:Platypus 300px.jpg]])</em></li> <li>13 apr 2004 12:05 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Okapi.jpg|Okapi.jpg]]" <em>(Okapi at Bristol Zoo, Bristol, England. Taken by Adrian Pingstone in August 2003 and placed in the public domain. &#91;&#91;en:Image:Okapi.bristol.250pix.jpg]])</em></li> <li>13 apr 2004 11:59 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:JulianusII-antioch(360-363)-CNG.jpg|JulianusII-antioch(360-363)-CNG.jpg]]" <em>(Portret van &#91;&#91;Julianus Apostata]] op bronzen munt van Antiochië, 360-363. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>13 apr 2004 11:53 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:JulianusII-antioch(360-363).jpg|JulianusII-antioch(360-363).jpg]]" <em>(Portret van &#91;&#91;Julianus Apostata]], 360-363. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>13 apr 2004 11:38 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Schaak.jpg|Schaak.jpg]]" <em>(Fritz8 - print)</em></li> <li>13 apr 2004 11:12 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Wladyslaw_Warnenczyk0312.jpg|Wladyslaw_Warnenczyk0312.jpg]]" <em>(pl:Wikipedia)</em></li> <li>13 apr 2004 11:08 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:BritishIslesMan.png|BritishIslesMan.png]]" <em>(&#91;&#91;en:Image:BritishIslesMan.png]] map showing &#91;&#91;Isle of Man]] within the &#91;&#91;British Isles]] &#123;&#123;msg:GFDL}} )</em></li> <li>13 apr 2004 11:02 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:WapenMAn.png|WapenMAn.png]]" <em>(&#91;&#91;en:Image:Isle of Man Arms Small.png]] Isle of Man Coat of Arms (Small) uit engekse wiki)</em></li> <li>13 apr 2004 10:50 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:LadislausIIIvanPolen.jpg|LadislausIIIvanPolen.jpg]]" <em>(Ladislaus III van Polen / Wladislaw I van Hongarije (van de Poolse Wiki))</em></li> <li>13 apr 2004 10:48 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Niue_flag_medium.png|Niue_flag_medium.png]]" <em>(Image originally derived from the public domain flags of the CIA World Factbook. Most of the flags have had their colours improved and many have been resized to the proper ratios. For a complete list of Wikipedia flags, see List of flags. &#91;&#91;en:Image:Niue flag medium.png]])</em></li> <li>13 apr 2004 10:46 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:LocatieNiue.png|LocatieNiue.png]]" <em>(&#91;&#91;en:Image:LocationNiue.png]] Location map for Niue &#91;&#91;:en:User:Vardion]])</em></li> <li>13 apr 2004 10:32 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:LocatieMontserrat.png|LocatieMontserrat.png]]" <em>(&#91;&#91;en:Image:LocationMontserrat.png]] location map for Montserrat - made for Wikipedia &#91;&#91;:en:User:Vardion]])</em></li> <li>13 apr 2004 10:16 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:St_Chamond.jpg|St_Chamond.jpg]]" <em>(&#91;&#91;en:Image:St. Chamond.jpg]] French St. Chamond tanks. Photo from the site : &#91;http&#58;//raven.cc.ukans.edu/~kansite/ww_one/photos/greatwar.htm Photos of the Great War] &#91;http&#58;//raven.cc.ukans.edu/~kansite/ww_one/photos/use.htm Image Use Policy and Source Information])</em></li> <li>13 apr 2004 09:52 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:SaloninaSest-(255-257)-CNG.jpg|SaloninaSest-(255-257)-CNG.jpg]]" <em>(Portret van &#91;&#91;Salonina]] op een Romeinse &#91;&#91;sestertie]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>13 apr 2004 09:26 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Euwe.jpg|Euwe.jpg]]" <em>(Fritz8 - print)</em></li> <li>13 apr 2004 08:54 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:US_Renault_FT-17.jpg|US_Renault_FT-17.jpg]]" <em>(&#91;&#91;en:Image:US Renault FT-17.jpg]] US army Renault FT-17 tanks going forward in the Argonne, France, September 26, 1918 Photo from the site : &#91;http&#58;//raven.cc.ukans.edu/~kansite/ww_one/photos/greatwar.htm Photos of the Great War] &#91;http&#58;//raven.cc.ukans.edu/~kansite/ww_one/photos/use.htm Image Use Policy and Source Information])</em></li> <li>13 apr 2004 08:40 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Stamboon_poortje.jpg|Stamboon_poortje.jpg]]" <em>(zelfgemaakte foto; begin kieming van boon)</em></li> <li>13 apr 2004 08:38 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Herne_(Duitsland).png|Herne_(Duitsland).png]]" <em>(&#91;&#91;de:Bild:Lage von Herne.png]] uit duise wiki Lage von Herne in Deutschland (GNU-FDL) )</em></li> <li>13 apr 2004 08:29 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Beukennoot.png|Beukennoot.png]]" <em>(&#91;&#91;en:Image:European Beech nut.png]] Copied from &#91;&#91;:fr:Image:Hêtre fruit.png]], credited to Guillaume Bokiau. &#123;&#123;msg:GFDL}})</em></li> <li>13 apr 2004 08:04 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Mais_kiemplant.jpg|Mais_kiemplant.jpg]]" <em>(zelfgemaakte foto; rechts het coleoptyl en links het eerste ware blad komt net door coleoptyl heen)</em></li> <li>13 apr 2004 07:59 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Fagus_sylvatica.JPG|Fagus_sylvatica.JPG]]" <em>(Eigen foto)</em></li> <li>13 apr 2004 07:52 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Guttatie_aardbeiblad.jpg|Guttatie_aardbeiblad.jpg]]" <em>(zelfgemaakte foto; als parels langs de bladrand van aardbeiplant)</em></li> <li>13 apr 2004 07:50 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:HetLoo4.JPG|HetLoo4.JPG]]" <em>(Eigen foto)</em></li> <li>13 apr 2004 07:48 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:HetLoo3.JPG|HetLoo3.JPG]]" <em>(Eigen foto)</em></li> <li>13 apr 2004 07:47 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:HetLoo2.JPG|HetLoo2.JPG]]" <em>(Eigen foto)</em></li> <li>13 apr 2004 07:47 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladinsnijding_veervormig.jpg|Bladinsnijding_veervormig.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>13 apr 2004 07:46 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:HetLoo1.JPG|HetLoo1.JPG]]" <em>(Eigen foto)</em></li> <li>13 apr 2004 07:46 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladinsnijding_veervormig.jpg|Bladinsnijding_veervormig.jpg]]" <em>(zelfgemaakte tekening; geeft aan wanneer wat in wat overgaat)</em></li> <li>13 apr 2004 07:28 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladinsnijding_lobbig.jpg|Bladinsnijding_lobbig.jpg]]" <em>(zelfgemaakte tekening: geeft aan wanneer wat in wat overgaat)</em></li> <li>13 apr 2004 07:28 [[Gebruiker:Deadstar|Deadstar]] heeft ge-upload: "[[:Afbeelding:Tiger_Woods.jpg|Tiger_Woods.jpg]]" <em>(040303-N-5319A-009 Arabian Gulf (Mar. 3, 2004) – Sailors watch professional golfer Tiger Woods hit a few golf balls during a demonstration in the hanger bay of the nuclear powered aircraft carrier USS George Washington (CVN 73). Tiger Woods accompanied by his fiancé Elin Nordegren, PGA player Mark O&#39;Meara, and caddies Steve Williams and Greg Rita visited the Norfolk, Va. Based carrier in the Arabian Gulf before participating in the European PGA Tour&#39;s Dubai Desert Classic on Thursday. The George Washington Carrier Strike Group (CSG) and Carrier Air Wing Seven (CVW-7) are deployed to the Arabian Gulf in support of Operations Iraqi and Enduring Freedom. U.S. Navy photo by Photographer&#39;s Mate 1st Class Brien Aho. (RELEASED) )</em></li> <li>13 apr 2004 07:21 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladinsnijding_veervormig.jpg|Bladinsnijding_veervormig.jpg]]" <em>(zelfgemaakte tekening; geeft grenzen aan wanneer wat naar wat overgaat)</em></li> <li>13 apr 2004 07:05 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:Xiangqiboard.png|Xiangqiboard.png]]" <em>(chinees schaakbord van chinese wikipedia)</em></li> <li>13 apr 2004 00:29 [[Gebruiker:Bluppfisk|Bluppfisk]] heeft ge-upload: "[[:Afbeelding:Laplandschild.jpg|Laplandschild.jpg]]" <em>(van http&#58;//www.infoschweden.de/infos/prov2.htm - geen copyright vermeld.)</em></li> <li>13 apr 2004 00:21 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:ConstantineIBuste.jpg|ConstantineIBuste.jpg]]" <em>(van Duitse wikipedia: http&#58;//de.wikipedia.org/wiki/Bild:Constantine.jpg )</em></li> <li>13 apr 2004 00:06 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:ZenobiaAnt.jpg|ZenobiaAnt.jpg]]" <em>(Portret van koningin &#91;&#91;Zenobia]] op een &#91;&#91;antoninianus]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG).)</em></li> <li>12 apr 2004 23:33 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Beckett.jpg|Beckett.jpg]]" <em>(van engelse pagina)</em></li> <li>12 apr 2004 23:18 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:SaloninusAnt.jpg|SaloninusAnt.jpg]]" <em>(Portret van &#91;&#91;Saloninus]] op een &#91;&#91;antoninianus]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 23:11 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:ValerianusIIae.jpg|ValerianusIIae.jpg]]" <em>(Portret van &#91;&#91;Valerianus II]] op een bronzen munt. Foto met toestemming van Classical Numismatic Group, Inc. (CNG).)</em></li> <li>12 apr 2004 23:00 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:GallienusSest.jpg|GallienusSest.jpg]]" <em>(Portret van &#91;&#91;Gallienus]] op een &#91;&#91;sestertie]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 22:50 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:ValarianusIsest.jpg|ValarianusIsest.jpg]]" <em>(Portret van &#91;&#91;Valerianus I]] op een &#91;&#91;sestertie]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG).)</em></li> <li>12 apr 2004 22:40 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:CorneliaSuperaAnt.jpg|CorneliaSuperaAnt.jpg]]" <em>(Portret van &#91;&#91;Cornelia SUpera]] op een &#91;&#91;antoninianus]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 22:29 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Kermis.JPG|Kermis.JPG]]" <em>(Eigen foto)</em></li> <li>12 apr 2004 22:28 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Wiltshire.png|Wiltshire.png]]" <em>(van engelse pagina)</em></li> <li>12 apr 2004 22:24 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:AemilianusAnt.jpg|AemilianusAnt.jpg]]" <em>(Portret van &#91;&#91;Aemilianus]] op een &#91;&#91;antoninianus]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 22:22 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Devon.png|Devon.png]]" <em>(van engelse pagina)</em></li> <li>12 apr 2004 22:14 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Kent.png|Kent.png]]" <em>(van engelse pagina)</em></li> <li>12 apr 2004 22:13 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:HostilianusSest.jpg|HostilianusSest.jpg]]" <em>(Portret van &#91;&#91;Hostilianus]] op een &#91;&#91;sestertie]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 22:06 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Milet_theater_therme_2003.jpg|Milet_theater_therme_2003.jpg]]" <em>(Milete, van de Duitse Wiki, door I. Panteleon GNU)</em></li> <li>12 apr 2004 22:06 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Milet_stadtmitte_1997.jpg|Milet_stadtmitte_1997.jpg]]" <em>(Milete, van de Duitse Wiki, door I. Panteleon GNU)</em></li> <li>12 apr 2004 22:06 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Milet_stadtmitte_1997.jpg|Milet_stadtmitte_1997.jpg]]" <em>(Milete, van de Duitse Wiki, door I. Panteleon GNU)</em></li> <li>12 apr 2004 22:05 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Milet_faustina_therme_1997.jpg|Milet_faustina_therme_1997.jpg]]" <em>(Milete, van de Duitse Wiki, door I. Panteleon GNU)</em></li> <li>12 apr 2004 22:05 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:250px-Milet_theater_therme_2003.jpg|250px-Milet_theater_therme_2003.jpg]]" <em>(Milete, van de Duitse Wiki, door I. Panteleon GNU)</em></li> <li>12 apr 2004 22:05 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:250px-Milet_stadtmitte_1997.jpg|250px-Milet_stadtmitte_1997.jpg]]" <em>(Milete, van de Duitse Wiki, door I. Panteleon GNU)</em></li> <li>12 apr 2004 22:05 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:250px-Milet_faustina_therme_1997.jpg|250px-Milet_faustina_therme_1997.jpg]]" <em>(Milete, van de Duitse Wiki, door I. Panteleon GNU)</em></li> <li>12 apr 2004 22:05 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:HerenniusEtruscusSest.jpg|HerenniusEtruscusSest.jpg]]" <em>(Portret van &#91;&#91;Herennius Etruscus]] op een &#91;&#91;sestertie]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 21:55 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:PupienusSest.jpg|PupienusSest.jpg]]" <em>(Portret van &#91;&#91;Pupienus]] op een &#91;&#91;sestertie]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG).)</em></li> <li>12 apr 2004 21:50 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Vinkebus.jpg|Vinkebus.jpg]]" <em>(Met toestemming fotograaf)</em></li> <li>12 apr 2004 21:43 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:PescenniusNigerDen.jpg|PescenniusNigerDen.jpg]]" <em>(Portret van &#91;&#91;Pescennius Niger]] op een &#91;&#91;denarius]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 21:30 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:DidiusJulianusSest.jpg|DidiusJulianusSest.jpg]]" <em>(Portret van &#91;&#91;Didius Julianus]] op een &#91;&#91;sestertie]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 21:24 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:SamaritaanBlokker.JPG|SamaritaanBlokker.JPG]]" <em>(Eigen foto)</em></li> <li>12 apr 2004 21:20 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Denemarken.gif|Kaart_Denemarken.gif]]" <em>(Vertaling bestaande engelse kaart in Nederlands)</em></li> <li>12 apr 2004 21:20 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:PertinaxSest.jpg|PertinaxSest.jpg]]" <em>(Portret van &#91;&#91;Pertinax]] op een &#91;&#91;sestertie]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG).)</em></li> <li>12 apr 2004 21:16 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:KrijgsmanBlokker.JPG|KrijgsmanBlokker.JPG]]" <em>(Eigen foto)</em></li> <li>12 apr 2004 21:04 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:LucillaSest.jpg|LucillaSest.jpg]]" <em>(Portret van &#91;&#91;Lucilla]] op &#91;&#91;sestertie]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 20:54 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:MatidiaDen.jpg|MatidiaDen.jpg]]" <em>(Portret van &#91;&#91;Matidia]] op een Romeinse &#91;&#91;denarius]]. Foto met toestemming van Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 20:43 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:PlotinaSest.jpg|PlotinaSest.jpg]]" <em>(Portret van &#91;&#91;Plotina]] op een Romeinse &#91;&#91;sestertie]]. Foto met toestemming van: Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 19:58 [[Gebruiker:Kristof vt|Kristof vt]] heeft ge-upload: "[[:Afbeelding:Dromedaris.jpg|Dromedaris.jpg]]" <em>(&#91;&#91;en:Image:Dromedary.jpg]] uit engelse wiki Camelus dromedarius. 226x283 px. Photo taken by Hajor, December 2002 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled &quot;Text of the GNU Free Documentation License&quot;. Subject to disclaimers )</em></li> <li>12 apr 2004 19:23 [[Gebruiker:Bart|Bart]] heeft ge-upload: "[[:Afbeelding:Idor2.png|Idor2.png]]" <em>(van de site http&#58;//www.geocities.com/Athens/Forum/5037/ido-nl.html gekopiëerd)</em></li> <li>12 apr 2004 18:37 [[Gebruiker:Bartux|Bartux]] heeft ge-upload: "[[:Afbeelding:Kubus3.png|Kubus3.png]]" <em>(kubus - zelfgemaakt met povray)</em></li> <li>12 apr 2004 18:35 [[Gebruiker:Bartux|Bartux]] heeft ge-upload: "[[:Afbeelding:Kubus2.png|Kubus2.png]]" <em>(kubus - zelfgemaakt met povray)</em></li> <li>12 apr 2004 18:32 [[Gebruiker:Bartux|Bartux]] heeft ge-upload: "[[:Afbeelding:Kubus.png|Kubus.png]]" <em>(kubus - zelfgemaakt met povray)</em></li> <li>12 apr 2004 18:30 [[Gebruiker:Bartux|Bartux]] heeft ge-upload: "[[:Afbeelding:Bol.png|Bol.png]]" <em>(bol - zelfgemaakt met povray)</em></li> <li>12 apr 2004 18:18 [[Gebruiker:Bartux|Bartux]] heeft ge-upload: "[[:Afbeelding:Torus.png|Torus.png]]" <em>(torus - zelfgemaakt met povray)</em></li> <li>12 apr 2004 17:19 [[Gebruiker:Bluppfisk|Bluppfisk]] heeft ge-upload: "[[:Afbeelding:Veelvraat.jpg|Veelvraat.jpg]]" <em>(veelvraat. deze afbeelding is public domain.)</em></li> <li>12 apr 2004 17:19 [[Gebruiker:Albert|Albert]] heeft ge-upload: "[[:Afbeelding:Haspengouw.jpg|Haspengouw.jpg]]" <em>(Haspengouws dorp)</em></li> <li>12 apr 2004 17:03 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:GordianusIIsest.jpg|GordianusIIsest.jpg]]" <em>(Portret van &#91;&#91;Gordianus I]] op een sestertie. Foto met toestemming van: Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 16:54 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:GordianusIsest.jpg|GordianusIsest.jpg]]" <em>(Portret van &#91;&#91;Gordianus I]] op een sestertie. Foto met toestemming van: Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 16:39 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:BalbinusSest.jpg|BalbinusSest.jpg]]" <em>(Portret van keizer &#91;&#91;Balbinus]] op een Romeinse sestertie. Foto: Classical Numismatic Group, Inc. (CNG))</em></li> <li>12 apr 2004 16:27 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:TranquillinaDen.jpg|TranquillinaDen.jpg]]" <em>(Portret van &#91;&#91;Tranuillina]] op een &#91;&#91;denariu&#39;]]. Foto: Classical Numismatic Group, Inc. (CNG).)</em></li> <li>12 apr 2004 16:04 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Jacobsdraaistel.jpg|Jacobsdraaistel.jpg]]" <em>(Een PCC-draaistel onder een Haagse tram, eigen foto, &#123;&#123;msg:PD}})</em></li> <li>12 apr 2004 15:50 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Fortis_Circustheater.jpg|Fortis_Circustheater.jpg]]" <em>(Fortis Circustheater in Scheveningen, eigen foto, &#123;&#123;msg:PD}})</em></li> <li>12 apr 2004 15:09 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Scheveningse_pier.jpg|Scheveningse_pier.jpg]]" <em>(Pier van Scheveningen, eigen foto. &#123;&#123;msg:PD}})</em></li> <li>12 apr 2004 14:48 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Aardatmosfeer.png|Aardatmosfeer.png]]" <em>(Schematische weergave van de atmosfeer van de aarde; zelf gemaakt)</em></li> <li>12 apr 2004 14:35 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Kurhaus_achterkant.jpg|Kurhaus_achterkant.jpg]]" <em>(Achterkant Kurhaus, eigen foto, &#123;&#123;msg:PD}})</em></li> <li>12 apr 2004 14:35 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Kurhaus_voorkant.jpg|Kurhaus_voorkant.jpg]]" <em>(Voorkant Kurhaus, eigen foto &#123;&#123;msg:PD}})</em></li> <li>12 apr 2004 13:51 [[Gebruiker:RonaldW|RonaldW]] heeft ge-upload: "[[:Afbeelding:ImmerGrune.jpg|ImmerGrune.jpg]]" <em>(Zelfgemaakt plaatje (mbv Fritz))</em></li> <li>12 apr 2004 13:41 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Holland_Casino_Scheveningen.jpg|Holland_Casino_Scheveningen.jpg]]" <em>(Holland Casino te Scheveningen, eigen foto, &#123;&#123;msg:PD}})</em></li> <li>12 apr 2004 13:24 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Vuurtoren_Scheveningen.jpg|Vuurtoren_Scheveningen.jpg]]" <em>(De vuurtoren van Scheveningen, eigen foto, &#123;&#123;msg:PD}})</em></li> <li>12 apr 2004 13:20 [[Gebruiker:RonaldW|RonaldW]] heeft ge-upload: "[[:Afbeelding:OnsterfelijkePartij.jpg|OnsterfelijkePartij.jpg]]" <em>(Zelfgemaakt plaatje (mbv Fritz))</em></li> <li>12 apr 2004 13:16 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:HTM_Bus.jpg|HTM_Bus.jpg]]" <em>(HTM-bus in Scheveningen, eigen foto &#123;&#123;msg:PD}})</em></li> <li>12 apr 2004 13:15 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:GTL_Interieur.jpg|GTL_Interieur.jpg]]" <em>(Interieur van een GTL8-II-tram, eigen foto &#123;&#123;msg:PD}})</em></li> <li>12 apr 2004 13:14 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:GTL.jpg|GTL.jpg]]" <em>(GTL8-II-tram (Den Haag) bij het eindpunt van lijn 11, eigen foto. &#123;&#123;msg:PD}})</em></li> <li>12 apr 2004 12:52 [[Gebruiker:Evanherk|Evanherk]] heeft ge-upload: "[[:Afbeelding:Mammoth.gif|Mammoth.gif]]" <em>(van engelse wiki)</em></li> <li>12 apr 2004 12:14 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan7.jpg|Scan7.jpg]]" <em>(Fritz8 - print)</em></li> <li>12 apr 2004 12:13 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Costume_traditonnel_france_Auvergne_grand_01.jpg|Costume_traditonnel_france_Auvergne_grand_01.jpg]]" <em>(Kopie fr: wikipedia)</em></li> <li>12 apr 2004 12:05 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Carte_Localisation_Region_France_Auvergne.gif|Carte_Localisation_Region_France_Auvergne.gif]]" <em>(Kopie fr: wikipedia)</em></li> <li>12 apr 2004 11:57 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Blason_Auvergne_petit.gif|Blason_Auvergne_petit.gif]]" <em>(Kopie fr: wikipedia)</em></li> <li>12 apr 2004 11:46 [[Gebruiker:Evanherk|Evanherk]] heeft ge-upload: "[[:Afbeelding:Spinkleinmettekst.jpg|Spinkleinmettekst.jpg]]" <em>(Eigen foto e van herk 2004)</em></li> <li>12 apr 2004 11:45 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:Sunny-Orange-small.jpg|Sunny-Orange-small.jpg]]" <em>(Foto Keukenhof. Afkomstig van keukenhof.nl: &quot;Persfoto&#39;s. Deze foto&#39;s kunnen rechtenvrij gebruikt worden.&quot;)</em></li> <li>12 apr 2004 11:27 [[Gebruiker:RonaldW|RonaldW]] heeft ge-upload: "[[:Afbeelding:ParelVanZandvoort.jpg|ParelVanZandvoort.jpg]]" <em>(Zelfgemaakt plaatje (mbv Fritz))</em></li> <li>12 apr 2004 10:42 [[Gebruiker:Falcongj|Falcongj]] heeft ge-upload: "[[:Afbeelding:Deltametropool.JPG|Deltametropool.JPG]]" <em>(Zelfgemaakt plaatje (met dank aan Mctv). Vrij te gebruiken...)</em></li> <li>12 apr 2004 10:38 [[Gebruiker:Falcongj|Falcongj]] heeft ge-upload: "[[:Afbeelding:Deltametropool.PNG|Deltametropool.PNG]]" <em>(Zelfgemaakt plaatje (met dank aan Mctv). Vrij te gebruiken...)</em></li> <li>12 apr 2004 10:33 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Locmuenchen.png|Locmuenchen.png]]" <em>(Locatie München van &#91;http&#58;//www.opengeodb.de/suche/index.php?id=21179&amp;q=M%FCnchen www.OpenGeoDb.de Licentie: lgpl)</em></li> <li>12 apr 2004 10:32 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Frygische_muts.png|Frygische_muts.png]]" <em>(Frygische muts, van de Duitse Wiki, Public Domain)</em></li> <li>12 apr 2004 10:22 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Oostenrijk.gif|Kaart_Oostenrijk.gif]]" <em>(Foutje verbeterd)</em></li> <li>12 apr 2004 10:21 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Oostenrijk.gif|Kaart_Oostenrijk.gif]]" <em>(Nederlandse vertaling CIA-kaart)</em></li> <li>12 apr 2004 09:46 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Lemmers.jpg|Lemmers.jpg]]" <em>(foto -Dimitri-)</em></li> <li>12 apr 2004 09:43 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Finland.gif|Kaart_Finland.gif]]" <em>(Nederlandse vertaling CIA-kaart)</em></li> <li>12 apr 2004 09:42 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Finland.png|Kaart_Finland.png]]" <em>(Nederlandse vertaling CIA-kaart)</em></li> <li>12 apr 2004 08:59 [[Gebruiker:PeterMeuris|PeterMeuris]] heeft ge-upload: "[[:Afbeelding:Margaretha_van_Oostenrijk.jpg|Margaretha_van_Oostenrijk.jpg]]" <em>(eigen foto, hierbij onder gnu/fdl gebracht)</em></li> <li>12 apr 2004 08:57 [[Gebruiker:PeterMeuris|PeterMeuris]] heeft ge-upload: "[[:Afbeelding:Margaretha_van_Oostenrijk.jpg|Margaretha_van_Oostenrijk.jpg]]" <em>(Eigen foto nu GPL)</em></li> <li>12 apr 2004 08:53 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan6.jpg|Scan6.jpg]]" <em>(Fritz8 - print)</em></li> <li>12 apr 2004 08:52 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Smilodon.jpg|Smilodon.jpg]]" <em>(&#39;&#39;Smilodon californicus&#39;&#39;, van WikipediaDE, oorspronkelijk van http&#58;//www.library.ca.gov. &quot;In general, information presented on this web site, unless otherwise indicated, is considered in the public domain.&quot;)</em></li> <li>12 apr 2004 08:49 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Smilodon.jpg|Smilodon.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Säbelzahnkatze (Smilodon californicus), von www.library.ca.gov &#91;&#91;de:Bild:Smilodon.jpg]])</em></li> <li>12 apr 2004 08:37 [[Gebruiker:PeterMeuris|PeterMeuris]] heeft ge-upload: "[[:Afbeelding:Margaretha_van_Oostenrijk.jpg|Margaretha_van_Oostenrijk.jpg]]" <em>(Margaretha_van_Oostenrijk.jpg)</em></li> <li>12 apr 2004 07:19 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:LogoAPEC.png|LogoAPEC.png]]" <em>((toestemming wordt gevraagd))</em></li> <li>12 apr 2004 07:13 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LamiumMaculatum-hr.jpg|LamiumMaculatum-hr.jpg]]" <em>(eigen foto, hierbij onder gnu/fdl gebracht)</em></li> <li>12 apr 2004 07:09 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:LamiumMaculatum-kl.JPG|LamiumMaculatum-kl.JPG]]" <em>(eigen foto, hierbij onder gnu/fdl gebracht)</em></li> <li>12 apr 2004 05:28 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:LogoAPEC.png|LogoAPEC.png]]" <em>(voor gebruik in de boxjes)</em></li> <li>12 apr 2004 05:24 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:LogoAPEC.png|LogoAPEC.png]]" <em>(voor gebruik in de boxjes)</em></li> <li>12 apr 2004 05:08 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:ApecLogo-2003.jpg|ApecLogo-2003.jpg]]" <em>(Official logo)</em></li> <li>12 apr 2004 04:02 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:Islamic_Jihad.jpg|Islamic_Jihad.jpg]]" <em>(uit de Hebreeuwse Wikipedia)</em></li> <li>12 apr 2004 03:51 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:Hamas.jpg|Hamas.jpg]]" <em>(uit de Hebreeuwse Wikipedia)</em></li> <li>11 apr 2004 22:14 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:TuringMachine13som.png|TuringMachine13som.png]]" <em>(2 + 3 = 5 op een Turing machine; zelf gemaakt)</em></li> <li>11 apr 2004 22:13 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:TuringMachine.png|TuringMachine.png]]" <em>(Turing Machine (schematisch); zelf gemaakt)</em></li> <li>11 apr 2004 22:13 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:Fby0.jpg|Fby0.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>11 apr 2004 22:03 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Griekenland.gif|Kaart_Griekenland.gif]]" <em>(Nederlandse vertaling CIA-kaart)</em></li> <li>11 apr 2004 21:51 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Nicholas1.jpg|Nicholas1.jpg]]" <em>(En: wikipedia)</em></li> <li>11 apr 2004 20:44 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:HaifaLogo.PNG|HaifaLogo.PNG]]" <em>(uit de Hebreeuwse Wikipedia)</em></li> <li>11 apr 2004 20:39 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:EilatLogo.jpg|EilatLogo.jpg]]" <em>(uit de Hebreeuwse Wikipedia)</em></li> <li>11 apr 2004 20:36 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:JerLogo.jpg|JerLogo.jpg]]" <em>(uit de Hebreeuwse Wikipedia)</em></li> <li>11 apr 2004 20:34 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:NetanyaLogo.jpg|NetanyaLogo.jpg]]" <em>(uit de Hebreeuwse Wikipedia)</em></li> <li>11 apr 2004 20:32 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:AshdodLogo.png|AshdodLogo.png]]" <em>(uit de Hebreeuwse Wikipedia)</em></li> <li>11 apr 2004 20:16 [[Gebruiker:Gidonb|Gidonb]] heeft ge-upload: "[[:Afbeelding:AshkelonLogo.jpg|AshkelonLogo.jpg]]" <em>(uit de Hebreeuwse Wikipedia)</em></li> <li>11 apr 2004 19:16 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:JohnCollierSchilderij.jpg|JohnCollierSchilderij.jpg]]" <em>(Zelfde plaatje maar nu het en:Formaat)</em></li> <li>11 apr 2004 18:34 [[Gebruiker:Puckly|Puckly]] heeft ge-upload: "[[:Afbeelding:JohnCollierSchilderij.jpg|JohnCollierSchilderij.jpg]]" <em>(Van Engelse wiki: This image has been released into the public domain by the author, or its copyright has expired. This applies worldwide)</em></li> <li>11 apr 2004 16:17 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Hklarenbeek.jpg|Hklarenbeek.jpg]]" <em>(foto -Dimitri-)</em></li> <li>11 apr 2004 15:55 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Italië.gif|Kaart_Italië.gif]]" <em>(Nederlandse vertaling van Engelse kaart)</em></li> <li>11 apr 2004 14:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Avignon-palais.jpg|Avignon-palais.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;== Description == Photo of Avignon &#61;= Source == &#91;&#91;:fr:Image:Avignon-palais.jpg]] (Author: Greudin, summer 2003) &#61;= Licence == GFDL &#91;&#91;en:Image:Avignon-palais.jpg]])</em></li> <li>11 apr 2004 14:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Avignon-palais-des-papes.jpg|Avignon-palais-des-papes.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;== Description == Photo of Avignon &#61;= Source == &#91;&#91;:fr:Image:Avignon-palais-des-papes.jpg]] (Author: Greudin, summer 2003 ) &#61;= Licence == GFDL &#91;&#91;en:Image:Avignon-palais-des-papes.jpg]])</em></li> <li>11 apr 2004 14:29 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Avignon-place-palais.jpg|Avignon-place-palais.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;== Description == Photo of Avignon &#61;= Source == &#91;&#91;:fr:Image:Avignon-place-palais.jpg]] (Author: Greudin, summer 2003 ) &#61;= Licence == GFDL &#91;&#91;en:Image:Avignon-place-palais.jpg]])</em></li> <li>11 apr 2004 14:28 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Avignon_coat_of_arms.jpg|Avignon_coat_of_arms.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Avignon coat of arms, from fr: From the French wikipedia &#91;http&#58;//fr.wikipedia.org/wiki/Image:Avignon_armoirie.jpg] &#91;&#91;en:Image:Avignon coat of arms.jpg]])</em></li> <li>11 apr 2004 14:24 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:Hudsonbaymap_nl.png|Hudsonbaymap_nl.png]]" <em>(Kaart van de Hudson baai; zelf gemaakte vertaling van dezelfde kaart op de Engelstalige Wikipedia)</em></li> <li>11 apr 2004 14:17 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Avicenna.jpg|Avicenna.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;In the &#91;&#91;public domain]] by age &#123;&#123;msg:PD}} &#91;&#91;en:Image:Avicenna.jpg]])</em></li> <li>11 apr 2004 14:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:ACT_in_Australia_map.png|ACT_in_Australia_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;&#123;&#123;msg:GFDL}} &#91;&#91;en:Image:ACT in Australia map.png]])</em></li> <li>11 apr 2004 14:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:ACT_in_Australia_map.png|ACT_in_Australia_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;&#123;&#123;msg:GFDL}} &#91;&#91;en:Image:ACT in Australia map.png]])</em></li> <li>11 apr 2004 13:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lucius_Domitius_Aurelianus.jpg|Lucius_Domitius_Aurelianus.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-sv. De beschrijving daar was:&lt;p&gt;FrÃ¥n Nordisk familjebok &#91;&#91;sv:Bild:Lucius Domitius Aurelianus.jpg]])</em></li> <li>11 apr 2004 13:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Aurelian.jpg|Aurelian.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;&#39;&#39;&#39;Aurelian&#39;&#39;&#39; (&#91;&#91;270]]-&#91;&#91;275]]) silvered &#91;&#91;antoninianus]] Obverse: IMP AVRELIANVS AVG; radiate bust of Aurelian right Reverse: ORIENS AVG; &#91;&#91;Sol]] holding globe, standing over captives &#91;&#91;en:Image:Aurelian.jpg]])</em></li> <li>11 apr 2004 13:39 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Atrium_1.jpg|Atrium_1.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-sv. De beschrijving daar was:&lt;p&gt;FrÃ¥n Nordisk familjebok &#91;&#91;sv:Bild:Atrium 1.jpg]])</em></li> <li>11 apr 2004 13:33 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Littleboy.jpg|Littleboy.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;1:1 Modell der Little-Boy Bombe von http&#58;//www.lanl.gov/museum/defense.shtml Copyright notice: Unless otherwise indicated, this information has been authored by an employee or employees of the University of California, operator of the Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with the U.S. Department of Energy. The U.S. Government has rights to use, reproduce, and distribute this information. The public may copy and use this information without charge, provided that this Notice and any statement of authorship are reproduced on all copies. Neither the Government nor the University makes any warranty, express or implied, or assumes any liability or responsibility for the use of this information. &#91;&#91;de:Bild:littleboy.jpg]])</em></li> <li>11 apr 2004 13:32 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Fatman.jpg|Fatman.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;1:1 Modell der Fat-Man Bombe von http&#58;//www.lanl.gov/museum/defense.shtml Copyright notice: Unless otherwise indicated, this information has been authored by an employee or employees of the University of California, operator of the Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with the U.S. Department of Energy. The U.S. Government has rights to use, reproduce, and distribute this information. The public may copy and use this information without charge, provided that this Notice and any statement of authorship are reproduced on all copies. Neither the Government nor the University makes any warranty, express or implied, or assumes any liability or responsibility for the use of this information. &#91;&#91;de:Bild:fatman.jpg]])</em></li> <li>11 apr 2004 13:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Aten_disk.jpg|Aten_disk.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Painting of the Aten from Amarna &#91;&#91;en:Image:Aten disk.jpg]])</em></li> <li>11 apr 2004 12:54 [[Gebruiker:Wietse Venema|Wietse Venema]] heeft ge-upload: "[[:Afbeelding:Tricolour.jpg|Tricolour.jpg]]" <em>(Illustratie tricolor-effect. Fotograaf Wietse Venema, stemt toe in publicatie onder GNU/FDL, mits fotograaf vermeldt blijft.)</em></li> <li>11 apr 2004 12:52 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Kaart_Israël.gif|Kaart_Israël.gif]]" <em>(Vertaling bestaande engelse kaart in Nederlands)</em></li> <li>11 apr 2004 12:31 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan8.jpg|Scan8.jpg]]" <em>(Fritz8 - print)</em></li> <li>11 apr 2004 12:25 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan2.jpg|Scan2.jpg]]" <em>(Fritz8 - print)</em></li> <li>11 apr 2004 12:19 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan2.jpg|Scan2.jpg]]" <em>(Fritz8 - print)</em></li> <li>11 apr 2004 12:02 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Wiersma.jpg|Wiersma.jpg]]" <em>(foto -Dimitri-)</em></li> <li>11 apr 2004 11:23 [[Gebruiker:Wouterhagens|Wouterhagens]] heeft ge-upload: "[[:Afbeelding:Chloroform.jpg|Chloroform.jpg]]" <em>(formule chloroform (Wouter Hagens))</em></li> <li>11 apr 2004 10:51 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:HenryHudson.jpg|HenryHudson.jpg]]" <em>(Henry Hudson, uit Cyclopaedia of Universal History, 1885&lt;p&gt;&#123;&#123;msg:Auteursrecht verlopen}})</em></li> <li>11 apr 2004 10:32 [[Gebruiker:Wouterhagens|Wouterhagens]] heeft ge-upload: "[[:Afbeelding:Tetrahydrofuraan.jpg|Tetrahydrofuraan.jpg]]" <em>(formule THF (Wouter Hagens))</em></li> <li>11 apr 2004 10:24 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Axolotl.jpg|Axolotl.jpg]]" <em>(En: wikipedia)</em></li> <li>11 apr 2004 09:34 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Ministerpresidentcals.jpg|Ministerpresidentcals.jpg]]" <em>(Jo Cals. Bron: Ministerie van Algemene Zaken)</em></li> <li>11 apr 2004 09:27 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Willem_Bilderdijk.png|Willem_Bilderdijk.png]]" <em>(Willem Bilderdijk. Bron: Museum van de Vaderlandse Geschiedenis)</em></li> <li>11 apr 2004 09:23 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Willembilderdijk.png|Willembilderdijk.png]]" <em>(Willem Bilderdijk. Bron: Museum van de Vaderlandse Geschiedenis)</em></li> <li>11 apr 2004 09:20 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Willembilderdijk.png|Willembilderdijk.png]]" <em>(Willem Bilderdijk. Bron: Museum van de Vaderlandse Geschiedenis)</em></li> <li>11 apr 2004 09:17 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Arjanerkel.jpg|Arjanerkel.jpg]]" <em>(Arjan Erkel, deze foto circuleert op tientallen websites op Internet, kan als fair use beschouwd worden om hem ook hier te gebruiken.)</em></li> <li>11 apr 2004 09:15 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Barendbiesheuvel.jpg|Barendbiesheuvel.jpg]]" <em>(Barend Biesheuvel. Bron: Ministerie van Algemene Zaken)</em></li> <li>11 apr 2004 09:10 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Nicolaasbeets.png|Nicolaasbeets.png]]" <em>(Nicolaas Beets. Bron: Museum van de Vaderlandse Geschiedenis)</em></li> <li>11 apr 2004 09:08 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Arabië.png|Arabië.png]]" <em>(Versie 3)</em></li> <li>11 apr 2004 09:00 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Louisjosephmariabeel.jpg|Louisjosephmariabeel.jpg]]" <em>(Minister-President Beel. Bron Minaz)</em></li> <li>11 apr 2004 08:48 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Behoudenhuis.png|Behoudenhuis.png]]" <em>(Behouden Huys. Bron: het museum van de vaderlandse geschiedenis)</em></li> <li>11 apr 2004 08:18 [[Gebruiker:Jan Arkesteijn|Jan Arkesteijn]] heeft ge-upload: "[[:Afbeelding:Driesvanagt.jpg|Driesvanagt.jpg]]" <em>(Dries van Agt, bron Minaz)</em></li> <li>11 apr 2004 08:00 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Athena.png|Athena.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Athena (Pallas Velletri) from the Louvre. Public domain image from Nordisk familjebok. &#91;&#91;en:Image:Athena.png]])</em></li> <li>11 apr 2004 07:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Atef.jpg|Atef.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Mohammed Atef - http&#58;//www.fbi.gov/mostwant/terrorists/teratef.htm &#91;&#91;en:Image:Atef.jpg]])</em></li> <li>11 apr 2004 07:39 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Mordechai_Vanunu.jpg|Mordechai_Vanunu.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Israeli prisoner (nuclear secrets) Source: http&#58;//www.vanunu.freeserve.co.uk/ Credit unknown/untraceable &#123;&#123;msg:fairuse}} &#91;&#91;en:Image:Mordechai Vanunu.jpg]])</em></li> <li>11 apr 2004 07:35 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Paul_Kruger.jpg|Paul_Kruger.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;From &#91;http&#58;//www.lib.utexas.edu], in the &#91;&#91;public domain]] &#91;&#91;en:Image:Paul Kruger.jpg]])</em></li> <li>11 apr 2004 07:08 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Frisbee-1.jpg|Frisbee-1.jpg]]" <em>(&#91;&#91;en:Image:Frisbee-1.jpg]] Professionele &#91;&#91;frisbee]] van &#91;&#91;:en:Image:Frisbee-1.jpg&#124;Engelstalige Wikipedia]]. De tekst daar was:Professional Frisbee The uploader wrote: &quot;I owned the copyright to this image, but gave it away to Wikipedia. Feel free to copy/distribute.&quot; )</em></li> <li>11 apr 2004 05:53 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:LogoAlterra.gif|LogoAlterra.gif]]"</li> <li>11 apr 2004 05:32 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:LogoAPEC.png|LogoAPEC.png]]" <em>(Toestemming wordt gevraagd)</em></li> <li>11 apr 2004 03:18 [[Gebruiker:Bluppfisk|Bluppfisk]] heeft ge-upload: "[[:Afbeelding:Ghentopn.jpg|Ghentopn.jpg]]" <em>(Het Lam Gods)</em></li> <li>11 apr 2004 02:48 [[Gebruiker:Bluppfisk|Bluppfisk]] heeft ge-upload: "[[:Afbeelding:180px-Karta_över_Uppsala_1920.jpg|180px-Karta_över_Uppsala_1920.jpg]]" <em>(Kaart van Uppsala)</em></li> <li>11 apr 2004 02:46 [[Gebruiker:Bluppfisk|Bluppfisk]] heeft ge-upload: "[[:Afbeelding:Uppsalas_stadsvapen.png|Uppsalas_stadsvapen.png]]" <em>(Uppsalas Wapenschild)</em></li> <li>11 apr 2004 00:18 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:1-over-x-plus-x.png|1-over-x-plus-x.png]]" <em>(1 gedeeld door x + x)</em></li> <li>11 apr 2004 00:18 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Johannes_paulus_2.jpg|Johannes_paulus_2.jpg]]" <em>(van italiaanse pagina)</em></li> <li>11 apr 2004 00:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:1-over-x.png|1-over-x.png]]" <em>(1 gedeeld door x)</em></li> <li>11 apr 2004 00:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Astronaut.jpg|Astronaut.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;&lt;table border=0 cellpadding=0 cellspacing=1 xwidth=500 width=640&gt; &lt;tr bgcolor=#DEDFDE&gt; &lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot; align=&quot;center&quot; valign=&quot;bottom&quot; nowrap&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; nowrap&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&#91;&#91;NASA]] Photo ID:&lt;/b&gt; &lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;S84-27017&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/td&gt; &lt;td valign=top nowrap&gt;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;Program:&lt;/b&gt; &lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&#91;&#91;Space Shuttle&#124;Shuttle]]&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/td&gt; &lt;td valign=top&gt;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;Mission:&lt;/b&gt; &lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&#91;&#91;STS-41-B]] &lt;/td&gt; &lt;td valign=top nowrap&gt;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;Date Taken:&lt;/b&gt; &lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&#91;&#91;February 11]], &#91;&#91;1984]] &lt;/td&gt; &lt;td valign=top nowrap&gt;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;Film Type:&lt;/b&gt; &lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&#91;&#91;70mm film&#124;70mm]] &lt;/td&gt; &lt;/tr&gt; &lt;tr bgcolor=#DEDFDE&gt; &lt;td colspan=6&gt; &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;12&quot;&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Title:&lt;/b&gt;&lt;br&gt; Views of the extravehicular activity during STS 41-B&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr bgcolor=#DEDFDE&gt; &lt;td colspan=6&gt; &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;12&quot;&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br&gt; Astronaut &#91;&#91;Bruce McCandless II]], mission specialist, participates in a extravehicular activity (EVA), a few meters away from the cabin of the shuttle Challenger. He is using a nitrogen-propelled hand-controlled &#91;&#91;manned maneuvering unit]] (MMU). He is performing this EVA without being tethered to the shuttle. &lt;BR&gt;The picture shows a cloud view of the earth in the background. &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr bgcolor=#DEDFDE&gt; &lt;tr bgcolor=#DEDFDE&gt; &lt;td colspan=6&gt; &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;12&quot;&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Subject Terms:&lt;/b&gt;&lt;br&gt; &#91;&#91;astronaut&#124;ASTRONAUTS]] &#91;&#91;Space Shuttle Challenger&#124;CHALLENGER (ORBITER)]] &#91;&#91;crew&#124;CREW]] PROCEDURES (INFLIGHT) &#91;&#91;extravehicular activity&#124;EXTRAVEHICULAR ACTIVITY]] &#91;&#91;extravehicular mobility unit&#124;EXTRAVEHICULAR MOBILITY UNITS]] &#91;&#91;manned maneuvering unit&#124;MANNED MANEUVERING UNITS]] &#91;&#91;STS-41-B&#124;SPACE SHUTTLE MISSION 41-B]] &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &#91;&#91;en:Image:astronaut.jpg]])</em></li> <li>11 apr 2004 00:05 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Astronaut_wings.png|Astronaut_wings.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;USAF Astronaut Insignia Badge, Public domain illustration from &#91;http&#58;//www.af.mil/art.html af.mil art gallery]. &#91;&#91;en:Image:Astronaut wings.png]])</em></li> <li>10 apr 2004 23:45 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Renfe252.jpg|Renfe252.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Zu den neueren Fahrzeugen der &#91;&#91;Red Nacional de los Ferrocarriles Espanoles&#124;RENFE]] zählt die Baureihe 252 ( &#91;&#91;25. Juni]] &#91;&#91;2002]] in L&#39;Aldea-Amposta-Tortosa). *Aufnahme: Steffen Mokosch *Lizenz: &#91;&#91;GNU FDL]] &#91;&#91;de:Bild:Renfe252.jpg]])</em></li> <li>10 apr 2004 23:44 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Wappen_augsburg.png|Wappen_augsburg.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Wappen von Augsburg &#91;&#91;de:Bild:Wappen augsburg.png]])</em></li> <li>10 apr 2004 23:43 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Karte_augsburg_in_deutschland.png|Karte_augsburg_in_deutschland.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Karte Augsburg in Deutschland &#91;&#91;de:Bild:Karte augsburg in deutschland.png]])</em></li> <li>10 apr 2004 23:36 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:StichtingArkLogo.gif|StichtingArkLogo.gif]]"</li> <li>10 apr 2004 23:37 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Spargelkraut-a-2003-10-12.jpg|Spargelkraut-a-2003-10-12.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Spargelkraut bei Dambach, Stadtteil von Fürth (12. Okt. 2003) &#91;&#91;de:Bild:spargelkraut-a-2003-10-12.jpg]])</em></li> <li>10 apr 2004 23:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Asklepios_MK1888.png|Asklepios_MK1888.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Abbildung aus Meyers Konversionlexikon 1888 - Asklepios &#91;&#91;de:Bild:Asklepios MK1888.png]])</em></li> <li>10 apr 2004 23:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Logo_ASEAN.png|Logo_ASEAN.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-ms. De beschrijving daar was:&lt;p&gt;Logo ASEAN &#91;&#91;ms:Imej:Logo ASEAN.png]])</em></li> <li>10 apr 2004 23:15 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Littlebittern43.jpg|Littlebittern43.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Little Bittern from old enc &#91;&#91;en:Image:Littlebittern43.jpg]])</em></li> <li>10 apr 2004 23:11 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Holzschnitt_Woody_Allen.jpg|Holzschnitt_Woody_Allen.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;*Beschreibung: Holzschnitt &quot;Woody Allen&quot; von Manfred Behrens - Druck und Druckplatte *Quelle: Der abgebildete Holzschnitt und die hier eingstellte Fotografie davon stammen von Manfred Behrens (&#91;&#91;Benutzer: Kielradio]]) *Fotograf und Hersteller: Manfred Behrens (Benutzer: Kielradio) *Andere Versionen: - *Lizenzstatus: Public Domain &#91;&#91;de:Bild:Holzschnitt Woody Allen.jpg]])</em></li> <li>10 apr 2004 22:54 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Conley.jpg|Conley.jpg]]" <em>(Vanaf engelse wikipedia)</em></li> <li>10 apr 2004 22:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lens_universite.jpg|Lens_universite.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was:&lt;p&gt;Universite d&#39;Artois à Lens en 2000 Prise de vue par mes soins, placée sous licence GNU &#91;&#91;fr:Image:Lens universite.jpg]])</em></li> <li>10 apr 2004 22:46 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Arabië.png|Arabië.png]]" <em>(Versie 2)</em></li> <li>10 apr 2004 22:46 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:ArtemisFromVersailles.png|ArtemisFromVersailles.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Artemsi statue from Versailles. Public domain image from Nordisk familjebok. &#91;&#91;en:Image:ArtemisFromVersailles.png]])</em></li> <li>10 apr 2004 22:40 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Arsenal_fc_old_crest_small.png|Arsenal_fc_old_crest_small.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Arsenal FC&#39;s Old Crest (No longer in use due to lack of copyright control) &#91;&#91;en:Image:arsenal fc old crest small.png]])</em></li> <li>10 apr 2004 22:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Schwarzenegger.jpg|Schwarzenegger.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Arnold schwarzenegger genaric campaign photo. Fair use &#91;&#91;en:Image:schwarzenegger.jpg]])</em></li> <li>10 apr 2004 22:19 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Schoenberg_la_1948.jpg|Schoenberg_la_1948.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Photo of Arnold Schoenberg in Los Angeles, believed to be taken in 1948. Source of photo is the &#91;http&#58;//www.usc.edu/isd/archives/schoenberg Schoenberg Archives at USC]. The archive grants permission to publish this image, provided that the photographer is credited.&#91;http&#58;//www.usc.edu/isd/archives/schoenberg/faqla_as.htm] Photographer: &#91;&#91;Florence Homolka]] &#91;&#91;en:Image:Schoenberg la 1948.jpg]])</em></li> <li>10 apr 2004 22:17 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Arabië.png|Arabië.png]]" <em>(Arabisch schiereiland)</em></li> <li>10 apr 2004 22:14 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Harissa.jpg|Harissa.jpg]]" <em>(Zelfgemaakte foto van Harissa, GNU FDL)</em></li> <li>10 apr 2004 22:05 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Lombardei_in_Italien.png|Lombardei_in_Italien.png]]" <em>(Lombarije in Italië, &#123;&#123;msg:GFDL}} volgens de uploader)</em></li> <li>10 apr 2004 22:03 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ariane.png|Ariane.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Image from &#91;&#91;http&#58;//fr.wikipedia.org/wiki/Image:Ariane.gif]] &#91;&#91;en:Image:Ariane.png]])</em></li> <li>10 apr 2004 21:54 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Manila_dwarf_coconut_palm.jpg|Manila_dwarf_coconut_palm.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Manila dwarf coconut palm from http&#58;//www.ars.usda.gov/is/graphics/photos/&lt;br&gt; &#91;&#91;:Image:Manila dwarf coconut palm thumbnail.jpg&#124;Manila dwarf coconut palm thumbnail]] Image Number K5728-13&lt;br&gt; A Manila dwarf coconut palm on the grounds of the Tropical Agriculture Research Station in Mayaguez, Puerto Rico. Photo by Scott Bauer. &#91;&#91;en:Image:Manila dwarf coconut palm.jpg]])</em></li> <li>10 apr 2004 21:43 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Woodywalk2.jpg|Woodywalk2.jpg]]" <em>(Vanaf Engelse wikipedia)</em></li> <li>10 apr 2004 21:28 [[Gebruiker:Puckly|Puckly]] heeft ge-upload: "[[:Afbeelding:ArabischSchiereiland.JPG|ArabischSchiereiland.JPG]]" <em>(Kuweit veranderd in Koeweit)</em></li> <li>10 apr 2004 21:19 [[Gebruiker:Puckly|Puckly]] heeft ge-upload: "[[:Afbeelding:ArabischSchiereiland.JPG|ArabischSchiereiland.JPG]]" <em>(Elly had deze van de Duitse wiki; ik heb hem een beetje bewerkt)</em></li> <li>10 apr 2004 21:08 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Arabien-gross.jpg|Arabien-gross.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Politische Asien-Karte Copyright 2001-3 Brion L. Vibber http&#58;//leuksman.com/misc/maps.php &#39;&#39;These are primarily intended for use in the Wikipedia free encyclopedia project. Fill in the country names etc. for your target language, size to taste, and use as you wish.&#39;&#39; &#91;&#91;de:Bild:Arabien-gross.jpg]])</em></li> <li>10 apr 2004 20:59 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MeyersRossbach.jpg|MeyersRossbach.jpg]]" <em>(Uit Meyers konversationzlexicon, uitgave 1888, erheblich frei)</em></li> <li>10 apr 2004 20:16 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Johanna.png|Johanna.png]]" <em>(Johanna de Waanzinnige (van Spaanse Wiki))</em></li> <li>10 apr 2004 20:16 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Sicilia-kaart.png|Sicilia-kaart.png]]" <em>(Kopie it: wikipedia)</em></li> <li>10 apr 2004 20:04 [[Gebruiker:Puckly|Puckly]] heeft ge-upload: "[[:Afbeelding:GelderschLandschap.gif|GelderschLandschap.gif]]" <em>(Logo van het Geldersch Landschap afkomstig van hun site)</em></li> <li>10 apr 2004 20:02 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Sicilia-vlag.png|Sicilia-vlag.png]]" <em>(Kopie en: wikipedia)</em></li> <li>10 apr 2004 19:32 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Altea_parochiekerk_maart_2004.jpg|Altea_parochiekerk_maart_2004.jpg]]" <em>(Eigen foto Fruggo (vrijgegeven onder GNU), maart 2004. Parochiekerk in Altea (Spanje).)</em></li> <li>10 apr 2004 19:29 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Liguria-kaart.png|Liguria-kaart.png]]" <em>(Kopie de: wikipedia)</em></li> <li>10 apr 2004 19:28 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Liguria-vlag.png|Liguria-vlag.png]]" <em>(Kopie de: wikipedia)</em></li> <li>10 apr 2004 19:25 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Altea_straatje_maart_2004.jpg|Altea_straatje_maart_2004.jpg]]" <em>(Eigen foto Fruggo (vrijgegeven onder GNU), maart 2004. Straatje in Altea (Spanje).)</em></li> <li>10 apr 2004 19:21 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Beard3.jpg|Beard3.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;A white man with a &#91;&#91;beard]]. Photo by &#91;&#91;User:KF&#124;KF]] &#91;&#91;en:Image:Beard3.jpg]])</em></li> <li>10 apr 2004 19:17 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Alicante_haven_vanaf_Sta_Barbara.jpg|Alicante_haven_vanaf_Sta_Barbara.jpg]]" <em>(Eigen foto Fruggo (vrijgegeven onder GNU), maart 2004. De haven van Alicante gezien vanaf het kasteel van Santa Barbara.)</em></li> <li>10 apr 2004 19:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:R4_1973_klein.jpg|R4_1973_klein.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Renault R4 (Anzeigenmotiv von 1973; gescannt aus stern 10/73 vom 01.03.1973, Seite 89); klein Veröffentlichungsgenehmigung bei Renault angefragt. Bitte solange nicht löschen (Renault sieht sich die Seite an). &#91;&#91;Benutzer:Schattenraum&#124;schattenraum]] 05:31, 14. Jan 2004 (CET) &#91;&#91;de:Bild:R4 1973 klein.jpg]])</em></li> <li>10 apr 2004 19:12 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ch-Babbage.jpg|Ch-Babbage.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Charles Babbage (a better pic) &#91;&#91;en:Image:Ch-Babbage.jpg]])</em></li> <li>10 apr 2004 19:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Sitar-1927.jpg|Sitar-1927.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;http&#58;//memory.loc.gov Chicago Daily News negatives collection, reproduction #: DN-0082981. Courtesy of the Chicago Historical Society. &#123;&#123;msg:fairuse}} Summary: Three-quarter length portrait of Premla Shahane, a Hindu, playing a sitar and looking down, sitting in front of a building on the University of Chicago campus, located in the Hyde Park community area of Chicago, Illinois. (1927) &#91;&#91;en:Image:Sitar-1927.jpg]])</em></li> <li>10 apr 2004 19:06 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Sitar.jpg|Sitar.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;A model sitar &#91;&#91;en:Image:Sitar.jpg]])</em></li> <li>10 apr 2004 19:05 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Schiermonnikoog_2004_twee_vuurtorens_vanaf_Noordzee.jpg|Schiermonnikoog_2004_twee_vuurtorens_vanaf_Noordzee.jpg]]" <em>(Eigen foto Fruggo (vrijgegeven onder GNU). Uitzicht vanaf Noordzee op Schiermonnikoog met de twee vuurtorens. Februari 2004.)</em></li> <li>10 apr 2004 19:02 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Apus_constellation_map.png|Apus_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;This is a celestial map of the constellation Apus, the Bird of Paradise. Copyright &amp;copy; 2003 &#91;&#91;User:Bronger&#124;Torsten Bronger]]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 2003/08/22. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line is the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the equidistant azimuthal projection (the zenith being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 15.7 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Apus constellation map.png]])</em></li> <li>10 apr 2004 19:00 [[Gebruiker:Fruggo|Fruggo]] heeft ge-upload: "[[:Afbeelding:Mandarijn_met_steeltje_en_twee_blaadjes_Spanje.jpg|Mandarijn_met_steeltje_en_twee_blaadjes_Spanje.jpg]]" <em>(Eigen foto Fruggo (vrijgegeven onder GNU). Foto gemaakt maart 2004 in Benidorm. Spaanse mandarijn.)</em></li> <li>10 apr 2004 18:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Flagge_Apuliens.png|Flagge_Apuliens.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Flagge Apuliens &#91;&#91;de:Bild:Flagge Apuliens.png]])</em></li> <li>10 apr 2004 18:51 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Italy_Regions_Apulia_220px.png|Italy_Regions_Apulia_220px.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;&#39;&#39;&#39;Credit:&#39;&#39;&#39; &#91;&#91;user:ahoerstemeier&#124;Ahoerstemeier]] (outline), &#91;&#91;user:snoyes&#124;Sascha Noyes]] (other stuff), 2004 &#39;&#39;&#39;License:&#39;&#39;&#39; &#91;&#91;GFDL]] &#39;&#39;&#39;Info:&#39;&#39;&#39; Map of the regions of Italy with the individual region highlighted. &#91;&#91;en:Image:Italy Regions Apulia 220px.png]])</em></li> <li>10 apr 2004 17:05 [[Gebruiker:Wil Gipman|Wil Gipman]] heeft ge-upload: "[[:Afbeelding:046_Campanile.jpg|046_Campanile.jpg]]" <em>(Eigen foto volgens GNU/FDL Licentie)</em></li> <li>10 apr 2004 17:01 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Delphi_temple-250px.jpg|Delphi_temple-250px.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Photo of temple of Apollo at Delphi, taken October 1992 by Stan Shebs and licensed under GFDL, 250px across &#91;&#91;en:Image:Delphi temple-250px.jpg]])</em></li> <li>10 apr 2004 17:00 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Apollon_lycien_louvre.jpg|Apollon_lycien_louvre.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was:&lt;p&gt;&lt;br&gt; &#39;&#39;&#39;Description :&#39;&#39;&#39; &#91;&#91;Apollon]] lycien&lt;br&gt; &#39;&#39;&#39;Lieu :&#39;&#39;&#39; &#91;&#91;musée du Louvre]], &#91;&#91;Paris]]&lt;br&gt; &#39;&#39;&#39;Licence :&#39;&#39;&#39; &#91;&#91;domaine public]]&lt;br&gt; &#39;&#39;&#39;Source :&#39;&#39;&#39; photo personnelle&lt;br&gt; &#39;&#39;&#39;Date :&#39;&#39;&#39; &#91;&#91;2003]] &#91;&#91;fr:Image:Apollon lycien louvre.jpg]])</em></li> <li>10 apr 2004 16:41 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:ZwevegemLocatie.png|ZwevegemLocatie.png]]" <em>(Anzegemfix)</em></li> <li>10 apr 2004 16:40 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:ZonnebekeLocatie.png|ZonnebekeLocatie.png]]" <em>(Anzegemfix)</em></li> <li>10 apr 2004 16:40 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:MeulebekeLocatie.png|MeulebekeLocatie.png]]" <em>(Anzegemfix)</em></li> <li>10 apr 2004 16:40 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:WingeneLocatie.png|WingeneLocatie.png]]" <em>(Anzegemfix)</em></li> <li>10 apr 2004 16:40 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:TorhoutLocatie.png|TorhoutLocatie.png]]" <em>(Anzegemfix)</em></li> <li>10 apr 2004 16:39 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:PittemLocatie.png|PittemLocatie.png]]" <em>(Anzegemfix)</em></li> <li>10 apr 2004 16:39 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:OostrozebekeLocatie.png|OostrozebekeLocatie.png]]" <em>(Anzegemfix)</em></li> <li>10 apr 2004 15:53 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Wounded_Knee.jpg|Wounded_Knee.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Wounded Knee Fotografie wurde im Sommer 1997 erstellt von &#91;&#91;Benutzer:Napa]]. Das Bild ist unter der &#91;&#91;GNU FDL]] zur weiteren Verwendung freigegeben. &#91;&#91;de:Bild:Wounded Knee.jpg]])</em></li> <li>10 apr 2004 15:50 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Guttatie.jpg|Guttatie.jpg]]" <em>(zelfgemaakte foto; guttatie van eerste ware blad van komkommerplant)</em></li> <li>10 apr 2004 15:35 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:Verzetsmuseum.jpg|Verzetsmuseum.jpg]]" <em>(Verzetsmuseum Zuid-Holland)</em></li> <li>10 apr 2004 15:20 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Laptop.jpg|Laptop.jpg]]" <em>(Mijn eigen slaafje)</em></li> <li>10 apr 2004 14:45 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Garuda.jpg|Garuda.jpg]]" <em>(aanwezig op diverse anderstalige wikipedia&#39;s)</em></li> <li>10 apr 2004 14:17 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Eenhoorn.jpg|Eenhoorn.jpg]]" <em>(van de franse pagina, rechtenvrij: Celle-ci provient du site http&#58;//www.desiderenzia.net/. Elle est libre de droit. )</em></li> <li>10 apr 2004 14:16 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Blad_van_monocotyl_Suikermais.jpg|Blad_van_monocotyl_Suikermais.jpg]]" <em>(zelfgemaakte foto; monocotyl blad, lijnnervig, bladschede als een koker om stengel heen)</em></li> <li>10 apr 2004 13:31 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Transrapid.jpg|Transrapid.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Transrapid auf der Emslandstrecke, eigenes Bild, GNU-FDL &#91;&#91;de:Bild:Transrapid.jpg]])</em></li> <li>10 apr 2004 13:18 [[Gebruiker:Emesbe|Emesbe]] heeft ge-upload: "[[:Afbeelding:Vlag_Aragon.JPG|Vlag_Aragon.JPG]]" <em>(Vlag_Aragon uit WIKI-esperanto)</em></li> <li>10 apr 2004 13:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Kroeze.jpg|Kroeze.jpg]]" <em>(Fritz8 - print)</em></li> <li>10 apr 2004 12:38 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladbeharing_geranium.jpg|Bladbeharing_geranium.jpg]]" <em>(zelfgekaakte foto; bladbeharing van geranium)</em></li> <li>10 apr 2004 12:30 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Sydney_Subway.jpg|Sydney_Subway.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;View of the Sydney monorail from the top. More pictures of Sydney at : http&#58;//www.chmouel.com/geeklog/gallery/show_gallery.php/new_zeland/ &#91;&#91;en:Image:Sydney Subway.jpg]])</em></li> <li>10 apr 2004 12:28 [[Gebruiker:Emesbe|Emesbe]] heeft ge-upload: "[[:Afbeelding:Kaart_Aragon.jpg|Kaart_Aragon.jpg]]" <em>(Kaart_Aragon_Spanje)</em></li> <li>10 apr 2004 11:45 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan3.jpg|Scan3.jpg]]" <em>(Fritz8 - print)</em></li> <li>10 apr 2004 11:20 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bosch.jpg|Bosch.jpg]]" <em>(foto -Dimitri-)</em></li> <li>10 apr 2004 11:05 [[Gebruiker:NeoGeo-x|NeoGeo-x]] heeft ge-upload: "[[:Afbeelding:Wiki-hagelslag.jpg|Wiki-hagelslag.jpg]]" <em>(een eigen afbeelding)</em></li> <li>10 apr 2004 10:42 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Antonbruckner.jpg|Antonbruckner.jpg]]" <em>(Anton Bruckner denkmal, Wenen. Eigen foto &#91;&#91;Gebruiker:Hooft]], verbeterd contrast)</em></li> <li>10 apr 2004 10:39 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:352px-Antonbruckner.jpg|352px-Antonbruckner.jpg]]" <em>(Verbeterde versie van deze foto, Anton Bruckner denkmal, Wenen. Eigen foto van &#91;&#91;Gebruiker:Hooft]])</em></li> <li>10 apr 2004 10:34 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:AntonBruckner.jpeg|AntonBruckner.jpeg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Anton Bruckner (pre-1897 photo) &#91;&#91;en:Image:AntonBruckner.jpeg]])</em></li> <li>10 apr 2004 10:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Saint-exupery.jpg|Saint-exupery.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Antoine Saint-Exupery &#91;&#91;en:Image:Saint-exupery.jpg]])</em></li> <li>10 apr 2004 10:25 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Sb,51-thumb.jpg|Sb,51-thumb.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Antimony sample, small version of &lt;br&gt;&#91;&#91;image:Sb,51.jpg]] The &#91;&#91;User:RTC/element photos&#124;Element Photos]] (both the large and small versions, which are the same photo just scaled differently) are ALL photos I took this summer and anyone can do anything they want with them that is allowed with anything else here. -- &#91;&#91;User:RTC&#124;RTC]] 03:15, 7 Nov 2003 (UTC) &#91;&#91;en:Image:Sb,51-thumb.jpg]])</em></li> <li>10 apr 2004 10:15 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Pillpacketopen.jpg|Pillpacketopen.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Photograph of a half-used blister pack of Levlen®ED &#91;&#91;oral contraceptive pill]]. Photo taken by me. (Pills not mine). Released under &#91;&#91;GFDL]]. Photoshop was used to make the background white. &#91;&#91;User:Tristanb&#124;tb]] 02:51, 19 Jan 2004 (UTC) It&#39;s a bit out of focus, and i used a sharpen filter on it (before it was resized). I used the same camera as for &#91;&#91;vegemite]] and &#91;&#91;flavoured milk]]. &#91;&#91;en:Image:pillpacketopen.jpg]])</em></li> <li>10 apr 2004 10:11 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Autoritratto_di_Antoon_van_Dyck.jpg|Autoritratto_di_Antoon_van_Dyck.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-it. De beschrijving daar was:&lt;p&gt;Antoon van Dyke in un autoritratto &#91;&#91;it:Immagine:Autoritratto di Antoon van Dyck.jpg]])</em></li> <li>10 apr 2004 10:05 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Anthony_Quinn.jpg|Anthony_Quinn.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Picture of Anthony Quinn, actor, taken from U.S. Equal Employment Opportunity Commission (public domain): http&#58;//www.eeoc.gov/abouteeoc/35th/1965-71/educating.html &#91;&#91;en:Image:Anthony Quinn.jpg]])</em></li> <li>10 apr 2004 09:59 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Anklam.jpg|Anklam.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Anklam coat of arms &#91;&#91;en:Image:anklam.jpg]])</em></li> <li>10 apr 2004 09:58 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Karte_anklam_in_deutschland.png|Karte_anklam_in_deutschland.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Karte Anklam in Deutschland &#91;&#91;de:Bild:Karte anklam in deutschland.png]])</em></li> <li>10 apr 2004 09:54 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:AndorralaVella.jpg|AndorralaVella.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was:&lt;p&gt;Andorre-la-Vieille, blason &#91;&#91;fr:Image:AndorralaVella.jpg]])</em></li> <li>10 apr 2004 09:53 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan2.jpg|Scan2.jpg]]" <em>(Fritz8 - print)</em></li> <li>10 apr 2004 09:50 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Andre_Agassi.jpg|Andre_Agassi.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Andre Agassi, tennis player The photo has been taken from the location http&#58;//home.comcast.net/~bartell/usopen/agassi97a.jpg . The tennis photos on the site have been taken by Randy Bartell and reproduced here with his permission. &#91;&#91;en:Image:Andre Agassi.jpg]])</em></li> <li>10 apr 2004 09:50 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Scan2.jpg|Scan2.jpg]]" <em>(Fritz8 - print)</em></li> <li>10 apr 2004 09:45 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Andromeda_constellation_map.png|Andromeda_constellation_map.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;This is a celestial map of the constellation Andromeda. Copyright &amp;copy; 2003 &#91;mailto:bronger@physik.rwth-aachen.de Torsten Bronger]. It was created by &#91;&#91;User:Bronger&#124;Torsten Bronger]] using the program PP3 on 22/02/1003. At &#91;http&#58;//pp3.sourceforge.net PP3&#39;s homepage], you also get the input scripts necessary for re-compiling the map. The yellow dashed lines are constellation boundaries, the red dashed line isx the ecliptic, and the shades of blue show Milky Way areas of different brightness. The map contains all Messier objects, except for colliding ones. The underlying database contains all stars brighter than 6.5. All coordinates refer to equinox 2000.0. The map is calculated with the azimuthal equidistant projection (the azimuth being in the center of the image). The north pole is to the top. The (horizontal) lines of equal declination are drawn for 0&amp;deg;, &amp;plusmn;10&amp;deg;, &amp;plusmn;20&amp;deg; etc. The lines of equal rectascension are drawn for all 24&amp;nbsp;hours. The scale of the map is (approx.) 11.8 pixel per degree at the centre of the bitmap. Towards the rim there is a very slight magnification (and distortion). &#91;&#91;en:Image:Andromeda constellation map.png]])</em></li> <li>10 apr 2004 09:42 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Electronisch_orgel.jpg|Electronisch_orgel.jpg]]" <em>(Mijn eigen orgeltje)</em></li> <li>10 apr 2004 09:36 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Hommeles.jpg|Hommeles.jpg]]" <em>(foto -Dimitri-)</em></li> <li>10 apr 2004 09:16 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Prohibition.jpg|Prohibition.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;DN-0072930, Chicago Daily News negatives collection, Chicago Historical Society. &#91;&#91;en:Image:Prohibition.jpg]])</em></li> <li>10 apr 2004 09:04 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Philippe_IV_espagne.jpg|Philippe_IV_espagne.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was:&lt;p&gt;Philippe IV d&#39;Espagne *licence : domaine public *source : http&#58;//www.artrenewal.org/asp/database/art.asp?aid=132&amp;page=7 *infos : 1644 Oil on canvas 53.15 x 38.58 inches / 135 x 98 cm Frick Collection, New York, USA &#91;&#91;fr:Image:philippe IV espagne.jpg]])</em></li> <li>10 apr 2004 08:57 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Aepyornism.jpg|Aepyornism.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;&#91;&#91;Aepyornis]] skeleton. From &#91;http&#58;//digimorph.org/specimens/Aepyornis_maximus/Aepyornis.phtml digimorph.org]. Original source: &#39;&#39;Quaternary of Madagascar&#39;&#39; by Monnier, &#91;&#91;1913]]. &#123;&#123;msg:PD-US}} &#91;&#91;en:Image:Aepyornism.jpg]])</em></li> <li>10 apr 2004 08:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:CharlesTheBold.jpg|CharlesTheBold.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Charles the Bold, from Cyclopaedia of Universial History, 1885 &#123;&#123;msg:PD}} &#91;&#91;en:Image:CharlesTheBold.jpg]])</em></li> <li>10 apr 2004 08:42 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Lancelot3344.jpg|Lancelot3344.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Lancelot from &#39;&#39;The Book of Knowledge&#39;&#39;, p. 869, Vol. III, The Grolier Society, New York, 1911 &#91;&#91;en:Image:lancelot3344.jpg]])</em></li> <li>10 apr 2004 08:34 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:LocatieMeinweg.png|LocatieMeinweg.png]]" <em>(Locatie Meinweg op grond van kaartje Mtcv Roerdalen, &#123;&#123;msg:GFDL}})</em></li> <li>10 apr 2004 08:20 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Simbolo-croce-rossa.jpg|Simbolo-croce-rossa.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-it. De beschrijving daar was:&lt;p&gt;Croce Rossa Simbolo &#91;&#91;it:Immagine:simbolo-croce-rossa.jpg]])</em></li> <li>10 apr 2004 08:13 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Edvard_Munch.jpg|Edvard_Munch.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-no. De beschrijving daar was:&lt;p&gt;Bilde av &#91;&#91;Edvard Munch]] fra en: &quot;12:22, 2 May 2003 Egil&quot; &#91;&#91;no:Bilde:Edvard Munch.jpg]])</em></li> <li>10 apr 2004 08:11 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Jonkman.jpg|Jonkman.jpg]]" <em>(foto -Dimitri-)</em></li> <li>10 apr 2004 07:09 [[Gebruiker:Nijman|Nijman]] heeft ge-upload: "[[:Afbeelding:Hejnal.mp3|Hejnal.mp3]]" <em>(Hejanal, download vanaf http&#58;//www.krakow.pl/kamera/duzy.html, het trompetgeluid dat elk uur vanaf Mariakerk in Krakau gespeeld wordt)</em></li> <li>10 apr 2004 05:33 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Scheepvaart.JPG|Scheepvaart.JPG]]" <em>(Eigen foto)</em></li> <li>10 apr 2004 00:51 [[Gebruiker:DomienH|DomienH]] heeft ge-upload: "[[:Afbeelding:Hof64003b.jpg|Hof64003b.jpg]]" <em>(Willem Hofhuizen, Raadsel vrouw 1964, auteursrechten Domien Hofhuizen.)</em></li> <li>10 apr 2004 00:20 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SpaanseGitaar.jpg|SpaanseGitaar.jpg]]" <em>(Gitaar van wiki-fr (lijkt GFDL))</em></li> <li>9 apr 2004 22:40 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:GeldersePoort6.JPG|GeldersePoort6.JPG]]" <em>(Eigen foto)</em></li> <li>9 apr 2004 22:36 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SchleiferTeken.jpg|SchleiferTeken.jpg]]" <em>(Schleiferteken (eigen brouwsel) GFDL nu zonder onnodig wit)</em></li> <li>9 apr 2004 22:34 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SchleiferTeken.jpg|SchleiferTeken.jpg]]" <em>(Schleiferteken (eingen brouwsel) GFDL)</em></li> <li>9 apr 2004 22:29 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:GeldersePoort4.JPG|GeldersePoort4.JPG]]" <em>(Eigen foto)</em></li> <li>9 apr 2004 22:28 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:GeldersePoort3.JPG|GeldersePoort3.JPG]]" <em>(Eigen foto)</em></li> <li>9 apr 2004 22:27 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:GeldersePoort2.JPG|GeldersePoort2.JPG]]" <em>(Eigen foto)</em></li> <li>9 apr 2004 22:25 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:GeldersePoort1.JPG|GeldersePoort1.JPG]]" <em>(Eigen foto)</em></li> <li>9 apr 2004 22:14 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:Gheraert_Leeu.jpg|Gheraert_Leeu.jpg]]" <em>(Beeld van drukker Gheraert leeu, eigen fot, gebruik vrij)</em></li> <li>9 apr 2004 22:11 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:KleinKlauwOtter.JPG|KleinKlauwOtter.JPG]]" <em>(Eigen foto)</em></li> <li>9 apr 2004 22:10 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:Gheraert_Leeu.jpg|Gheraert_Leeu.jpg]]" <em>(Beeld van Geraert Leeu, boekdrukker in Gouda, eigen foto, gebruik vrij)</em></li> <li>9 apr 2004 22:07 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:PDHerten.JPG|PDHerten.JPG]]" <em>(Eigen foto)</em></li> <li>9 apr 2004 22:05 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:WildeZwaan.JPG|WildeZwaan.JPG]]" <em>(Eigen foto)</em></li> <li>9 apr 2004 22:02 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:SegnoTeken.jpg|SegnoTeken.jpg]]" <em>(Segno-teken (eigen maaksel) GFDL)</em></li> <li>9 apr 2004 22:00 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Zwijnen.JPG|Zwijnen.JPG]]" <em>(Eigen foto)</em></li> <li>9 apr 2004 21:57 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:CodaTeken.jpg|CodaTeken.jpg]]" <em>(Coda-teken (eigen maaksel) GFDL (nu als jpg))</em></li> <li>9 apr 2004 21:55 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:CodaTeken.png|CodaTeken.png]]" <em>(Coda-teken (eigen maaksel) GFDL)</em></li> <li>9 apr 2004 21:54 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Raapzaad-overz-kl.JPG|Raapzaad-overz-kl.JPG]]" <em>(eigen foto, eind maart in zuiderpark den haag, hierbij onder gnu/fdl gebracht)</em></li> <li>9 apr 2004 21:53 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Raapzaad-overz-hr.jpg|Raapzaad-overz-hr.jpg]]" <em>(eigen foto, eind maart in zuiderpark den haag, hierbij onder gnu/fdl gebracht)</em></li> <li>9 apr 2004 21:52 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Raapzaad-CloseUp-kl.JPG|Raapzaad-CloseUp-kl.JPG]]" <em>(eigen foto, eind maart in zoetermeer, hierbij onder gnu/fdl gebracht)</em></li> <li>9 apr 2004 21:52 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Raapzaad-CloseUp-hr.jpg|Raapzaad-CloseUp-hr.jpg]]" <em>(eigen foto, eind maart in zoetermeer, hierbij onder gnu/fdl gebracht)</em></li> <li>9 apr 2004 21:50 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Raapzaad-bloem-kl.JPG|Raapzaad-bloem-kl.JPG]]" <em>(eigen foto, eind maart in zoetermeer, hierbij onder gnu/fdl gebracht)</em></li> <li>9 apr 2004 21:50 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Raapzaad-bloem-hr.jpg|Raapzaad-bloem-hr.jpg]]" <em>(eigen foto, eind maart in zoetermeer, hierbij onder gnu/fdl gebracht)</em></li> <li>9 apr 2004 21:49 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Raapzaad-blad-kl.JPG|Raapzaad-blad-kl.JPG]]" <em>(eigen foto, eind maart in zoetermeer, hierbij onder gnu/fdl gebracht)</em></li> <li>9 apr 2004 21:47 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Raapzaad-blad-hr.jpg|Raapzaad-blad-hr.jpg]]" <em>(eigen foto, eind maart in zoetermeer, onder gnu/fdl)</em></li> <li>9 apr 2004 21:45 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Rivierduin.JPG|Rivierduin.JPG]]" <em>(Eigen foto)</em></li> <li>9 apr 2004 21:12 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:LogoOVB.jpg|LogoOVB.jpg]]" <em>(Met toestemming OVB)</em></li> <li>9 apr 2004 21:09 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:GallowayMetKalf.JPG|GallowayMetKalf.JPG]]" <em>(eigen foto)</em></li> <li>9 apr 2004 20:48 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Beardsley.png|Beardsley.png]]" <em>(tekening van beardsley: peacock skirt, van engelse pagina)</em></li> <li>9 apr 2004 20:15 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Cadran-solaire-st-remy-de-provence.jpg|Cadran-solaire-st-remy-de-provence.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was:&lt;p&gt;&#91;&#91;Cadran solaire]] à &#91;&#91;Saint-Rémy-de-Provence]] Auteur: &#91;&#91;Utilisateur:Greudin&#124;Greudin]], &#91;&#91;2002]] Licence: &#91;&#91;Domaine public]] &#123;&#123;msg:DomainePublic}} &#91;&#91;fr:Image:cadran-solaire-st-remy-de-provence.jpg]])</em></li> <li>9 apr 2004 17:13 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:AntiochosIITheos.jpg|AntiochosIITheos.jpg]]" <em>(Portret van Antiochis II Theos, koning der Seleukiden, op een tetradrachme uit Antiochië, 261-246 v. Chr.)</em></li> <li>9 apr 2004 16:26 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Lilith.jpg|Lilith.jpg]]" <em>(lilith door john collier van engelse pagina)</em></li> <li>9 apr 2004 15:40 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Adameva.jpg|Adameva.jpg]]" <em>(schikderij van albrecht durer uit 1507)</em></li> <li>9 apr 2004 14:22 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Audi_a8.png|Audi_a8.png]]" <em>(PNG gehercomprimeerd: van 19K naar 4.8K (zonder enige kwaliteitsverlies))</em></li> <li>9 apr 2004 14:09 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Audi_a8.png|Audi_a8.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Audi A8. PD aus einer Atari-Sammlung Ende der 80er. als +.gif-Datei wäre sie nur 6 kB groß gewesen &#91;&#91;de:Bild:Audi a8.png]])</em></li> <li>9 apr 2004 13:55 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Shapur_I.jpg|Shapur_I.jpg]]" <em>(Shapur I, van Duitse Wikipedia Schapur I.)</em></li> <li>9 apr 2004 13:43 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Mh_rhb_bernina.jpeg|Mh_rhb_bernina.jpeg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Ein Zug der &#91;&#91;Rhätische Bahn&#124;Rhätischen Bahn]] nahe dem &#91;&#91;Berninapass]]. ---- &#39;&#39;Dieses Foto wurde von &#91;&#91;Benutzer:LosHawlos&#124;Martin Hawlisch]] fotografiert und unter der &#91;&#91;GFDL]] veröffentlicht.&#39;&#39; ---- &#91;&#91;de:Bild:Mh rhb bernina.jpeg]])</em></li> <li>9 apr 2004 13:41 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Egypt_Asouan.jpg|Egypt_Asouan.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was:&lt;p&gt;Description de l&#39;image : Egypte Asouan&lt;br&gt; Source : &#91;&#91;Aoineko]]&lt;br&gt; Statut : &#91;&#91;GFDL]]&lt;br&gt; &#91;&#91;fr:Image:Egypt Asouan.jpg]])</em></li> <li>9 apr 2004 13:39 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Cleo.needle.200pix.jpg|Cleo.needle.200pix.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Cleopatra&#39;s Needle, an Egyptian obelisk on the banks of the River Thames in London, England.&lt;br&gt; Taken by Adrian Pingstone and released to the public domain. &#123;&#123;msg:PD}} &#91;&#91;en:Image:cleo.needle.200pix.jpg]])</em></li> <li>9 apr 2004 13:36 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Mh_rhb_disentis.jpeg|Mh_rhb_disentis.jpeg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Ein &#91;&#91;Glacier Express]] der &#91;&#91;Rhätische Bahn&#124;Rhätischen Bahn]] in &#91;&#91;Disentis]]. ---- &#39;&#39;Dieses Foto wurde von &#91;&#91;Benutzer:LosHawlos&#124;Martin Hawlisch]] fotografiert und unter der &#91;&#91;GFDL]] veröffentlicht.&#39;&#39; ---- &#91;&#91;de:Bild:Mh rhb disentis.jpeg]])</em></li> <li>9 apr 2004 13:31 [[Gebruiker:BolksBot|BolksBot]] heeft ge-upload: "[[:Afbeelding:Mh_RhB_arosabahn_in_chur.jpeg|Mh_RhB_arosabahn_in_chur.jpeg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Ein Zur der &#91;&#91;Rhätische Bahn&#124;Rhätischen Bahn]] nach &#91;&#91;Arosa]] bei der engen Ortsdurchfahrt in &#91;&#91;Chur]]. ---- &#39;&#39;Dieses Foto wurde von &#91;&#91;Benutzer:LosHawlos&#124;Martin Hawlisch]] fotografiert und unter der &#91;&#91;GFDL]] veröffentlicht.&#39;&#39; ---- &#91;&#91;de:Bild:Mh RhB arosabahn in chur.jpeg]])</em></li> <li>9 apr 2004 13:21 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Tuileries.jpg|Tuileries.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Tuileries &#91;&#91;en:Image:Tuileries.jpg]])</em></li> <li>9 apr 2004 13:18 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Champs_elysees.700px.jpg|Champs_elysees.700px.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Looking east along the Champs Elysees towards Place de la Concorde from the Arc de Triomphe. Photograph taken by Michael Reeve, 29 January 2004. &#91;&#91;en:Image:Champs elysees.700px.jpg]])</em></li> <li>9 apr 2004 13:09 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Sa97_miguel_rhythm.jpg|Sa97_miguel_rhythm.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;mariachi &#91;&#91;en:Image:Sa97 miguel rhythm.jpg]])</em></li> <li>9 apr 2004 12:33 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Trademark-symbool.png|Trademark-symbool.png]]" <em>(Trademark symbool - copyrightinfo van het font schrijf ik er zo direct bij)</em></li> <li>9 apr 2004 12:15 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Hendriks.jpg|Hendriks.jpg]]" <em>(foto -Dimitri-)</em></li> <li>9 apr 2004 11:26 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Fongers.jpg|Fongers.jpg]]" <em>(foto -Dimitri-)</em></li> <li>9 apr 2004 10:54 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:80486.jpg|80486.jpg]]" <em>(Intel 80486SX/16)</em></li> <li>9 apr 2004 10:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Demie.jpg|Demie.jpg]]" <em>(foto -Dimitri-)</em></li> <li>9 apr 2004 08:08 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Compost.jpg|Compost.jpg]]" <em>(Compost - foto van de Engelstalige wiki)</em></li> <li>9 apr 2004 06:44 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Cambodiaarms4.png|Cambodiaarms4.png]]" <em>(En: wikipedia)</em></li> <li>9 apr 2004 04:34 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Azeriarms2.PNG|Azeriarms2.PNG]]"</li> <li>9 apr 2004 00:51 [[Gebruiker:BenTels|BenTels]] heeft ge-upload: "[[:Afbeelding:WapenEindhoven.png|WapenEindhoven.png]]" <em>(Het gemeentewapen van Eindhoven; vele eeuwen ouder dan eender welke auteursrechtenwetgeving.)</em></li> <li>8 apr 2004 22:40 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Akhenaton.jpg|Akhenaton.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;pharoah akhenaton uncopyrighted image from www.tmgnow.com/repository/ cosmology/akhnaton.html &#91;&#91;en:Image:akhenaton.jpg]])</em></li> <li>8 apr 2004 22:31 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Oilfield.jpg|Oilfield.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Oilfields, California, 1938 Photographer: Dorothea Lange Public domain image from &#91;http&#58;//memory.loc.gov/cgi-bin/query/D?fsaall:1:./temp/~ammem_Un8W:: Library of Congress] &#91;&#91;en:Image:oilfield.jpg]])</em></li> <li>8 apr 2004 22:30 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Oil_well3419.jpg|Oil_well3419.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Oil Well near Sarnia, Ontario &#91;&#91;en:Image:Oil well3419.jpg]])</em></li> <li>8 apr 2004 22:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Ac.redribbon.jpg|Ac.redribbon.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Red Ribbon Better quality image can be found at &#91;&#91;ES:Imagen:Lazo_rojo.jpg]] &#91;&#91;en:Image:ac.redribbon.jpg]])</em></li> <li>8 apr 2004 22:09 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Television_remote_control.jpg|Television_remote_control.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;&#39;&#39;&#39;General info&#39;&#39;&#39;: &#91;&#91;Television]] &#91;&#91;remote control]]&lt;br&gt; &#39;&#39;&#39;Size&#39;&#39;&#39;: 6769 bytes&lt;br&gt; &#39;&#39;&#39;Dimension&#39;&#39;&#39;: 200x159 pixels&lt;br&gt; &#39;&#39;&#39;Source&#39;&#39;&#39;: Image taken by &#91;&#91;User:Dori&#124;Dori]]&lt;br&gt; &#39;&#39;&#39;License&#39;&#39;&#39;: &#91;&#91;GFDL]]&lt;br&gt; &#91;&#91;en:Image:Television remote control.jpg]])</em></li> <li>8 apr 2004 22:06 [[Gebruiker:Fransvannes|Fransvannes]] heeft ge-upload: "[[:Afbeelding:Paris.notre.dame.250pix.jpg|Paris.notre.dame.250pix.jpg]]" <em>(Bron: Wikipedia EN, foto: Adrian Pingstone, juli 2001)</em></li> <li>8 apr 2004 22:05 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Aerogel.jpg|Aerogel.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Aerogel (Public domain image from NASA: http&#58;//stardust.jpl.nasa.gov/photo/aerogel.html) &#91;&#91;en:Image:aerogel.jpg]])</em></li> <li>8 apr 2004 21:27 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Agamemnon.jpg|Agamemnon.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;copied from http&#58;//ouray.cudenver.edu/~cwwhitti/root/four.html &#123;&#123;msg:fairuse}} &#91;&#91;en:Image:Agamemnon.jpg]])</em></li> <li>8 apr 2004 21:23 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Aerosmith.jpg|Aerosmith.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Aerosmith performs on the National Mall, public domain image from navy.mil. Original: &#91;http&#58;//www.news.navy.mil/view_single.asp?id=9357]. &#91;&#91;en:Image:Aerosmith.jpg]])</em></li> <li>8 apr 2004 21:14 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Accordion.png|Accordion.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;&#91;&#91;Accordion]], from &#91;&#91;Nordisk familjebok]]. Image in &#91;&#91;public domain]]. &#91;&#91;en:Image:Accordion.png]])</em></li> <li>8 apr 2004 21:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:BobHopegettingOsca.jpg|BobHopegettingOsca.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;public domain US gov photo from NARA. Bob Hope receiving an Oscar. &#91;&#91;en:Image:BobHopegettingOsca.jpg]])</em></li> <li>8 apr 2004 21:07 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Oscars.jpg|Oscars.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Oscars collage, (c) AMPAS, marked as such on pic. Fair use. You &#39;&#39;SURE&#39;&#39; about the fair use in this image? &#91;&#91;en:Image:oscars.jpg]])</em></li> <li>8 apr 2004 20:55 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Polwanderung.jpg|Polwanderung.jpg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-de. De beschrijving daar was:&lt;p&gt;Wanderung des magn. Nordpols Bild Polarmeer (aus &#91;&#91;Nordpolarmeer]]) mit einigen Daten aus http&#58;//www.physik.uni-muenchen.de/didaktik/U_materialien/leifiphysik/web_ph10/umwelt-technik/08erdfeld/erdfeld.htm &#91;&#91;Benutzer:Hubi&#124;Hubi]] 21:38, 15. Nov 2003 (CET) &#91;&#91;de:Bild:Polwanderung.jpg]])</em></li> <li>8 apr 2004 20:53 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:RM10C03B.png|RM10C03B.png]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-fr. De beschrijving daar was:&lt;p&gt;géomagnétisme &#91;&#91;fr:Image:RM10C03B.png]])</em></li> <li>8 apr 2004 20:26 [[Gebruiker:RobotE|RobotE]] heeft ge-upload: "[[:Afbeelding:Avocado.jpeg|Avocado.jpeg]]" <em>(Afbeelding gekopieerd vanaf Wikipedia-en. De beschrijving daar was:&lt;p&gt;Avocado Modified from image at http&#58;//www.nass.usda.gov/fl/apfp.htm &#91;&#91;en:Image:Avocado.jpeg]])</em></li> <li>8 apr 2004 20:08 [[Gebruiker:Wouterhagens|Wouterhagens]] heeft ge-upload: "[[:Afbeelding:TDisocyanaat.gif|TDisocyanaat.gif]]" <em>(formule TDI (Wouter Hagens))</em></li> <li>8 apr 2004 20:05 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Aardbei_Karina.jpg|Aardbei_Karina.jpg]]" <em>(zelfgemaakte foto; vruchten van &#39;Karina&#39;)</em></li> <li>8 apr 2004 19:57 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Aardbei_uitlopers_Korona.jpg|Aardbei_uitlopers_Korona.jpg]]" <em>(zelfgemaakte foto; uitlopers van aardbei)</em></li> <li>8 apr 2004 19:52 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Aardbei-bloemcloseup.jpg|Aardbei-bloemcloseup.jpg]]" <em>(zelfgemaakte foto; close-up van aardbeibloem)</em></li> <li>8 apr 2004 19:51 [[Gebruiker:Robk|Robk]] heeft ge-upload: "[[:Afbeelding:Wapen_Lesotho.png|Wapen_Lesotho.png]]" <em>((en-wiki))</em></li> <li>8 apr 2004 19:44 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Aardbei_plant.jpg|Aardbei_plant.jpg]]" <em>(zelfgemaakte foto; aardbeiplant in bloei)</em></li> <li>8 apr 2004 19:14 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:PontEemdijk.JPG|PontEemdijk.JPG]]" <em>(Eigen foto)</em></li> <li>8 apr 2004 17:50 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Duerre.jpg|Duerre.jpg]]" <em>(de: wikipedia)</em></li> <li>8 apr 2004 16:46 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:LocatieOnstwedde.png|LocatieOnstwedde.png]]" <em>(Locatie Onstwedde in de gemeente Stadskanaal op basis van van kaart van mtcv &#123;&#123;msg:FDL}})</em></li> <li>8 apr 2004 16:03 [[Gebruiker:Falcongj|Falcongj]] heeft ge-upload: "[[:Afbeelding:KPN_Hoofdkantoor.JPG|KPN_Hoofdkantoor.JPG]]" <em>(KPN Hoofdkantoor Den Haag. Foto gemaakt door Falcongj en vrijgegeven voor GNU/FDL)</em></li> <li>8 apr 2004 15:02 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:SDR_SDRAM.jpg|SDR_SDRAM.jpg]]" <em>(&quot;There are no usage restrictions for this photo.&quot; - http&#58;//www.sxc.hu/browse.phtml?f=view&amp;id=109574)</em></li> <li>8 apr 2004 14:38 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:PCI_sloten_op_een_moederbord.jpg|PCI_sloten_op_een_moederbord.jpg]]" <em>(PCI sloten op een moederbord - http&#58;//www.sxc.hu/browse.phtml?f=view&amp;id=103914)</em></li> <li>8 apr 2004 13:23 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:LocatieTerWupping.png|LocatieTerWupping.png]]" <em>(Locatie ter Wupping, bewerkt kaartje van mtcv &#123;&#123;msg:GFDL}})</em></li> <li>8 apr 2004 12:35 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Harde-schijf-open-2.5inch.jpg|Harde-schijf-open-2.5inch.jpg]]" <em>(Een 2.5inch geopende harde schijf van: http&#58;//www.sxc.hu/browse.phtml?f=view&amp;id=97614 - &quot;There are no usage restrictions for this photo.&quot; - &quot;© 2000-2004 Dream Interactive. All rights reserved. &quot;)</em></li> <li>8 apr 2004 12:27 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Foot-bones.jpg|Foot-bones.jpg]]" <em>(voetbeenderen van wiki-en vrijgegeven onder GFDL)</em></li> <li>8 apr 2004 10:33 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Amsterdam.jpg|Amsterdam.jpg]]" <em>(Eerdere versie hersteld)</em></li> <li>8 apr 2004 09:39 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Borm.jpg|Borm.jpg]]" <em>(foto -Dimitri-)</em></li> <li>8 apr 2004 09:01 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Boersma.jpg|Boersma.jpg]]" <em>(foto -Dimitri-)</em></li> <li>8 apr 2004 08:21 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Blees.jpg|Blees.jpg]]" <em>(foto -Dimitri-)</em></li> <li>8 apr 2004 06:31 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Blad_dwarsdoorsnede.jpg|Blad_dwarsdoorsnede.jpg]]" <em>(eigen tekening; dwarsdoorsnede standaardblad)</em></li> <li>8 apr 2004 06:24 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladdoorsnede.jpg|Bladdoorsnede.jpg]]" <em>(eigen tekening; dwars doorsnede standaardblad)</em></li> <li>8 apr 2004 06:14 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladdoorsnede.jpg|Bladdoorsnede.jpg]]" <em>(eigen tekening; dwarsdoorsnede van een standaard blad)</em></li> <li>8 apr 2004 00:29 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:JerseyNASAeo.jpg|JerseyNASAeo.jpg]]" <em>(Afbeelding gekopieerd vanaf de en Wikipedia. De beschrijving daar was:&lt;p&gt;This image was acquired on September 23, 2000, by the Advanced Spaceborne Thermal Emission and Reflection Radiometer (ASTER) on NASAÂ’s Terra satellite. ASTER is one of five Earth-observing instruments launched December 18, 1999, on NASAÂ’s Terra satellite. The instrument was built by JapanÂ’s Ministry of Economy, Trade and Industry.&lt;br&gt; Image courtesy NASA/GSFC/METI/ERSDAC/JAROS, and U.S./Japan ASTER Science Team SOURCE: &lt;br&gt; http&#58;//earthobservatory.nasa.gov/Newsroom/NewImages/images.php3?img_id=10809 &lt;br&gt; &lt;i&gt;Ââ€The purpose of NASA&#39;s Earth Observatory is to provide a freely-accessible publication on the Internet where the public can obtain new satellite imagery and scientific information about our home planet. The focus is on Earth&#39;s climate and environmental change. In particular, we hope our site is useful to public media and educators. Any and all materials published on the Earth Observatory are freely available for re-publication or re-use, except where copyright is indicated. We ask that NASA&#39;s Earth Observatory be given credit for its original materials.Ââ€&lt;/i&gt; Picture prepared for Wikipedia by Adrian Pingstone in November 2003. &#91;&#91;en:Image:Jersey.arp.750pix.jpg]])</em></li> <li>8 apr 2004 00:28 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Jersey_vlag.png|Jersey_vlag.png]]" <em>(Afbeelding gekopieerd vanaf de en Wikipedia. De beschrijving daar was:&lt;p&gt;Medium flag of &#91;&#91;Jersey]] Image originally derived from the &#91;&#91;public domain]] flags of the &#91;&#91;CIA World Factbook]]. Most of the flags have had their colours improved and many have been resized to the proper ratios. For a complete list of Wikipedia flags, see &#91;&#91;List of flags]]. &#91;&#91;en:Image:Jersey flag medium.png]])</em></li> <li>7 apr 2004 23:40 [[Gebruiker:Head|Head]] heeft ge-upload: "[[:Afbeelding:Kaart_Düsseldorf.png|Kaart_Düsseldorf.png]]" <em>(This image was copied from the de Wikipedia. The original description was: Karte Düsseldorf in Deutschland Quelle: OpenGeoDB &#91;http&#58;//www.opengeodb.de] GFDL &#91;&#91;de:Bild:Karte duesseldorf in deutschland.png]])</em></li> <li>7 apr 2004 23:40 [[Gebruiker:Head|Head]] heeft ge-upload: "[[:Afbeelding:Wapen_Düsseldorf.jpg|Wapen_Düsseldorf.jpg]]" <em>(This image was copied from the de Wikipedia. The original description was: Wappen von Düsseldorf &#91;&#91;de:Bild:Dusseldo.jpg]])</em></li> <li>7 apr 2004 23:37 [[Gebruiker:Head|Head]] heeft ge-upload: "[[:Afbeelding:Wapen_Düsseldorf.jpg|Wapen_Düsseldorf.jpg]]" <em>(This image was copied from the de Wikipedia. The original description was:&lt;br&gt;Wappen von Düsseldorf &#91;&#91;de:Bild:Dusseldo.jpg]])</em></li> <li>7 apr 2004 21:51 [[Gebruiker:Cogito|Cogito]] heeft ge-upload: "[[:Afbeelding:Cogito.jpg|Cogito.jpg]]" <em>(cogitologo)</em></li> <li>7 apr 2004 21:43 [[Gebruiker:Cogito|Cogito]] heeft ge-upload: "[[:Afbeelding:Cogito.png|Cogito.png]]" <em>(cogitologo)</em></li> <li>7 apr 2004 19:41 [[Gebruiker:Wouterhagens|Wouterhagens]] heeft ge-upload: "[[:Afbeelding:Golfveld.jpg|Golfveld.jpg]]" <em>(golfveld (foto Wouter Hagens))</em></li> <li>7 apr 2004 18:19 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:LewisCarroll.jpg|LewisCarroll.jpg]]" <em>(Afbeelding gekopieerd vanaf de en Wikipedia. De beschrijving daar was:&lt;p&gt;&#39;&#39;Credit: Library of Congress&#39;&#39; &#91;&#91;en:Image:LewisCarroll.jpg]])</em></li> <li>7 apr 2004 15:55 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:LewisCarroll.jpg|LewisCarroll.jpg]]" <em>(Lewis Carroll. Bron: Library of Congress.&lt;p&gt;&#123;&#123;msg:PD}})</em></li> <li>7 apr 2004 15:27 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:SchiedamMolens1981.jpg|SchiedamMolens1981.jpg]]" <em>(Twee van de vijf Schiedamse molens - eigen foto)</em></li> <li>7 apr 2004 14:35 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Nicolaas_1.JPG|Nicolaas_1.JPG]]" <em>(Eigen foto)</em></li> <li>7 apr 2004 14:33 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Church_on_spilled_blood.JPG|Church_on_spilled_blood.JPG]]" <em>(Eigen foto)</em></li> <li>7 apr 2004 14:19 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:KoepelHermitage.JPG|KoepelHermitage.JPG]]" <em>(Eigen foto)</em></li> <li>7 apr 2004 13:45 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Isaac_kathedraal.JPG|Isaac_kathedraal.JPG]]" <em>(Eigen foto)</em></li> <li>7 apr 2004 13:30 [[Gebruiker:Evanherk|Evanherk]] heeft ge-upload: "[[:Afbeelding:Paperclipklein.jpg|Paperclipklein.jpg]]" <em>(Eigen foto e van herk 2004)</em></li> <li>7 apr 2004 13:17 [[Gebruiker:Dick Bos|Dick Bos]] heeft ge-upload: "[[:Afbeelding:VinkStamp.jpg|VinkStamp.jpg]]" <em>(Vink (&#39;&#39;Fringilla coelebs&#39;&#39;))</em></li> <li>7 apr 2004 13:06 [[Gebruiker:Evanherk|Evanherk]] heeft ge-upload: "[[:Afbeelding:Punaiseklein.jpg|Punaiseklein.jpg]]" <em>(Eigen foto e van herk 2004)</em></li> <li>7 apr 2004 12:32 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Harrynelsonpillsbury.jpg|Harrynelsonpillsbury.jpg]]" <em>(foto van voor 1924)</em></li> <li>7 apr 2004 12:24 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:LogoHenegouwen.jpg|LogoHenegouwen.jpg]]" <em>(Met toestemming provincie Henegouwen)</em></li> <li>7 apr 2004 12:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Wilhelmsteinitz.jpg|Wilhelmsteinitz.jpg]]" <em>(foto van voor 1924)</em></li> <li>7 apr 2004 12:22 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:WapenHenegouwen.jpg|WapenHenegouwen.jpg]]" <em>(Met toestemming provincie Henegouwen)</em></li> <li>7 apr 2004 12:10 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Simonwinawer.jpg|Simonwinawer.jpg]]" <em>(foto&#39;s van voor 1924 zijn vrij)</em></li> <li>7 apr 2004 11:16 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:IJsland.jpg|IJsland.jpg]]" <em>(Fritz8 - print)</em></li> <li>7 apr 2004 09:24 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bosboom.jpg|Bosboom.jpg]]" <em>(foto -Dimitri-)</em></li> <li>7 apr 2004 07:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Cochrane.jpg|Cochrane.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 20:33 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Pantheon.jpg|Pantheon.jpg]]" <em>(van it: wikipedia)</em></li> <li>6 apr 2004 20:12 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:180px-Priapus.jpg|180px-Priapus.jpg]]" <em>(Priapus (van de Engelse Wiki))</em></li> <li>6 apr 2004 20:12 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Priapus.jpg|Priapus.jpg]]" <em>(Priapus (van de Engelse Wiki))</em></li> <li>6 apr 2004 19:51 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Rietland.JPG|Rietland.JPG]]" <em>(Eigen foto)</em></li> <li>6 apr 2004 19:26 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:HansEichel.jpg|HansEichel.jpg]]" <em>(vervangen door een grotere foto)</em></li> <li>6 apr 2004 19:24 [[Gebruiker:Gamekeeper|Gamekeeper]] heeft ge-upload: "[[:Afbeelding:Paintball.jpg|Paintball.jpg]]" <em>(newpaintball.com)</em></li> <li>6 apr 2004 18:55 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test vanwege problemen met bot afbeeldings-upload. De Ierse popzanger en activist Bono (Paul David Hewson). Tijdens een gesprek met Horst K&amp;#246;hler, Praag, 2000. Origineel van &#91;http&#58;//www.imf.org/external/photo/showall.asp?d=9%2F25%2F2000&amp;g=12 IMF], gecropt.&lt;p&gt;&#123;&#123;msg:PD}})</em></li> <li>6 apr 2004 18:43 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Bono.jpg|Bono.jpg]]" <em>(verkeerde foto ge-upload)</em></li> <li>6 apr 2004 17:02 [[Gebruiker:Geus|Geus]] heeft ge-upload: "[[:Afbeelding:Tetrahydrocannabinol.png|Tetrahydrocannabinol.png]]" <em>(van engelse wiki gepikt)</em></li> <li>6 apr 2004 15:09 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Hoeksema.jpg|Hoeksema.jpg]]" <em>(foto -Dimitri-)</em></li> <li>6 apr 2004 14:30 [[Gebruiker:Meursault2004|Meursault2004]] heeft ge-upload: "[[:Afbeelding:FrontUBofHeid.jpg|FrontUBofHeid.jpg]]" <em>(Eigen foto)</em></li> <li>6 apr 2004 13:48 [[Gebruiker:Fransvannes|Fransvannes]] heeft ge-upload: "[[:Afbeelding:300px-Brasov_Piata_Sfatului.jpg|300px-Brasov_Piata_Sfatului.jpg]]" <em>(marktplein van Brasov (bron: Wikipedia DE))</em></li> <li>6 apr 2004 13:31 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladinsnijdingen.png|Bladinsnijdingen.png]]" <em>((Auteur : Guillaume Bokiau overgenomen van Franse Wikipedia))</em></li> <li>6 apr 2004 13:21 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladranden.png|Bladranden.png]]" <em>(Auteur : Guillaume Bokiau overgenomen van Franse Wikipedia)</em></li> <li>6 apr 2004 11:23 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:OV-autoriteiten2004.png|OV-autoriteiten2004.png]]" <em>(zat nog een klein foutje in)</em></li> <li>6 apr 2004 11:19 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:OV-autoriteiten2004.png|OV-autoriteiten2004.png]]" <em>(BRU-gebied aangepast)</em></li> <li>6 apr 2004 11:05 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:BRU.png|BRU.png]]" <em>(Kleurprobleem opgelost)</em></li> <li>6 apr 2004 11:04 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Kaderwetgebieden.png|Kaderwetgebieden.png]]" <em>(aangepast (BRU-gebied))</em></li> <li>6 apr 2004 10:52 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:BRU.png|BRU.png]]" <em>(Eerdere versie hersteld)</em></li> <li>6 apr 2004 10:51 [[Gebruiker:Waerth|Waerth]] heeft ge-upload: "[[:Afbeelding:BRU.png|BRU.png]]" <em>(Eerdere versie hersteld)</em></li> <li>6 apr 2004 10:48 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:BRU.png|BRU.png]]" <em>(23 &gt; 10 gemeenten)</em></li> <li>6 apr 2004 10:35 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Winkel.jpg|Winkel.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 10:31 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Ticulat.jpg|Ticulat.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 10:03 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Sorensen.jpg|Sorensen.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 09:59 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Duhm.jpg|Duhm.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 09:56 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Duhm.jpg|Duhm.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 09:54 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Chatard.jpg|Chatard.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 09:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Alapin.jpg|Alapin.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 09:46 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Vleug.jpg|Vleug.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 09:41 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Vleugsic.jpg|Vleugsic.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 09:37 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Tal.jpg|Tal.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 09:34 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Morra.jpg|Morra.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 09:32 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Morphy.jpg|Morphy.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 09:31 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:CaudataTOL.gif|CaudataTOL.gif]]"</li> <li>6 apr 2004 09:29 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Najdorf.jpg|Najdorf.jpg]]" <em>(Fritz8 - print)</em></li> <li>6 apr 2004 07:12 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:P9060875.jpg|P9060875.jpg]]" <em>(toestemming van: diego@kosteniuk.com)</em></li> <li>6 apr 2004 07:02 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Zar_Alexander_II.jpg|Zar_Alexander_II.jpg]]" <em>(de: wikipedia)</em></li> <li>6 apr 2004 06:57 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Kramskoy_Alexander_III.jpg|Kramskoy_Alexander_III.jpg]]" <em>(En: wikipedia)</em></li> <li>6 apr 2004 06:35 [[Gebruiker:Babette Paping|Babette Paping]] heeft ge-upload: "[[:Afbeelding:P1010070.jpg|P1010070.jpg]]" <em>(Babette Paping)</em></li> <li>6 apr 2004 06:19 [[Gebruiker:Mister J.|Mister J.]] heeft ge-upload: "[[:Afbeelding:Franz_II._(HRR)|Franz_II._(HRR)]]" <em>(Franz II van Oostenrijk)</em></li> <li>6 apr 2004 01:05 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:TheemsLonden.jpg|TheemsLonden.jpg]]" <em>(De Theems in Londen, gezien vanaf de Millenniumbrug.&lt;p&gt;Foto: &#91;&#91;w:fr:Utilisateur:Cham&#124;Cham]], 15 juli 2002.&lt;p&gt;&#123;&#123;msg:GFDL}})</em></li> <li>6 apr 2004 01:03 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Rvrthames.jpg|Rvrthames.jpg]]"</li> <li>6 apr 2004 01:00 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Thames_kaart.png|Thames_kaart.png]]" <em>(Kaart van de rivier de Thames. Gemaakt door &#91;&#91;w:en:User:ChrisO&#124;ChrisO]], 15 februari 2004)</em></li> <li>6 apr 2004 00:50 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Freudsm.jpg|Freudsm.jpg]]" <em>(mooiere versie van hetzelfde portret)</em></li> <li>5 apr 2004 23:24 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:F1_barrichello.jpg|F1_barrichello.jpg]]" <em>(Rubens Barrichello, 2003. Foto: &#91;&#91;w:en:user:rdikeman&#124;Rick Dikeman]].&lt;p&gt;&#123;&#123;msg:GFDL}})</em></li> <li>5 apr 2004 23:23 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Barrichello.jpg|Barrichello.jpg]]" <em>(Rubens Barrichello, Indianapolis, 2002. Foto: &#91;&#91;w:en:user:rdikeman&#124;Rick Dikeman]].&lt;p&gt;&#123;&#123;msg:GFDL}})</em></li> <li>5 apr 2004 22:49 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Hakkinen.jpg|Hakkinen.jpg]]" <em>(Mika H&amp;auml;kkinen, USGP, 2000. Foto: &#91;&#91;w:en:User:Rdikeman&#124;Rick Dikeman]].&lt;p&gt;&#123;&#123;msg:GFDL}})</em></li> <li>5 apr 2004 22:45 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Rschumacher.jpg|Rschumacher.jpg]]" <em>(Ralf Schumacher, Indianapolis, 2002. Foto: &#91;&#91;w:en:User:rdikeman&#124;Rick Dikeman]].&lt;p&gt;&#123;&#123;msg:GFDL}})</em></li> <li>5 apr 2004 22:12 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Jpmontoya.jpg|Jpmontoya.jpg]]" <em>(Juan Pablo Montoya, Indianapolis, 2002. Foto: &#91;&#91;w:en:User:rdikeman&#124;Rick Dikeman]].&lt;p&gt;&#123;&#123;msg:GFDL}} &#91;&#91;en:Image:j p montoya.jpg]])</em></li> <li>5 apr 2004 22:06 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Mansell.jpg|Mansell.jpg]]" <em>(Nigel Mansell, CART, Mid-Ohio Sports Car Course, 1993.,Fotograaf: &#91;&#91;w:en:user:Rdikeman&#124;Rick Dikeman]].&lt;P&gt;&#123;&#123;msg:GFDL}} &#91;&#91;en:Image:mansell_cart.jpg]])</em></li> <li>5 apr 2004 21:52 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Coulthard.jpg|Coulthard.jpg]]" <em>(David Coulthard, Montreal, 1998. Fotograaf: Rick Dikeman&lt;p&gt;&#123;&#123;msg:GFDL}})</em></li> <li>5 apr 2004 21:30 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Den_Haag_stadhuis_april_2004.JPG|Den_Haag_stadhuis_april_2004.JPG]]" <em>(Den Haag, stadhuis, april 2004, foto door &#91;&#91;Gebruiker:Ellywa]] ter beschikking gesteld onder GNU/FDL licentie)</em></li> <li>5 apr 2004 21:24 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Jugendstil_versieringen_Den_Haag_april_2004.JPG|Jugendstil_versieringen_Den_Haag_april_2004.JPG]]" <em>(Jugenstil versieringen in Den Haag, april 2004, eigen foto van &#91;&#91;Gebruiker:Ellywa]], ter beschikking gesteld onder de GNU/FDL licentie)</em></li> <li>5 apr 2004 21:14 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Triumph_auto_Den_Haag_april_2004.JPG|Triumph_auto_Den_Haag_april_2004.JPG]]" <em>(Auto Triumph Den Haag april 2004, voor de opgebroken trambaan, eigen foto, ter beschikking gesteld onder GNU/FDL)</em></li> <li>5 apr 2004 20:43 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Swalm_groot.jpg|Swalm_groot.jpg]]" <em>(Swalm... Grote versie ook maar uploaden.....)</em></li> <li>5 apr 2004 20:36 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Swalm.jpg|Swalm.jpg]]" <em>(Kopie de: wikipedia)</em></li> <li>5 apr 2004 20:07 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Chagall.jpg|Chagall.jpg]]" <em>(Marc Chagall. Foto: Carl Van Vechten, 1941.&lt;p&gt;Bron: &#91;http&#58;//memory.loc.gov/cgi-bin/query/D?vv:3:./temp/~ammen_pJSr: Library of Congress].&lt;p&gt;&#123;&#123;msg:PD}} &#91;&#91;en:Image:Chagall.jpeg)</em></li> <li>5 apr 2004 19:55 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Classededanse.jpg|Classededanse.jpg]]" <em>(Edgar Degas (1834-1917), La classe de danse (ca. 1874). Musee d&#39;Orsay, Parijs.)</em></li> <li>5 apr 2004 19:30 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:80386.jpg|80386.jpg]]" <em>(AMD 30386 processor)</em></li> <li>5 apr 2004 18:27 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:80186.jpg|80186.jpg]]" <em>(Betere resolutie)</em></li> <li>5 apr 2004 18:24 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:80186.jpg|80186.jpg]]" <em>(Intel 80186 processor)</em></li> <li>5 apr 2004 18:02 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Dompedro-II.jpg|Dompedro-II.jpg]]" <em>(En: wikipedia)</em></li> <li>5 apr 2004 17:53 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:OmgevallenBoom.JPG|OmgevallenBoom.JPG]]" <em>(Eigen foto)</em></li> <li>5 apr 2004 16:24 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:L_IBM-CG80286-6C.jpg|L_IBM-CG80286-6C.jpg]]" <em>(Intel 80286 processor)</em></li> <li>5 apr 2004 16:20 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Alexander_I_of_Russia.jpg|Alexander_I_of_Russia.jpg]]" <em>(En: wikipedia)</em></li> <li>5 apr 2004 16:17 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:L_Intel-C8086-pbs.jpg|L_Intel-C8086-pbs.jpg]]" <em>(Intel 8086 processor)</em></li> <li>5 apr 2004 15:46 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:L_MOS-6510CBM.jpg|L_MOS-6510CBM.jpg]]" <em>(Commodore MOS 6510 processor)</em></li> <li>5 apr 2004 15:12 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:TsaarNicolaasII.jpg|TsaarNicolaasII.jpg]]" <em>(NicolaasII van wiki-en)</em></li> <li>5 apr 2004 13:26 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Katarina_den_stora.jpg|Katarina_den_stora.jpg]]" <em>(sv: wikipedia)</em></li> <li>5 apr 2004 13:05 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Th_p9060875.jpg|Th_p9060875.jpg]]" <em>(toestemming van: diego@kosteniuk.com)</em></li> <li>5 apr 2004 12:55 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Th_p9060875.jpg|Th_p9060875.jpg]]" <em>(toestemming van: diego@kosteniuk.com)</em></li> <li>5 apr 2004 12:50 [[Gebruiker:Oscar|Oscar]] heeft ge-upload: "[[:Afbeelding:KarolingischeMinuskel.jpg|KarolingischeMinuskel.jpg]]" <em>(eigen afbeelding!)</em></li> <li>5 apr 2004 12:46 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:P9060875.jpg|P9060875.jpg]]" <em>(toestemming van: diego@kosteniuk.com)</em></li> <li>5 apr 2004 12:34 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Th_p9060875.jpg|Th_p9060875.jpg]]" <em>(toestemming van: diego@kosteniuk.com)</em></li> <li>5 apr 2004 12:24 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Th_p9060875.jpg|Th_p9060875.jpg]]"</li> <li>5 apr 2004 11:57 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Hypoxia-map.gif|Hypoxia-map.gif]]" <em>(EPA US government public domain)</em></li> <li>5 apr 2004 11:28 [[Gebruiker:Puf|Puf]] heeft ge-upload: "[[:Afbeelding:SwordTail.jpg|SwordTail.jpg]]" <em>(Foto van een zwaarddrager, overgenomen van de Engelstalige Wikipedia-pagina)</em></li> <li>5 apr 2004 11:18 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Abit-kt7-large.jpg|Abit-kt7-large.jpg]]" <em>(aangezien er wel een link naar deze afbeelding is maar de afbeelding zelf niet - van en: wikipedia)</em></li> <li>5 apr 2004 11:15 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Nielshenrikabel.jpg|Nielshenrikabel.jpg]]" <em>(Nog een keer, om te zien of de bug verholpen is.)</em></li> <li>5 apr 2004 11:05 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Nielshenrikabel.jpg|Nielshenrikabel.jpg]]" <em>(tweede pogin)</em></li> <li>5 apr 2004 11:02 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Nielshenrikabel.jpg|Nielshenrikabel.jpg]]" <em>(Niels Henrik Abel, bron http&#58;//finanz.math.tu-graz.ac.at/~predota/history/mathematiker/abel.html&lt;p&gt;&#123;&#123;msg:PD}} &#91;&#91;fr:Image:niels henrik abel.jpg]])</em></li> <li>5 apr 2004 10:50 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Rama_III.jpg|Rama_III.jpg]]" <em>(Standbeeld voor &#91;&#91;Rama III]] in &#91;&#91;Bangkok]]. Foto: &#91;&#91;w:en:User:Ahoerstemeier&#124;Ahoerstemeier]], 12 juli 2003.&lt;p&gt;&#123;&#123;msg:GFDL}})</em></li> <li>5 apr 2004 10:43 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Beeld_Rama_I.jpg|Beeld_Rama_I.jpg]]" <em>(Gedenkbeeld van koning &#91;&#91;Rama I]] in &#91;&#91;Bangkok]]. Foto: &#91;&#91;w:en:User:Ahoerstemeier&#124;Ahoerstemeier]], 18 juli 2003.&lt;p&gt;&#123;&#123;msg:GFDL}})</em></li> <li>5 apr 2004 09:42 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Pythagoras.jpg|Pythagoras.jpg]]" <em>(Pythagoras, uit het &#91;&#91;Nordisk familjebok]], Zweedse encyclopedie uit 1876-1899.)</em></li> <li>5 apr 2004 09:37 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:M_schumacher.jpg|M_schumacher.jpg]]" <em>(En: wikipedia)</em></li> <li>5 apr 2004 07:32 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Bladvormen.jpg|Bladvormen.jpg]]" <em>(zelfgemaakte foto; bladvormen in de vorm van menselijke organen)</em></li> <li>5 apr 2004 07:21 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Amylopectine.png|Amylopectine.png]]" <em>(zelfgemaakte tekening; amylopectine molecuul)</em></li> <li>5 apr 2004 07:18 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Amylose.png|Amylose.png]]" <em>(zelfgemaakte tekening; amylose molecuul)</em></li> <li>5 apr 2004 06:59 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Suikermaispluim.jpg|Suikermaispluim.jpg]]" <em>(zelfgemaakte foto; mannelijke bloeiwijze)</em></li> <li>5 apr 2004 06:56 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Suikermaiskolf.jpg|Suikermaiskolf.jpg]]" <em>(zelfgemaakte foto; vrouwelijke bloeiwijze)</em></li> <li>5 apr 2004 06:45 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Suikermaiskorrels.jpg|Suikermaiskorrels.jpg]]" <em>(zelfgemaakte foto; zaad van extra zoete suikermais)</em></li> <li>5 apr 2004 06:08 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:DARPA_Challenge_RedTeam.jpg|DARPA_Challenge_RedTeam.jpg]]" <em>(En: wikipedia)</em></li> <li>5 apr 2004 00:00 [[Gebruiker:Donderwolk|Donderwolk]] heeft ge-upload: "[[:Afbeelding:Schneider.jpg|Schneider.jpg]]" <em>(Schneider)</em></li> <li>4 apr 2004 23:55 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:SnelwegenNederland.png|SnelwegenNederland.png]]" <em>(Kaartje van Nederland met alle autosnelwegen.)</em></li> <li>4 apr 2004 23:26 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Belgrado1888.png|Belgrado1888.png]]" <em>(Kaart van Belgrado uit Meyers Konversionlexikon 1888, overgenomen van de Duitse Wikipedia.)</em></li> <li>4 apr 2004 23:02 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Straatsburgwapen.jpg|Straatsburgwapen.jpg]]" <em>(Wapen van Straatsburg. Gemaakt met 3D-effect door &#91;&#91;w:fr:Utilisateur:Alibaba&#124;Alibaba]]. Valt onder de &#91;&#91;GNU/FDL]].)</em></li> <li>4 apr 2004 22:52 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Lyonwapen.png|Lyonwapen.png]]" <em>(Wapen van de stad Lyon.&lt;p&gt;Gemaakt door &#91;&#91;w:fr:Rinaldum&#124;&amp;#422;inaldum]], 2004. Mag worden verspreid onder de &#91;&#91;GPL]], de &#91;&#91;GNU/FDL]] of een &#91;&#91;Creative Commons]]-licentie (staat niet bij welke).)</em></li> <li>4 apr 2004 22:30 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Inri.jpg|Inri.jpg]]" <em>(fragment uit een schilderij van Matthias Grunewald, ca. 1510)</em></li> <li>4 apr 2004 22:26 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Lillewapen.png|Lillewapen.png]]" <em>(Bug in bot nu gerepareerd.)</em></li> <li>4 apr 2004 22:18 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Lillewapen.png|Lillewapen.png]]" <em>(Wapen van Lille. Afbeelding onder de &#91;&#91;GNU/FDL]]-licentie van &#91;&#91;w:fr:Utilisateur:Alibaba&#124;Alibaba]].)</em></li> <li>4 apr 2004 22:02 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:DenisDiderot.jpg|DenisDiderot.jpg]]" <em>(kleurenafbeelding van hetzelfde schilderij)</em></li> <li>4 apr 2004 21:57 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Flag-westsahara.png|Flag-westsahara.png]]" <em>(tweede poging)</em></li> <li>4 apr 2004 21:55 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Flag-westsahara.png|Flag-westsahara.png]]" <em>(Vlag van de westelijke Sahara)</em></li> <li>4 apr 2004 21:50 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Vlag-canarisch.png|Vlag-canarisch.png]]" <em>(tweede poging)</em></li> <li>4 apr 2004 21:46 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Vlag-canarisch.png|Vlag-canarisch.png]]" <em>(Vlag van de Canarische eilanden (gekopieerd van de Duitse Wikipedia, die het zelf weer van de Esperanto Wikipedia heeft))</em></li> <li>4 apr 2004 21:36 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Nice_vanaf_haven.jpg|Nice_vanaf_haven.jpg]]" <em>(De stad Nice, gefotografeerd vanaf de haven. Foto &#91;&#91;w:de:Benutzer:Urbanus&#124;Urbanus]].)</em></li> <li>4 apr 2004 21:27 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Wyomingstateseal.jpg|Wyomingstateseal.jpg]]" <em>(Zegel van de staat &#91;&#91;Wyoming]]. Van http&#58;//www.usembassy.org. Publiek domein.)</em></li> <li>4 apr 2004 21:05 [[Gebruiker:Danielm|Danielm]] heeft ge-upload: "[[:Afbeelding:Abit-kt7-small.jpg|Abit-kt7-small.jpg]]" <em>(Kopie Wikipedia en:)</em></li> <li>4 apr 2004 21:00 [[Gebruiker:Robbot2|Robbot2]] heeft ge-upload: "[[:Afbeelding:Cnut.jpg|Cnut.jpg]]" <em>(Koning &#91;&#91;Knoet de Grote&#124;Knoet]]. Afbeelding uit een Middeleeuws manuscript.)</em></li> <li>4 apr 2004 20:19 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Sealjohn.jpg|Sealjohn.jpg]]" <em>(tweede poging, Robbot ging mis.)</em></li> <li>4 apr 2004 20:16 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Sealjohn.jpg|Sealjohn.jpg]]" <em>(Zegel van koning &#91;&#91;Jan zonder Land]] op de &#91;&#91;Magna Charta]].)</em></li> <li>4 apr 2004 20:15 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Neva-StPetersburg2.JPG|Neva-StPetersburg2.JPG]]" <em>(Toestemming fotograaf)</em></li> <li>4 apr 2004 20:04 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Ballet.JPG|Ballet.JPG]]" <em>(Toestemming fotograaf)</em></li> <li>4 apr 2004 19:17 [[Gebruiker:IMFJ|IMFJ]] heeft ge-upload: "[[:Afbeelding:Jc_bad_rabbit_vap_1987_voor_het_bolletjescafé.jpg|Jc_bad_rabbit_vap_1987_voor_het_bolletjescafé.jpg]]" <em>(JC Bad Rabbit VAP 1987 voor Café de Klok)</em></li> <li>4 apr 2004 18:11 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:LodewijkFilips.JPG|LodewijkFilips.JPG]]" <em>(Lodewijk Filips (van de Engelse Wiki))</em></li> <li>4 apr 2004 17:34 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Ferdinand_van_Bulgarije.jpg|Ferdinand_van_Bulgarije.jpg]]" <em>(Koning Ferdinand van Bulgarije (van de Engelse Wiki))</em></li> <li>4 apr 2004 16:38 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Essex.png|Essex.png]]" <em>(van en:)</em></li> <li>4 apr 2004 16:36 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Dupondii.jpg|Dupondii.jpg]]" <em>(Dupondii uit verschillende periodes van het Romeinse rijk)</em></li> <li>4 apr 2004 14:38 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Bodhran.jpg|Bodhran.jpg]]" <em>(Bohdran van wiki-en)</em></li> <li>4 apr 2004 14:18 [[Gebruiker:Bemoeial|Bemoeial]] heeft ge-upload: "[[:Afbeelding:Eisenhower.jpg|Eisenhower.jpg]]" <em>(Eisenhower van wiki-en)</em></li> <li>4 apr 2004 14:14 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Burg_Hohenzollern.jpg|Burg_Hohenzollern.jpg]]" <em>(Burcht Hohenzollern bij Hechingen (van Duitse Wiki))</em></li> <li>4 apr 2004 12:55 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FrederikIIIklein.jpg|FrederikIIIklein.jpg]]" <em>(Keizer Frederik III van Duitsland (van Engelse Wiki))</em></li> <li>4 apr 2004 12:54 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:FrederikIIIGroot.jpeg|FrederikIIIGroot.jpeg]]" <em>(Keizer Frederik III van Duitsland (van Engelse Wiki))</em></li> <li>4 apr 2004 10:53 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Benzinepomp003.jpg|Benzinepomp003.jpg]]" <em>(Benzinepomp (Shell) in Koblenz-Metternich. Foto van &#91;&#91;Gebruiker:Andre Engels&#124;Andre Engels]], en door hem in het publiek domein geplaatst.)</em></li> <li>4 apr 2004 09:57 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Hirohito.jpg|Hirohito.jpg]]" <em>(En: wikipedia)</em></li> <li>4 apr 2004 07:28 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Saturnus2.jpg|Saturnus2.jpg]]" <em>(gecropt)</em></li> <li>4 apr 2004 07:23 [[Gebruiker:Wilinckx|Wilinckx]] heeft ge-upload: "[[:Afbeelding:Saturn_-_Voyager_1.jpg|Saturn_-_Voyager_1.jpg]]" <em>(Saturnus, (omgezet van tiff naar jpg) vanaf openbare bron http&#58;//nssdc.gsfc.nasa.gov/imgcat/html/object_page/vg1_p22994c.html)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieZeewolde.png|LocatieZeewolde.png]]" <em>(Locatie gemeente Zeewolde. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieWoerden.png|LocatieWoerden.png]]" <em>(Locatie gemeente Woerden. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieVlissingen.png|LocatieVlissingen.png]]" <em>(Locatie gemeente Vlissingen. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieVeere.png|LocatieVeere.png]]" <em>(Locatie gemeente Veere. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieUtrecht.png|LocatieUtrecht.png]]" <em>(Locatie gemeente Utrecht. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieTerneuzen.png|LocatieTerneuzen.png]]" <em>(Locatie gemeente Terneuzen. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieSluis.png|LocatieSluis.png]]" <em>(Locatie gemeente Sluis. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieReimerswaal.png|LocatieReimerswaal.png]]" <em>(Locatie gemeente Reimerswaal. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieOudewater.png|LocatieOudewater.png]]" <em>(Locatie gemeente Oudewater. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieNoord-Beveland.png|LocatieNoord-Beveland.png]]" <em>(Locatie gemeente Noord-Beveland. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieMontfoort.png|LocatieMontfoort.png]]" <em>(Locatie gemeente Montfoort. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieMiddelburg.png|LocatieMiddelburg.png]]" <em>(Locatie gemeente Middelburg. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieMaarssen.png|LocatieMaarssen.png]]" <em>(Locatie gemeente Maarssen. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieLelystad.png|LocatieLelystad.png]]" <em>(Locatie gemeente Lelystad. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieKapelle.png|LocatieKapelle.png]]" <em>(Locatie gemeente Kapelle. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieHulst.png|LocatieHulst.png]]" <em>(Locatie gemeente Hulst. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieGoes.png|LocatieGoes.png]]" <em>(Locatie gemeente Goes. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieDeRondeVenen.png|LocatieDeRondeVenen.png]]" <em>(Locatie gemeente De Ronde Venen. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieDeBilt.png|LocatieDeBilt.png]]" <em>(Locatie gemeente De Bilt. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieBreukelen.png|LocatieBreukelen.png]]" <em>(Locatie gemeente Breukelen. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieBorsele.png|LocatieBorsele.png]]" <em>(Locatie gemeente Borsele. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:11 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:LocatieAlmere.png|LocatieAlmere.png]]" <em>(Locatie gemeente Almere. Afbeelding gemaakt door &#91;&#91;gebruiker:Mtcv]] en vrij te gebruiken.)</em></li> <li>4 apr 2004 02:09 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Phoe-nl.jpg|Phoe-nl.jpg]]" <em>(nog een poging)</em></li> <li>4 apr 2004 02:03 [[Gebruiker:Flyingbird|Flyingbird]] heeft ge-upload: "[[:Afbeelding:Phoe-nl.jpg|Phoe-nl.jpg]]" <em>(Fenicische i.p.v. Phoenicisch/Foenicisch, was niet echt nodig denk ik, maar goed...)</em></li> <li>4 apr 2004 01:15 [[Gebruiker:Arrowman|Arrowman]] heeft ge-upload: "[[:Afbeelding:IMG_0102.JPG|IMG_0102.JPG]]" <em>(Eigen foto)</em></li> <li>4 apr 2004 01:13 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Phoe-nl.jpg|Phoe-nl.jpg]]" <em>(Gewijzigd)</em></li> <li>3 apr 2004 23:01 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Scrabble.png|Scrabble.png]]" <em>(van en:)</em></li> <li>3 apr 2004 23:00 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:AgrippinaSrSest.JPG|AgrippinaSrSest.JPG]]" <em>(Portret van &#91;&#91;Agrippina de Oudere]] op een sestertius uitgegeven door haar zwager, keizer &#91;&#91;Claudius]])</em></li> <li>3 apr 2004 21:58 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:Hanepraai_Gouda.jpg|Hanepraai_Gouda.jpg]]" <em>(Voormalige Hanepraaisluis in Gouda, Eigen foto, gebruik vrij)</em></li> <li>3 apr 2004 20:56 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:GrootHoefbladCloseUp-kl.jpg|GrootHoefbladCloseUp-kl.jpg]]" <em>(Foto door mij genomen maart 2004, Gouda.)</em></li> <li>3 apr 2004 20:28 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:WitteDovenetelOvz-hr.jpg|WitteDovenetelOvz-hr.jpg]]" <em>(Foto genomen maart 2004 in Industriegebied Goudse poort, Gouda. Rechten hierbij onder gnu/fdl gebracht)</em></li> <li>3 apr 2004 20:25 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:WitteDovenetelOvz-kl.jpg|WitteDovenetelOvz-kl.jpg]]" <em>(Foto genomen maart 2004 in Industriegebied Goudse poort, Gouda. Rechten hierbij onder gnu/fdl gebracht)</em></li> <li>3 apr 2004 20:06 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:KleineWinterPosteleinCloseUp-kl.jpg|KleineWinterPosteleinCloseUp-kl.jpg]]" <em>(Kleine winter postelein, zelf genomen foto berm zuiderpark, maart 2004)</em></li> <li>3 apr 2004 20:05 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:KleineWinterPosteleinOvz-kl.jpg|KleineWinterPosteleinOvz-kl.jpg]]" <em>(Kleine winter postelein, zelf genomen foto berm zuiderpark, maart 2004)</em></li> <li>3 apr 2004 20:00 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 18:49 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 18:48 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 18:19 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:GemeentenZuid-HollandNrs.png|GemeentenZuid-HollandNrs.png]]" <em>(Gemeenten in Zuid-Holland (genummerd). Eigen werk, vrij te gebruiken.)</em></li> <li>3 apr 2004 18:08 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 17:33 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:LimburgBGemeenten.png|LimburgBGemeenten.png]]" <em>(grotere nummertjes)</em></li> <li>3 apr 2004 17:11 [[Gebruiker:Ashley|Ashley]] heeft ge-upload: "[[:Afbeelding:Onze_vakantie_|Onze_vakantie_]]"</li> <li>3 apr 2004 16:14 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Arundel.jpg|Arundel.jpg]]" <em>(eigen foto)</em></li> <li>3 apr 2004 16:08 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Sussex.png|Sussex.png]]" <em>(van en:)</em></li> <li>3 apr 2004 15:55 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Haruspex.png|Haruspex.png]]" <em>(Schapenlever, van de Engelse Wiki)</em></li> <li>3 apr 2004 15:36 [[Gebruiker:Känsterle|Känsterle]] heeft ge-upload: "[[:Afbeelding:Augur.jpg|Augur.jpg]]" <em>(Vogelwichelaar (van de Zweedse Wikipedia))</em></li> <li>3 apr 2004 15:27 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:HeuvelsRome.png|HeuvelsRome.png]]" <em>(Kaartje met de zeven heuvels van Rome. Eigen werk, vrij te gebruiken.)</em></li> <li>3 apr 2004 15:25 [[Gebruiker:Mtcv|Mtcv]] heeft ge-upload: "[[:Afbeelding:RomeKleinHeuvels.png|RomeKleinHeuvels.png]]" <em>(Overzicht Rome met locatie heuvelgebied. Eigen werk, vrij te gebruiken.)</em></li> <li>3 apr 2004 14:54 [[Gebruiker:Head|Head]] heeft ge-upload: "[[:Afbeelding:LocBonn.png|LocBonn.png]]" <em>(Kaart van Duitsland met de locatie van Bonn)</em></li> <li>3 apr 2004 13:13 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Nicaragua-coa.jpg|Nicaragua-coa.jpg]]" <em>(En: wikipedia)</em></li> <li>3 apr 2004 12:59 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Grenadaarms22.PNG|Grenadaarms22.PNG]]" <em>(En: wikipedia)</em></li> <li>3 apr 2004 12:04 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Logooas.jpg|Logooas.jpg]]" <em>(OAS beperkte toestemming)</em></li> <li>3 apr 2004 11:45 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Adold_Eichmann.jpg|Adold_Eichmann.jpg]]" <em>(En: wikipedia)</em></li> <li>3 apr 2004 10:25 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Messalina.jpg|Messalina.jpg]]" <em>(Messalina, 3de vrouw van keizer &#91;&#91;Claudius]]. van Engelse Wikipedia (galleria Uffizi, Florence, Italië) )</em></li> <li>3 apr 2004 09:47 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 09:47 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 09:28 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 09:15 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 09:11 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 08:44 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 08:43 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 08:41 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 08:40 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 08:36 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(upload test)</em></li> <li>3 apr 2004 08:29 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Lem.jpg|Lem.jpg]]"</li> <li>3 apr 2004 08:25 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Black.jpg|Black.jpg]]"</li> <li>3 apr 2004 08:23 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Tschi.jpg|Tschi.jpg]]"</li> <li>3 apr 2004 08:19 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Anti.jpg|Anti.jpg]]"</li> <li>3 apr 2004 07:57 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Test.jpg|Test.jpg]]" <em>(test)</em></li> <li>3 apr 2004 07:42 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Telluur.jpg|Telluur.jpg]]" <em>(tweede poging)</em></li> <li>3 apr 2004 07:37 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Telluur.jpg|Telluur.jpg]]" <em>(Telluur. Eigen foto van &#91;&#91;w:en:User:RTC&#124;RTC]].)</em></li> <li>3 apr 2004 07:20 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Locaken.png|Locaken.png]]" <em>(Locatie van Aken van &#91;http&#58;//www.opengeodb.de/suche/index.php?id=13352&amp;q=Aachen www.OpenGeoDb])</em></li> <li>3 apr 2004 06:26 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Locemmerik.png|Locemmerik.png]]" <em>(De locatie van &#91;&#91;Emmerik]] van &#91;http&#58;//www.opengeodb.de/suche/index.php?id=16185&amp;q=Emmerich www.OpenGeoDb.de]])</em></li> <li>3 apr 2004 06:18 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Locwesel.png|Locwesel.png]]" <em>(De locatie van Wesel van &#91;http&#58;//www.opengeodb.de/suche/index.php?id=26001&amp;q=Wesel www.OpenGeoDb])</em></li> <li>3 apr 2004 06:12 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Locwürzburg.png|Locwürzburg.png]]" <em>(Locatie van Würzburg van &#91;http&#58;//www.opengeodb.de/suche/index.php?id=26466&amp;q=W%FCrzburg www.OpenGeoDb.de])</em></li> <li>2 apr 2004 22:31 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:Woonhuis_Leo_Vroman_Gouda.jpg|Woonhuis_Leo_Vroman_Gouda.jpg]]" <em>(Gedenkbord ouderlijk huis Leo Vroman. Eigen foto gebruik vrij)</em></li> <li>2 apr 2004 21:52 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Locbadbentheim.png|Locbadbentheim.png]]" <em>(Locatie van Bad Bentheim. Kaart van &#91;http&#58;//www.opengeodb.de/suche/index.php?id=13867&amp;q=Bad%20Bentheim www.OpenGeoDb.de])</em></li> <li>2 apr 2004 21:32 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:LocAschaffenburg.png|LocAschaffenburg.png]]" <em>(Locatie van Aschaffenburg van &#91;http&#58;//www.opengeodb.de/suche/index.php?id=13756&amp;q=Aschaffenburg www.OpenGeoDb.de])</em></li> <li>2 apr 2004 19:56 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:LogoLB.png|LogoLB.png]]" <em>(Zelfgetekend Combinootje)</em></li> <li>2 apr 2004 19:46 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:MondingEem.JPG|MondingEem.JPG]]" <em>(Eigen foto)</em></li> <li>2 apr 2004 19:37 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Heide.JPG|Heide.JPG]]" <em>(eigen foto)</em></li> <li>2 apr 2004 17:45 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Helgoland.png|Helgoland.png]]" <em>(Helgoland van &#91;http&#58;//www.opengeodb.de/suche/index.php?id=18129&amp;q=Helgoland www.openGeoDb.de])</em></li> <li>2 apr 2004 17:42 [[Gebruiker:Robk|Robk]] heeft ge-upload: "[[:Afbeelding:Wapen_Macedonie.PNG|Wapen_Macedonie.PNG]]" <em>(Van Engelse wiki; verkleind)</em></li> <li>2 apr 2004 17:26 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Locbodenwerder.png|Locbodenwerder.png]]" <em>(Locatie van Bodenwerder van &#91;http&#58;//www.opengeodb.de/suche/index.php?id=14658&amp;q=Bodenwerder www.opengeoDb.de])</em></li> <li>2 apr 2004 17:15 [[Gebruiker:Chreng|Chreng]] heeft ge-upload: "[[:Afbeelding:Condoleezza_Rice.jpg|Condoleezza_Rice.jpg]]" <em>(engelse wiki)</em></li> <li>2 apr 2004 16:50 [[Gebruiker:Roepers|Roepers]] heeft ge-upload: "[[:Afbeelding:Kaarthameln.png|Kaarthameln.png]]" <em>(Kaart van Hamelen van &#91;http&#58;//www.opengeodb.de/suche/index.php?id=17840&amp;q=Hameln www.openGeoDb.de])</em></li> <li>2 apr 2004 16:39 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Lacerta_constellation_map.png|Lacerta_constellation_map.png]]" <em>(laatste poging)</em></li> <li>2 apr 2004 16:35 [[Gebruiker:Andre Engels|Andre Engels]] heeft ge-upload: "[[:Afbeelding:Lacerta_constellation_map.png|Lacerta_constellation_map.png]]" <em>(Iets misgegaan bij Robbot; correcte versie)</em></li> <li>2 apr 2004 16:34 [[Gebruiker:Robbot|Robbot]] heeft ge-upload: "[[:Afbeelding:Lacerta_constellation_map.png|Lacerta_constellation_map.png]]" <em>(Kaart van het sterrenbeeld &#91;&#91;Lacerta]]. Gemaakt door &#91;&#91;w:en:User:Bronger&#124;Torsten Bronger]].)</em></li> <li>2 apr 2004 16:05 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Schroef_van_archimedes.jpg|Schroef_van_archimedes.jpg]]" <em>(Schroef van Archimedes, vanaf Engelse wikipedi, alwaar vermeldt: Image from http&#58;//www.probertencyclopaedia.com/SA.HTM , used by permission )</em></li> <li>2 apr 2004 15:27 [[Gebruiker:Avanschelven|Avanschelven]] heeft ge-upload: "[[:Afbeelding:Wight.png|Wight.png]]" <em>(van en:)</em></li> <li>2 apr 2004 13:25 [[Gebruiker:CE|CE]] heeft ge-upload: "[[:Afbeelding:Orangoetan.jpg|Orangoetan.jpg]]" <em>(engelse wiki)</em></li> <li>2 apr 2004 11:18 [[Gebruiker:Mels Lenstra|Mels Lenstra]] heeft ge-upload: "[[:Afbeelding:Relais.bmp|Relais.bmp]]" <em>(Schematische tekening van een relais, gemaakt door Mels Lenstra - ik geef deze afbeelding vrij op grond van de GNU public license)</em></li> <li>2 apr 2004 10:54 [[Gebruiker:Mels Lenstra|Mels Lenstra]] heeft ge-upload: "[[:Afbeelding:Dagobert.gif|Dagobert.gif]]" <em>(Dagobert Duck (zwemt in zijn geld) - public domain)</em></li> <li>2 apr 2004 09:52 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gambietal.jpg|Gambietal.jpg]]"</li> <li>2 apr 2004 09:44 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gambiettd.jpg|Gambiettd.jpg]]"</li> <li>2 apr 2004 09:43 [[Gebruiker:Pieterrr|Pieterrr]] heeft ge-upload: "[[:Afbeelding:Bobross.jpg|Bobross.jpg]]" <em>(Bob Ross!)</em></li> <li>2 apr 2004 09:37 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gambiet.jpg|Gambiet.jpg]]"</li> <li>2 apr 2004 09:34 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gambietsd.jpg|Gambietsd.jpg]]"</li> <li>2 apr 2004 09:26 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gambietwi.jpg|Gambietwi.jpg]]"</li> <li>2 apr 2004 09:21 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gambietsl.jpg|Gambietsl.jpg]]"</li> <li>2 apr 2004 09:15 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gambietni.jpg|Gambietni.jpg]]"</li> <li>2 apr 2004 09:12 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Romeinse_As.jpg|Romeinse_As.jpg]]" <em>(Romeinse as. Enkele voorbeelden van 210 v. Chr. tot 161 na Chr,)</em></li> <li>2 apr 2004 08:19 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:RomeinseAs.jpg|RomeinseAs.jpg]]" <em>(Romeinse as. Enkele voorbeelden van 210 v. Chr. tot 180 na Chr,)</em></li> <li>1 apr 2004 21:59 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Hans_Asperger.jpg|Hans_Asperger.jpg]]" <em>(En: wikipedia)</em></li> <li>1 apr 2004 21:07 [[Gebruiker:Ellywa|Ellywa]] heeft ge-upload: "[[:Afbeelding:Nederlandse_vlag_halfstok.jpg|Nederlandse_vlag_halfstok.jpg]]" <em>(Nederlandse vlag halfstok, uitsnede van &#91;&#91;:Afbeelding:Dieselgemaal Gouda maart 2004.JPG]], foto van &#91;&#91;Gebruiker:Johi]])</em></li> <li>1 apr 2004 20:57 [[Gebruiker:LennartBolks|LennartBolks]] heeft ge-upload: "[[:Afbeelding:Halfstok.jpg|Halfstok.jpg]]" <em>(fragment van Afbeelding:Dieselgemaal Gouda maart 2004.JPG:)</em></li> <li>1 apr 2004 20:15 [[Gebruiker:Johi|Johi]] heeft ge-upload: "[[:Afbeelding:Vroman_zwwt.jpg|Vroman_zwwt.jpg]]" <em>(De dichter wetenschapper Leo Vroman, publiek domein, internet )</em></li> <li>1 apr 2004 17:02 [[Gebruiker:Marco j|Marco j]] heeft ge-upload: "[[:Afbeelding:Marvin_Gaye.jpg|Marvin_Gaye.jpg]]" <em>(Marvin Gaye, 1983 (from the show &quot;from I Love The 80s: 1987 &quot; www.vh1.com))</em></li> <li>1 apr 2004 15:23 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Sloot.JPG|Sloot.JPG]]" <em>(Eigen foto)</em></li> <li>1 apr 2004 15:15 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:Denarii.jpg|Denarii.jpg]]" <em>(&#91;&#91;Denarii]] uit uiteenlopende perioden van het Romeinse rijk)</em></li> <li>1 apr 2004 14:00 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gamfrans.jpg|Gamfrans.jpg]]" <em>(gambietvariant)</em></li> <li>1 apr 2004 13:56 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Gamfrans.jpg|Gamfrans.jpg]]" <em>(de gambietvariant in de franse opening)</em></li> <li>1 apr 2004 12:34 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Klase6.jpg|Klase6.jpg]]"</li> <li>1 apr 2004 12:25 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Klasa6.jpg|Klasa6.jpg]]"</li> <li>1 apr 2004 12:01 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bogodg.jpg|Bogodg.jpg]]"</li> <li>1 apr 2004 11:50 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:AquiliaSevera.jpg|AquiliaSevera.jpg]]" <em>(Portret van keizerin &#91;&#91;Aquilia Severa]] op een Romeinse &#91;&#91;denarius]] uit &#91;&#91;221]])</em></li> <li>1 apr 2004 11:49 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Bognimzo.jpg|Bognimzo.jpg]]"</li> <li>1 apr 2004 11:34 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:JuliaPaula.jpg|JuliaPaula.jpg]]" <em>(Portret van keizerin &#91;&#91;Julia Paula]] op een Romeinse &#91;&#91;denarius]] uit &#91;&#91;219]])</em></li> <li>1 apr 2004 11:27 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:Kantoor_Flevolandschap.JPG|Kantoor_Flevolandschap.JPG]]" <em>(Eigen foto)</em></li> <li>1 apr 2004 11:25 [[Gebruiker:Bezeh.nl|Bezeh.nl]] heeft ge-upload: "[[:Afbeelding:Galop-bew.gif|Galop-bew.gif]]" <em>(arbeidsgalop)</em></li> <li>1 apr 2004 11:18 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:OrbianaSest.jpg|OrbianaSest.jpg]]" <em>(Portret van keizerin &#91;&#91;Orbiana]] op een Romeinse &#91;&#91;sestertius]] uit &#91;&#91;225]])</em></li> <li>1 apr 2004 10:56 [[Gebruiker:CharlesS|CharlesS]] heeft ge-upload: "[[:Afbeelding:AlbinusSest.jpg|AlbinusSest.jpg]]" <em>(Portret van &#91;&#91;Clodius Albinus]] als &#39;&#39;Caesar&#39;&#39; op Romeinse sestertius uit 194)</em></li> <li>1 apr 2004 09:37 [[Gebruiker:Waerth|Waerth]] heeft ge-upload: "[[:Afbeelding:Ultramanenzijnmoeder.jpg|Ultramanenzijnmoeder.jpg]]" <em>(eigen foto waerth)</em></li> <li>1 apr 2004 09:30 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Aldg.jpg|Aldg.jpg]]"</li> <li>1 apr 2004 09:25 [[Gebruiker:Waerth|Waerth]] heeft ge-upload: "[[:Afbeelding:Ultramangroep.jpg|Ultramangroep.jpg]]" <em>(eigen foto waerth)</em></li> <li>1 apr 2004 09:24 [[Gebruiker:Waerth|Waerth]] heeft ge-upload: "[[:Afbeelding:Userwaerth.jpg|Userwaerth.jpg]]" <em>(eigen foto waerth)</em></li> <li>1 apr 2004 09:06 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Alfr.jpg|Alfr.jpg]]"</li> <li>1 apr 2004 08:55 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pendame.jpg|Pendame.jpg]]"</li> <li>1 apr 2004 08:31 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Penpaard.jpg|Penpaard.jpg]]"</li> <li>1 apr 2004 08:27 [[Gebruiker:Jaapvanderkooij|Jaapvanderkooij]] heeft ge-upload: "[[:Afbeelding:Pentoren.jpg|Pentoren.jpg]]"</li> <li>1 apr 2004 06:45 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Suikermais.jpg|Suikermais.jpg]]" <em>(zelfgemaakte foto van suikermais &#39;Tasty sweet&#39;)</em></li> <li>1 apr 2004 06:33 [[Gebruiker:Rasbak|Rasbak]] heeft ge-upload: "[[:Afbeelding:Paardebloem_zaadpluis.JPG|Paardebloem_zaadpluis.JPG]]" <em>(zelfgemaakte foto; bloemhoofdje met rijp zaad)</em></li> <li>1 apr 2004 06:02 [[Gebruiker:GerardM|GerardM]] heeft ge-upload: "[[:Afbeelding:CommonMurre23.jpg|CommonMurre23.jpg]]" <em>(En: wikipedia)</em></li> <li>1 apr 2004 04:37 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:MPD-large.jpg|MPD-large.jpg]]" <em>(valt onder gnu/fdl, van engelse wiki)</em></li> <li>1 apr 2004 04:02 [[Gebruiker:TeunSpaans|TeunSpaans]] heeft ge-upload: "[[:Afbeelding:Image_MPD.jpg|Image_MPD.jpg]]" <em>(valt onder gnu/fdl)</em></li> </ul> Oudere uploads: * [[Wikipedia:Upload_logboek_archief_maart_2004|december 2003-maart 2004]] * [http://nl.wikipedia.org/w/wiki.phtml?title=Wikipedia:Upload_logboek&oldid=137067 mei-november 2003] libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/data-014.xml0000664000175000017500000000034014176701531022332 0ustar maartenmaarten ]> libzeep-5.1.7/lib-xml/test/XPath-Test-Suite/xpath-tests.xml0000664000175000017500000001360514176701531023413 0ustar maartenmaarten ]> libzeep-5.1.7/lib-xml/test/parser-test.cpp0000664000175000017500000002655714176701531020344 0ustar maartenmaarten#include #if defined(_MSC_VER) #include #include #endif #include #include #include #include #include #include #include #include #include // #include #include #include using namespace std; using namespace zeep; namespace po = boost::program_options; namespace fs = std::filesystem; int VERBOSE; int TRACE; int error_tests, should_have_failed, total_tests, wrong_exception, skipped_tests; bool run_valid_test(istream& is, fs::path& outfile) { bool result = true; xml::document indoc; is >> indoc; stringstream s; indoc.set_collapse_empty_tags(false); indoc.set_suppress_comments(true); indoc.set_escape_white_space(true); indoc.set_wrap_prolog(false); s << indoc; string s1 = s.str(); trim(s1); if (TRACE) cout << s1 << endl; if (fs::is_directory(outfile)) ; else if (fs::exists(outfile)) { std::ifstream out(outfile, ios::binary); string s2, line; while (not out.eof()) { getline(out, line); s2 += line + "\n"; } trim(s2); if (s1 != s2) { stringstream ss; ss << "output differs: " << endl << endl << s1 << endl << endl << s2 << endl << endl; throw zeep::exception(ss.str()); } } else cout << "skipped output compare for " << outfile << endl; return result; } void dump(xml::element& e, int level = 0) { cout << level << "> " << e.get_qname() << endl; for (auto& [name, ign]: e.attributes()) cout << level << " (a)> " << name << endl; for (auto& c: e) dump(c, level + 1); } bool run_test(const xml::element& test, fs::path base_dir) { bool result = true; fs::path input(base_dir / test.get_attribute("URI")); fs::path output(base_dir / test.get_attribute("OUTPUT")); ++total_tests; if (not fs::exists(input)) { cout << "test file " << input << " does not exist" << endl; return false; } // if (test.attr("SECTIONS") == "B.") // { // if (VERBOSE) // cout << "skipping unicode character validation tests" << endl; // ++skipped_tests; // return true; // } fs::current_path(input.parent_path()); std::ifstream is(input, ios::binary); if (not is.is_open()) throw zeep::exception("test file not open"); string error; try { fs::current_path(input.parent_path()); if (test.get_attribute("TYPE") == "valid") result = run_valid_test(is, output); else if (test.get_attribute("TYPE") == "not-wf" or test.get_attribute("TYPE") == "invalid") { bool failed = false; try { xml::document doc; doc.set_validating(test.get_attribute("TYPE") == "invalid"); doc.set_validating_ns(test.get_attribute("RECOMMENDATION") == "NS1.0"); is >> doc; ++should_have_failed; result = false; } catch (zeep::xml::not_wf_exception& e) { if (test.get_attribute("TYPE") != "not-wf") { ++wrong_exception; throw zeep::exception(string("Wrong exception (should have been invalid):\n\t") + e.what()); } failed = true; if (VERBOSE > 1) cout << e.what() << endl; } catch (zeep::xml::invalid_exception& e) { if (test.get_attribute("TYPE") != "invalid") { ++wrong_exception; throw zeep::exception(string("Wrong exception (should have been not-wf):\n\t") + e.what()); } failed = true; if (VERBOSE > 1) cout << e.what() << endl; } catch (std::exception& e) { throw zeep::exception(string("Wrong exception:\n\t") + e.what()); } if (VERBOSE and not failed) throw zeep::exception("invalid document, should have failed"); } else { bool failed = false; try { xml::document doc; is >> doc; ++should_have_failed; result = false; } catch (std::exception& e) { if (VERBOSE > 1) cout << e.what() << endl; failed = true; } if (VERBOSE and not failed) { if (test.get_attribute("TYPE") == "not-wf") throw zeep::exception("document should have been not well formed"); else // or test.attr("TYPE") == "error" throw zeep::exception("document should have been invalid"); } } } catch (std::exception& e) { if (test.get_attribute("TYPE") == "valid") ++error_tests; result = false; error = e.what(); } if ((result == false and VERBOSE == 1) or (VERBOSE > 1)) { cout << "-----------------------------------------------" << endl << "ID: " << test.get_attribute("ID") << endl << "FILE: " << /*fs::system_complete*/(input) << endl << "TYPE: " << test.get_attribute("TYPE") << endl << "SECTION: " << test.get_attribute("SECTIONS") << endl << "EDITION: " << test.get_attribute("EDITION") << endl << "RECOMMENDATION: " << test.get_attribute("RECOMMENDATION") << endl; istringstream s(test.get_content()); for (;;) { string line; getline(s, line); trim(line); if (line.empty()) { if (s.eof()) break; continue; } cout << "DESCR: " << line << endl; } cout << endl; if (result == false) { istringstream iss(error); for (;;) { string line; getline(iss, line); trim(line); if (line.empty() and iss.eof()) break; cout << " " << line << endl; } cout << endl; // cout << "exception: " << error << endl; } } return result; } void run_test_case(const xml::element& testcase, const string& id, const set& skip, const string& type, int edition, fs::path base_dir, vector& failed_ids) { if (VERBOSE > 1 and id.empty()) cout << "Running testcase " << testcase.get_attribute("PROFILE") << endl; if (not testcase.get_attribute("xml:base").empty()) { base_dir /= testcase.get_attribute("xml:base"); if (fs::exists(base_dir)) fs::current_path(base_dir); } string path; if (id.empty()) path = ".//TEST"; else path = string(".//TEST[@ID='") + id + "']"; regex ws_re(" "); // whitespace for (const xml::element* n: xml::xpath(path).evaluate(testcase)) { auto testID = n->get_attribute("ID"); if (skip.count(testID)) continue; if (not id.empty() and testID != id) continue; if (not type.empty() and type != n->get_attribute("TYPE")) continue; if (edition != 0) { auto es = n->get_attribute("EDITION"); if (not es.empty()) { auto b = sregex_token_iterator(es.begin(), es.end(), ws_re, -1); auto e = sregex_token_iterator(); auto ei = find_if(b, e, [edition](const string& e) { return stoi(e) == edition; }); if (ei == e) continue; } } if (fs::exists(base_dir / n->get_attribute("URI")) and not run_test(*n, base_dir)) { failed_ids.push_back(n->get_attribute("ID")); } } } void test_testcases(const fs::path& testFile, const string& id, const set& skip, const string& type, int edition, vector& failed_ids) { std::ifstream file(testFile, ios::binary); int saved_verbose = VERBOSE; VERBOSE = 0; int saved_trace = TRACE; TRACE = 0; fs::path base_dir = fs::weakly_canonical(testFile.parent_path()); fs::current_path(base_dir); xml::document doc(file); VERBOSE = saved_verbose; TRACE = saved_trace; for (auto test: doc.find("//TESTCASES")) { if (test->get_qname() != "TESTCASES") continue; run_test_case(*test, id, skip, type, edition, base_dir, failed_ids); } } int main(int argc, char* argv[]) { int result = 0; po::options_description desc("Allowed options"); desc.add_options() ("help", "produce help message") ("verbose", "verbose output") ("id", po::value(), "ID for the test to run from the test suite") ("skip", po::value>(), "Skip this test, can be specified multiple times") ("questionable", po::value>(), "Questionable tests, do not consider failure of these to be an error") ("test", "Run SUN test suite") ("edition", po::value(), "XML 1.0 specification edition to test, default is 5, 0 which means run all tests") ("trace", "Trace productions in parser") ("type", po::value(), "Type of test to run (valid|not-wf|invalid|error)") ("single", po::value(), "Test a single XML file") ("dump", po::value(), "Dump the structure of a single XML file") ("print-ids", "Print the ID's of failed tests") ("conf", po::value(), "Configuration file") ; po::positional_options_description p; p.add("test", -1); po::variables_map vm; po::store(po::command_line_parser(argc, argv). options(desc).positional(p).run(), vm); po::notify(vm); if (vm.count("help")) { cout << desc << endl; return 1; } VERBOSE = static_cast(vm.count("verbose")); TRACE = static_cast(vm.count("trace")); fs::path savedwd = fs::current_path(); try { if (vm.count("single")) { fs::path path(vm["single"].as()); std::ifstream file(path, ios::binary); if (not file.is_open()) throw zeep::exception("could not open file"); fs::path dir(path.parent_path()); fs::current_path(dir); run_valid_test(file, dir); } else if (vm.count("dump")) { fs::path path(vm["dump"].as()); std::ifstream file(path, ios::binary); if (not file.is_open()) throw zeep::exception("could not open file"); fs::path dir(path.parent_path()); fs::current_path(dir); xml::document doc; file >> doc; dump(doc.front()); } else { fs::path xmlconfFile("XML-Test-Suite/xmlconf/xmlconf.xml"); if (vm.count("test")) xmlconfFile = vm["test"].as(); if (not fs::exists(xmlconfFile)) throw std::runtime_error("Config file not found: " + xmlconfFile.string()); string id; if (vm.count("id")) id = vm["id"].as(); vector skip; if (vm.count("skip")) skip = vm["skip"].as>(); string type; if (vm.count("type")) type = vm["type"].as(); int edition = 5; if (vm.count("edition")) edition = vm["edition"].as(); vector failed_ids; test_testcases(xmlconfFile, id, {skip.begin(), skip.end()}, type, edition, failed_ids); cout << endl << "summary: " << endl << " ran " << total_tests - skipped_tests << " out of " << total_tests << " tests" << endl << " " << error_tests << " threw an exception" << endl << " " << wrong_exception << " wrong exception" << endl << " " << should_have_failed << " should have failed but didn't" << endl; vector questionable; if (vm.count("questionable")) questionable = vm["questionable"].as>(); set erronous; for (auto fid: failed_ids) { if (std::find(questionable.begin(), questionable.end(), fid) == questionable.end()) erronous.insert(fid); } if (not erronous.empty()) result = 1; if (vm.count("print-ids") and not failed_ids.empty()) { cout << endl; if (erronous.empty()) cout << "All the failed tests were questionable" << endl; else { cout << endl << "ID's for the failed, non-questionable tests: " << endl; copy(erronous.begin(), erronous.end(), ostream_iterator(cout, "\n")); cout << endl; } } } } catch (std::exception& e) { cout << e.what() << endl; return 1; } fs::current_path(savedwd); // #if defined(_MSC_VER) // cout << "press any key to continue..."; // char ch = _getch(); // #endif return result; } libzeep-5.1.7/lib-xml/test/serializer-test.cpp0000664000175000017500000001552714176701531021214 0ustar maartenmaarten#define BOOST_TEST_MODULE Serializer_Test #include #include #include #include #include using namespace std; using namespace zeep::xml; namespace tt = boost::test_tools; struct st_1 { int i; string s; template void serialize(Archive& ar, unsigned long v) { ar & ZEEP_ELEMENT_NAME_VALUE(i) & ZEEP_ELEMENT_NAME_VALUE(s); } bool operator==(const st_1& rhs) const { return i == rhs.i and s == rhs.s; } }; typedef vector v_st_1; BOOST_AUTO_TEST_CASE(serializer_1) { using namespace zeep::xml::literals; auto doc = R"(42)"_xml; int32_t i = -1; deserializer ds(doc); ds.deserialize_element("test", i); BOOST_TEST(i == 42); document doc2; serializer sr(doc2); sr.serialize_element("test", i); BOOST_TEST(doc == doc2); } struct S { int8_t a; float b; string c; bool operator==(const S& s) const { return a == s.a and b == s.b and c == s.c; } template void serialize(Archive& ar, unsigned long version) { ar & element_nvp("a", a) & element_nvp("b", b) & element_nvp("c", c); } }; BOOST_AUTO_TEST_CASE(serializer_2) { using namespace zeep::xml::literals; auto doc = R"(10.2aap)"_xml; S s; deserializer ds(doc); ds.deserialize_element("test", s); BOOST_TEST(s.a == 1); BOOST_TEST(s.b == 0.2, tt::tolerance(0.01)); BOOST_TEST(s.c == "aap"); document doc2; serializer sr(doc2); sr.serialize_element("test", s); BOOST_TEST(doc == doc2); } BOOST_AUTO_TEST_CASE(test_s_1) { st_1 s1 = { 1, "aap" }; document doc; doc.serialize("s1", s1); static_assert(zeep::has_serialize_v, "Oeps"); stringstream s; s << doc; BOOST_CHECK_EQUAL(s.str(), "1aap"); doc.clear(); serializer sr(doc); sr.serialize_element("s1", s1); stringstream ss2; ss2 << doc; BOOST_CHECK_EQUAL(ss2.str(), "1aap"); st_1 s2; doc.deserialize("s1", s2); BOOST_CHECK(s1 == s2); } struct S_arr { vector vi; deque ds; template void serialize(Archive& ar, unsigned long) { ar & element_nvp("vi", vi) & element_nvp("ds", ds); } }; BOOST_AUTO_TEST_CASE(test_serialize_arrays) { static_assert(std::experimental::is_detected_v, "oeps"); static_assert(not std::experimental::is_detected_v>, "oeps"); static_assert(not std::experimental::is_detected_v, "oeps"); vector ii{ 1, 2, 3, 4 }; element e("test"); serializer sr(e); sr.serialize_element("i", ii); document doc; doc.insert(doc.begin(), e);// copy vector ii2; deserializer dsr(e); dsr.deserialize_element("i", ii2); BOOST_TEST(ii == ii2); } BOOST_AUTO_TEST_CASE(test_serialize_arrays2) { S_arr sa{ { 1, 2, 3, 4 }, { { 1, 0.5f, "aap" }, { 2, 1.5f, "noot" } } }; static_assert(zeep::has_serialize_v, "oeps"); static_assert(not zeep::has_serialize_v, "oeps"); static_assert(zeep::is_serializable_type_v, "oeps"); static_assert(zeep::is_serializable_type_v, "oeps"); document doc; doc.serialize("test", sa); S_arr sa2; doc.deserialize("test", sa2); BOOST_TEST(sa.vi == sa2.vi); BOOST_TEST(sa.ds == sa2.ds); } BOOST_AUTO_TEST_CASE(serialize_arrays_2) { using namespace zeep::xml::literals; element e("test"); int i[] = { 1, 2, 3 }; serializer sr(e); sr.serialize_element("i", i); ostringstream os; os << e; BOOST_TEST(os.str() == R"(123)"); } BOOST_AUTO_TEST_CASE(serialize_container_1) { using namespace zeep::xml::literals; element e("test"); array i = { 1, 2, 3 }; serializer sr(e); sr.serialize_element("i", i); array j; deserializer dsr(e); dsr.deserialize_element("i", j); BOOST_TEST(i == j); ostringstream os; os << e; BOOST_TEST(os.str() == R"(123)"); } enum class E { aap, noot, mies }; struct Se { E m_e; template void serialize(Archive& ar, unsigned long) { ar & make_element_nvp("e", m_e); } }; BOOST_AUTO_TEST_CASE(test_s_2) { zeep::value_serializer::instance("my-enum") (E::aap, "aap") (E::noot, "noot") (E::mies, "mies"); vector e = { E::aap, E::noot, E:: mies }; document doc; // cannot create more than one root element in a doc: BOOST_CHECK_THROW(doc.serialize("test", e), zeep::exception); element test("test"); serializer sr(test); sr.serialize_element("e", e); vector e2; deserializer dsr(test); dsr.deserialize_element("e", e2); BOOST_TEST(e == e2); ostringstream s; s << test; BOOST_TEST(s.str() == "aapnootmies"); Se se{E::aap}; document doc2; doc2.serialize("s", se); ostringstream os; os << doc2; BOOST_TEST(os.str() == "aap"); } BOOST_AUTO_TEST_CASE(test_optional) { using namespace zeep::xml::literals; std::optional s; document doc; // doc.serialize("test", s); // BOOST_TEST(doc == ""_xml); s.emplace("aap"); doc.clear(); doc.serialize("test", s); BOOST_TEST(doc == "aap"_xml); s.reset(); doc.deserialize("test", s); BOOST_TEST((bool)s); BOOST_TEST(*s == "aap"); } BOOST_AUTO_TEST_CASE(test_schema) { using namespace zeep::xml::literals; element schema; type_map types; // schema_creator } // BOOST_AUTO_TEST_CASE(test_s_2) // { // st_1 s1 = { 1, "aap" }; // v_st_1 v1; // v1.push_back(s1); // v1.push_back(s1); // xml::document doc; // BOOST_CHECK_THROW(doc.serialize("v1", v1), zeep::exception); // } // BOOST_AUTO_TEST_CASE(test_s_3) // { // st_1 st[] = { { 1, "aap" }, { 2, "noot" } }; // v_st_1 v1; // v1.push_back(st[0]); // v1.push_back(st[1]); // xml::document doc(""); // xml::serializer sr(doc.front()); // sr.serialize_element("s1", v1); // stringstream s; // s << doc; // cout << s.str() << endl; // BOOST_CHECK_EQUAL(s.str(), "1aap2noot"); // v_st_1 v2; // BOOST_CHECK_THROW(doc.deserialize("v1", v2), zeep::exception); // xml::deserializer dr(doc.front()); // dr.deserialize_element("s1", v2); // BOOST_CHECK(v1 == v2); // } // struct st_2 // { // vector s; // template // void serialize(Archive& ar, unsigned long v) // { // ar & ZEEP_ELEMENT_NAME_VALUE(s); // } // }; // BOOST_AUTO_TEST_CASE(test_s_4) // { // st_2 s1; // s1.s.push_back("aap"); // s1.s.push_back("noot"); // xml::document doc; // doc.serialize("st2", s1); // stringstream s; // s << doc; // BOOST_CHECK_EQUAL(s.str(), "aapnoot"); // st_2 s2; // doc.deserialize("st2", s2); // BOOST_CHECK(s1.s == s2.s); // } libzeep-5.1.7/lib-xml/test/unit-test.cpp0000664000175000017500000003234714176701531020021 0ustar maartenmaarten#define BOOST_TEST_MODULE Processor_Test #include #include #include #include using namespace std; namespace zx = zeep::xml; BOOST_AUTO_TEST_CASE(xml_1) { zx::element n("data", { { "attr1", "value-1" }, { "attr2", "value-2" } }); BOOST_TEST(n.name() == "data"); BOOST_TEST(n.attributes().empty() == false); BOOST_TEST(n.attributes().size() == 2); BOOST_TEST(n.attributes().begin() != n.attributes().end()); size_t i = 0; for (auto& [name, value]: n.attributes()) { switch (i++) { case 0: BOOST_TEST(name == "attr1"); BOOST_TEST(value == "value-1"); break; case 1: BOOST_TEST(name == "attr2"); BOOST_TEST(value == "value-2"); break; } } ostringstream s; s << n; BOOST_TEST(s.str() == R"()"); ostringstream s2; s2 << setw(2) << setiosflags(ios_base::left) << n << endl; const char* test = R"( )"; BOOST_TEST(s2.str() == test); n.validate(); } BOOST_AUTO_TEST_CASE(xml_2) { zx::element e("test"); e.nodes().emplace_back(zx::comment("commentaar")); zx::element::node_iterator i = e.nodes().begin(); BOOST_TEST(i == e.nodes().begin()); BOOST_TEST(i != e.nodes().end()); BOOST_TEST(i->str() == "commentaar"); zx::element::iterator j = e.begin(); BOOST_TEST(j == e.begin()); BOOST_TEST(j == e.end()); } BOOST_AUTO_TEST_CASE(xml_3) { zx::element e("test"); zx::element a("aap"); e.nodes().emplace(e.end(), a); BOOST_TEST(a.name() == "aap"); e.nodes().emplace(e.end(), std::move(a)); BOOST_TEST(a.name() == ""); zx::element b("noot"); zx::node& n = b; e.nodes().emplace(e.end(), n); BOOST_TEST(b.name() == "noot"); const zx::node& n2 = b; e.nodes().emplace(e.end(), n2); BOOST_TEST(b.name() == "noot"); // zx::node&& n3 = std::move(b); // e.nodes().emplace(e.end(), n3); // BOOST_TEST(b.name() == ""); e.attributes().emplace("attr1", "value1"); ostringstream s; s << e; BOOST_TEST(s.str() == R"()"); } BOOST_AUTO_TEST_CASE(xml_attributes_1) { using namespace zx::literals; auto doc = R"( )"_xml; auto& t = doc.front().front(); for (auto& a: t.attributes()) { BOOST_TEST(a.name() == "a"); BOOST_TEST(a.get_qname() == "m:a"); BOOST_TEST(a.get_ns() == "http://www.hekkelman.com"); } for (auto a: t.attributes()) { BOOST_TEST(a.name() == "a"); BOOST_TEST(a.get_qname() == "m:a"); // the attribute was copied and thus lost namespace information BOOST_TEST(a.get_ns() != "http://www.hekkelman.com"); } } BOOST_AUTO_TEST_CASE(xml_emplace) { zx::element e("test"); e.emplace_back("test2", { { "a1", "v1" }, { "a2", "v2" }}); ostringstream s; s << e; BOOST_TEST(s.str() == R"()"); e.emplace_front("test1", { { "a1", "v1" }, { "a2", "v2" }}); ostringstream s2; s2 << e; BOOST_TEST(s2.str() == R"()"); } BOOST_AUTO_TEST_CASE(xml_4) { zx::element e("test"); e.emplace_back(zx::element("test2", { { "attr1", "een" }, { "attr2", "twee" } })); ostringstream s; s << e; BOOST_TEST(s.str() == R"()"); } BOOST_AUTO_TEST_CASE(xml_5_compare) { zx::element a("test", { { "a", "v1" }, { "b", "v2" } }); zx::element b("test", { { "b", "v2" }, { "a", "v1" } }); BOOST_TEST(a == b); } BOOST_AUTO_TEST_CASE(xml_container_and_iterators) { zx::element e("test"); zx::element n("a"); e.insert(e.begin(), move(n)); e.back().set_content("aap "); e.emplace_back("b").set_content("noot "); e.emplace_back("c").set_content("mies"); BOOST_TEST(e.size() == 3); BOOST_TEST(not e.empty()); BOOST_TEST(e.front().parent() == &e); BOOST_TEST(e.back().parent() == &e); BOOST_TEST(e.begin() != e.end()); BOOST_TEST(e.str() == "aap noot mies"); e.erase(next(e.begin())); BOOST_TEST(e.str() == "aap mies"); ostringstream s1; s1 << setw(2) << left << e << endl; BOOST_TEST(s1.str() == R"( aap mies )"); e.validate(); ostringstream s2; s2 << e; BOOST_TEST(s2.str() == R"(aap mies)"); e.pop_front(); BOOST_TEST(e.size() == 1); BOOST_TEST(e.front().name() == "c"); e.push_front({"aa"}); BOOST_TEST(e.size() == 2); BOOST_TEST(e.front().name() == "aa"); e.pop_back(); BOOST_TEST(e.size() == 1); BOOST_TEST(e.back().name() == "aa"); BOOST_TEST(e.front().name() == "aa"); e.pop_back(); BOOST_TEST(e.empty()); e.validate(); } BOOST_AUTO_TEST_CASE(xml_copy) { zx::element e("test", { { "a", "een" }, { "b", "twee" } }); e.push_back(e); e.push_back(e); zx::element c("c", { { "x", "0" }}); c.push_back(e); c.push_front(e); zx::element c2 = c; BOOST_TEST(c == c2); } BOOST_AUTO_TEST_CASE(xml_copy2) { zx::element e("test", { { "a", "een" }, { "b", "twee" } }); e.emplace_back("x1"); e.nodes().emplace_back(zx::comment("bla")); e.emplace_back("x2"); auto e1 = e; zx::element c1("test"); c1.emplace_back(std::move(e)); auto c2 = c1; zx::element c3("test"); for (auto& n: c1) c3.emplace_back(std::move(n)); BOOST_TEST(c2 == c3); zx::element e2("test", { { "a", "een" }, { "b", "twee" } }); for (auto& n: c2.front().nodes()) e2.nodes().emplace_back(std::move(n)); BOOST_TEST(e2 == e1); e1.validate(); e2.validate(); } BOOST_AUTO_TEST_CASE(xml_iterators) { zx::element e("test"); for (int i = 0; i < 10; ++i) e.emplace_back("n").set_content(to_string(i)); auto bi = e.begin(); auto ei = e.end(); for (int i = 0; i < 10; ++i) { BOOST_TEST((bi + i)->get_content() == to_string(i)); BOOST_TEST((ei - i - 1)->get_content() == to_string(9 - i)); } } BOOST_AUTO_TEST_CASE(xml_iterators_2) { zx::element e("test"); for (int i = 0; i < 10; ++i) e.emplace_back("n").set_content(to_string(i)); auto bi = e.begin(); auto ei = e.end(); for (int i = 0; i < 10; ++i) { BOOST_TEST((bi + i)->get_content() == to_string(i)); BOOST_TEST((ei - i - 1)->get_content() == to_string(9 - i)); } std::vector nodes; for (auto& n: e.nodes()) nodes.push_back(&n); BOOST_TEST(nodes.size() == 10); for (int i = 0; i < 10; ++i) { zx::element* el = dynamic_cast(nodes[i]); BOOST_TEST(el != nullptr); BOOST_TEST(el->get_content() == to_string(i)); } } BOOST_AUTO_TEST_CASE(xml_attributes) { zx::element e("test", { { "a", "1" }, { "b", "2" } }); auto& attr = e.attributes(); BOOST_TEST(attr.contains("a")); BOOST_TEST(attr.contains("b")); BOOST_TEST(not attr.contains("c")); BOOST_TEST(attr.find("a")->value() == "1"); BOOST_TEST(attr.find("b")->value() == "2"); BOOST_TEST(attr.find("c") == attr.end()); auto i = attr.emplace("c", "3"); BOOST_TEST(attr.contains("c")); BOOST_TEST(attr.find("c") == i.first); BOOST_TEST(attr.find("c")->value() == "3"); BOOST_TEST(i.second == true); i = attr.emplace("c", "3a"); BOOST_TEST(attr.contains("c")); BOOST_TEST(attr.find("c") == i.first); BOOST_TEST(attr.find("c")->value() == "3a"); BOOST_TEST(i.second == false); } BOOST_AUTO_TEST_CASE(xml_doc) { zx::document doc; zx::element e("test", { { "a", "1" }, { "b", "2" } }); doc.push_back(move(e)); zx::document doc2(R"()"); BOOST_TEST(doc == doc2); using namespace zx::literals; auto doc3 = R"()"_xml; BOOST_TEST(doc == doc3); auto doc4 = R"()"_xml; BOOST_TEST(doc4.size() == 1); auto l1 = doc4.front(); BOOST_TEST(l1.get_qname() == "l1"); BOOST_TEST(l1.size() == 1); auto l2 = l1.front(); BOOST_TEST(l2.get_qname() == "l2"); BOOST_TEST(l2.size() == 1); auto l3 = l2.front(); BOOST_TEST(l3.get_qname() == "l3"); BOOST_TEST(l3.size() == 1); auto l4 = l3.front(); BOOST_TEST(l4.get_qname() == "l4"); BOOST_TEST(l4.empty()); auto i = l3.find_first("./l4"); BOOST_TEST(i != l3.end()); l3.erase(i); BOOST_TEST(l3.empty()); i = l1.find_first(".//l3"); BOOST_TEST(i != l1.end()); BOOST_CHECK_THROW(l1.erase(i), zeep::exception); l1.erase(l1.begin()); BOOST_TEST(l1.empty()); } BOOST_AUTO_TEST_CASE(xml_doc2) { zx::document doc; doc.emplace_back("first", { { "a1", "v1" }}); BOOST_CHECK_THROW(doc.emplace_back("second"), zeep::exception); } BOOST_AUTO_TEST_CASE(xml_xpath) { using namespace zx::literals; auto doc = R"()"_xml; auto r = doc.find("//a"); BOOST_TEST(r.size() == 3); BOOST_TEST(r.front()->get_qname() == "a"); } BOOST_AUTO_TEST_CASE(xml_xpath_2) { using namespace zx::literals; auto doc = R"( x y )"_xml; auto r = doc.find("//b[c/a[contains(text(),'x')]]"); BOOST_TEST(r.size() == 2); BOOST_TEST(r.front()->get_qname() == "b"); auto r2 = doc.find("//b/c[@z='z']/a[text()='y']"); BOOST_TEST(r2.size() == 1); BOOST_TEST(r2.front()->get_qname() == "a"); } BOOST_AUTO_TEST_CASE(xml_namespaces) { using namespace zx::literals; auto doc = R"(
)"_xml; auto& data = doc.front(); BOOST_TEST(data.parent() == &doc); BOOST_TEST(data.name() == "data"); BOOST_TEST(data.get_ns().empty()); BOOST_TEST(data.empty() == false); BOOST_TEST(data.begin() != data.end()); auto& div = data.front(); BOOST_TEST(div.name() == "div"); BOOST_TEST(div.get_ns().empty()); BOOST_TEST(div.parent() == &data); auto& test0 = div.front(); BOOST_TEST(test0.parent() == &div); BOOST_TEST(test0.name() == "test0"); BOOST_TEST(test0.get_qname() == "m:test0"); BOOST_TEST(test0.get_ns() == "http://www.hekkelman.com/libzeep/m2"); auto& test1 = *(div.begin() + 1); BOOST_TEST(test1.parent() == &div); BOOST_TEST(test1.name() == "test1"); BOOST_TEST(test1.get_ns().empty()); BOOST_TEST(test1.attributes().size() == 1); auto& test1_if = *test1.attributes().begin(); BOOST_TEST(test1_if.name() == "if"); BOOST_TEST(test1_if.get_qname() == "m:if"); BOOST_TEST(test1_if.get_ns() == "http://www.hekkelman.com/libzeep/m2"); auto& test2 = *(div.begin() + 2); BOOST_TEST(test2.parent() == &div); BOOST_TEST(test2.name() == "test2"); BOOST_TEST(test2.get_ns().empty()); BOOST_TEST(test2.attributes().size() == 1); auto& test2_unless = *test2.attributes().begin(); BOOST_TEST(test2_unless.name() == "unless"); BOOST_TEST(test2_unless.get_qname() == "m:unless"); BOOST_TEST(test2_unless.get_ns() == "http://www.hekkelman.com/libzeep/m2"); } BOOST_AUTO_TEST_CASE(xml_namespaces_2) { using namespace zx::literals; auto doc = R"( )"_xml; auto& data = doc.front(); BOOST_TEST(data.parent() == &doc); BOOST_TEST(data.name() == "data"); BOOST_TEST(data.get_ns() == "http://www.hekkelman.com/libzeep"); BOOST_TEST(data.empty() == false); BOOST_TEST(data.begin() != data.end()); auto& x = data.front(); BOOST_TEST(x.name() == "x"); BOOST_TEST(x.get_qname() == "x"); BOOST_TEST(x.get_ns() == "http://www.hekkelman.com/libzeep"); BOOST_TEST(x.parent() == &data); auto ax = x.attributes().find("a"); BOOST_TEST(ax != x.attributes().end()); BOOST_TEST(ax->value() == "1"); BOOST_TEST(ax->get_ns() == "http://www.hekkelman.com/libzeep"); auto& y = x.front(); BOOST_TEST(y.parent() == &x); BOOST_TEST(y.name() == "y"); BOOST_TEST(y.get_qname() == "y"); BOOST_TEST(y.get_ns() == "http://www.hekkelman.com/libzeep"); auto ay = y.attributes().find("a"); BOOST_TEST(ay != y.attributes().end()); BOOST_TEST(ay->value() == "2"); BOOST_TEST(ay->get_ns() == "http://www.hekkelman.com/libzeep"); zx::element data2("data", { { "xmlns", "http://www.hekkelman.com/libzeep" }}); auto& x2 = data2.emplace_back("x", { { "a", "1" } }); x2.emplace_back("y", { { "a", "2" } }); BOOST_TEST(data == data2); } BOOST_AUTO_TEST_CASE(xml_namespaces_3) { using namespace zx::literals; auto doc = R"( )"_xml; auto& data = doc.front(); BOOST_TEST(data.parent() == &doc); BOOST_TEST(data.name() == "data"); BOOST_TEST(data.get_ns() == "http://www.hekkelman.com/libzeep"); BOOST_TEST(data.empty() == false); BOOST_TEST(data.begin() != data.end()); auto& x = data.front(); BOOST_TEST(x.name() == "x"); BOOST_TEST(x.get_qname() == "x"); BOOST_TEST(x.get_ns() == "http://www.hekkelman.com/libzeep"); BOOST_TEST(x.parent() == &data); auto ax = x.attributes().find("a"); BOOST_TEST(ax != x.attributes().end()); BOOST_TEST(ax->value() == "1"); BOOST_TEST(ax->get_ns() == "http://www.hekkelman.com/libzeep"); auto& y = x.front(); BOOST_TEST(y.parent() == &x); BOOST_TEST(y.name() == "y"); BOOST_TEST(y.get_qname() == "y"); BOOST_TEST(y.get_ns() == "http://www.hekkelman.com/libzeep"); auto ay = y.attributes().find("a:a"); BOOST_TEST(ay != y.attributes().end()); BOOST_TEST(ay->value() == "2"); BOOST_TEST(ay->get_ns() == "http://a.com/"); } BOOST_AUTO_TEST_CASE(security_test_1) { using namespace zx::literals; zx::element n("test"); n.set_attribute("a", "a\xf6\"b"); std::stringstream ss; BOOST_CHECK_THROW(ss << n, zeep::exception); }libzeep-5.1.7/lib-xml/test/xpath-test.cpp0000664000175000017500000000731114176701531020157 0ustar maartenmaarten#include #include #include #include #include #include #include #include #include using namespace std; using namespace zeep; namespace fs = std::filesystem; #define foreach BOOST_FOREACH int VERBOSE; ostream& operator<<(ostream& os, const xml::node& n) { n.write(os , {}); return os; } bool run_test(const xml::element& test) { if (VERBOSE) { cout << "----------------------------------------------------------" << endl << "ID: " << test.get_attribute("ID") << endl << "xpath: " << test.get_attribute("xpath") << endl // << "data: " << test.content() << endl // << "expected-size: " << test.attr("expected-size") << endl << endl; } fs::path data_file = fs::current_path() / test.get_attribute("data"); if (not fs::exists(data_file)) throw zeep::exception("file does not exist"); std::ifstream file(data_file, ios::binary); xml::document doc; file >> doc; if (VERBOSE) cout << "test doc:" << endl << doc << endl; xml::xpath xp(test.get_attribute("xpath")); xml::context context; for (const xml::element* e: test.find("var")) context.set(e->get_attribute("name"), e->get_attribute("value")); xml::node_set ns = xp.evaluate(*doc.root(), context); if (VERBOSE) { int nr = 1; for (const xml::node* n: ns) cout << nr++ << ">> " << *n << endl; } bool result = true; if (ns.size() != boost::lexical_cast(test.get_attribute("expected-size"))) { cout << "incorrect number of nodes in returned node-set" << endl << "expected: " << test.get_attribute("expected-size") << endl; result = false; } string test_attr_name = test.get_attribute("test-name"); string attr_test = test.get_attribute("test-attr"); if (not attr_test.empty()) { if (VERBOSE) cout << "testing attribute " << test_attr_name << " for " << attr_test << endl; for (const xml::node* n: ns) { const xml::element* e = dynamic_cast(n); if (e == NULL) continue; if (e->get_attribute(test_attr_name) != attr_test) { cout << "expected attribute content is not found for node " << e->get_qname() << endl; result = false; } } } if (VERBOSE) { if (result) cout << "Test passed" << endl; else { cout << "Test failed" << endl; int nr = 1; for (const xml::node* n: ns) cout << nr++ << ") " << *n << endl; } } return result; } void run_tests(const fs::path& file) { if (not fs::exists(file)) throw zeep::exception("test file does not exist"); std::ifstream input(file, ios::binary); xml::document doc; input >> doc; fs::path dir = fs::absolute(file).parent_path().parent_path(); if (not dir.empty()) fs::current_path(dir); string base = doc.front().get_attribute("xml:base"); if (not base.empty()) fs::current_path(base); int nr_of_tests = 0, failed_nr_of_tests = 0; for (const xml::element* test: doc.find("//xpath-test")) { ++nr_of_tests; if (run_test(*test) == false) ++failed_nr_of_tests; } cout << endl; if (failed_nr_of_tests == 0) cout << "*** No errors detected" << endl; else { cout << failed_nr_of_tests << " out of " << nr_of_tests << " failed" << endl; if (not VERBOSE) cout << "Run with --verbose to see the errors" << endl; } } int main(int argc, char* argv[]) { using namespace std::literals; fs::path xmlconfFile("XPath-Test-Suite/xpath-tests.xml"); for (int i = 1; i < argc; ++i) { if (argv[i] == "-v"s) { ++VERBOSE; continue; } xmlconfFile = argv[i]; } try { run_tests(xmlconfFile); } catch (std::exception& e) { cout << "exception: " << e.what() << endl; return 1; } return 0; } libzeep-5.1.7/libzeep.pc.in0000664000175000017500000000034414176701531015411 0ustar maartenmaartenprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: libzeep Description: C++ library for building web applications Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lzeep Cflags: -I${includedir}